用delphi能做网络防火墙吗? 求教 小弟意图用delphi开发网络防火墙,不知道有没有可行性? 怎么入手呢?各位高手给指点指点,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 www.ccrun.com利用操作系统提供的API编写防火墙 作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593/*利用操作系统提供的API编写防火墙.该程序涉及到的API说明请访问微软的MSDN Library代码在C++ Builder 5编译通过如果您想和我交流请email:[email protected]*/#pragma hdrstop#include "windows.h"#include "Fltdefs.h"// 需要加载"iphlpapi.lib"//---------------------------------------------------------------------------#pragma argsusedint main(int argc, char* argv[]){ // 一个创建网络包过滤接口 INTERFACE_HANDLE hInterface; PfCreateInterface(0, PF_ACTION_DROP,//PF_ACTION_FORWARD, PF_ACTION_DROP,//PF_ACTION_FORWARD, FALSE, TRUE, &hInterface); // 绑定需要网络包过滤的IP地址 BYTE localIp[] = {192,168,0,2}; PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp); // 现在我们开始过滤HTTP协议的的接口 FILTER_HANDLE fHandle; // 填充过滤包的规则结构 PF_FILTER_DESCRIPTOR inFilter; inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值 inFilter.dwRule = 0; //一直添这个值 inFilter.pfatType = PF_IPV4; //用 ipV4 地址 inFilter.SrcAddr = localIp; //设置本地IP地址 inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码 inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口 inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY; inFilter.DstAddr = 0; //任意目标地址 inFilter.DstMask = 0; inFilter.wDstPort = 80; //目标端口 80(http 服务) inFilter.wDstPortHighRange = 80; inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议 // 加入一个过滤接口 PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle); // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :) // 移除过滤接口 PfRemoveFilterHandles(hInterface, 1, &fHandle); PfUnBindInterface(hInterface); PfDeleteInterface(hInterface); return 0;} 欢迎大家加入DELPHI程序员群1805366 ,一起交流技术! 要开发防火墙,必须要从硬件驱动上下工夫,在API上做文章是死路一条,即使做的再好,也不能弥补先天不足。可以考虑建立虚拟网络设备为系统的第一、默认网络设备,然后进行过滤、转发给硬件网络设备。 QQ群:11141442有一Delphi滴开源防火墙实例:winsock-firewall-2.0-Source-English-Version.zip。使用API HOOK,不过API Hook无源码。 请教:关于事务处理 Fast Report 2.5 打印系统日期问题 用过skinengine的同行请进 我是来学习的。问个简单的问题 小问题 dephi朋友,什么时候要用游标啊,怎么使用啊???有分啊!!!:) 80分请教:如何写出类似Word里的AutoShape中菱形和圆角控件 我是菜鸟,问一个很菜的问题,!!!!!!!!! 关于安装软件的小问题 如何用Query将一个":"保存用数据库 问一个莫名其妙的问题,应不是很难回答的,但我实在解释不了,在线等!!! 如何限制双击form上边的标题栏最大化?(在线等待!)
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
/*
利用操作系统提供的API编写防火墙.
该程序涉及到的API说明请访问微软的MSDN Library
代码在C++ Builder 5编译通过
如果您想和我交流请email:[email protected]
*/
#pragma hdrstop
#include "windows.h"
#include "Fltdefs.h"
// 需要加载"iphlpapi.lib"
//---------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
// 一个创建网络包过滤接口
INTERFACE_HANDLE hInterface;
PfCreateInterface(0,
PF_ACTION_DROP,//PF_ACTION_FORWARD,
PF_ACTION_DROP,//PF_ACTION_FORWARD,
FALSE,
TRUE,
&hInterface); // 绑定需要网络包过滤的IP地址
BYTE localIp[] = {192,168,0,2};
PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
// 现在我们开始过滤HTTP协议的的接口
FILTER_HANDLE fHandle;
// 填充过滤包的规则结构
PF_FILTER_DESCRIPTOR inFilter;
inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
inFilter.dwRule = 0; //一直添这个值
inFilter.pfatType = PF_IPV4; //用 ipV4 地址
inFilter.SrcAddr = localIp; //设置本地IP地址
inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
inFilter.DstAddr = 0; //任意目标地址
inFilter.DstMask = 0;
inFilter.wDstPort = 80; //目标端口 80(http 服务)
inFilter.wDstPortHighRange = 80;
inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
// 加入一个过滤接口
PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
// 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
// 移除过滤接口
PfRemoveFilterHandles(hInterface, 1, &fHandle);
PfUnBindInterface(hInterface);
PfDeleteInterface(hInterface);
return 0;
}