阅读:2031回复:14
FireWall这个例子只能过滤ICMP包吗
FireWall这个例子只能过滤ICMP包吗,里面的过滤TCP和UDP的代码怎么不好使,我将规则设为空,但是他也进行过滤,不知道都过滤些什么。哪位帮忙解答一下,谢谢。
|
|
最新喜欢:jzyhum... |
沙发#
发布于:2004-06-01 11:33
这是两个防火墙的源码,都是Jesús O.的作品,都是基于ipfltdrv.sys的,希望有点用
|
|
|
板凳#
发布于:2004-06-01 11:36
这个是仿上面做的。怎么一次只能上传一个呀?
|
|
|
地板#
发布于:2004-06-01 11:39
这个是Jesús O改的
|
|
|
地下室#
发布于:2004-06-01 11:45
这个是耐微的,刚开源不久的。我还有XFILTER2.0原代码和一个基于IPHLP的防火墙原代码,以后再传。呵呵,是不是菜鸟都喜欢收集原代码呀。
[编辑 - 6/1/04 by zeusares] |
|
|
5楼#
发布于:2004-06-01 17:27
这个在firewall例子中写的已经很清楚了, 在check_packet函数中
判断数据包是不是你要拦截的, 如果是return 1, 如果让其通过return 0; 用deviceiocontrol函数将过滤规则传给驱动, 从而。。。。 |
|
6楼#
发布于:2004-06-01 19:36
收集这么多源代码不看有什么用?
不是不能过滤,而是这个FileWall程序是个半成品,剩下的东西需要你自己添加。 他发这个例子是为了让你明白驱动与应用界面是如何通信的。 |
|
|
7楼#
发布于:2004-06-01 21:21
spike, mydef.c中不有过滤TCP和UDP协议和端口的程序吗。你说说他到底不完整在哪啊,我是做EJB的,对驱动程序不是很熟悉,你讲一讲好吗
if(p_ip->proto == 6 || p_ip->proto == 17) // TCP and UDP { is_tcp_or_udp = 1; GetSrcAndDestPort(pPacket, &s_Port, &d_Port); DbgPrint(\"Src port:%d Dest port:%d\\n\", s_Port, d_Port); } for(i=0; i<rules; i++) { // 检查开始 if(filter_policy.src_ip != p_ip->sourceIP && filter_policy.src_ip != 0) goto CheckEnd;; if(filter_policy.protocol != p_ip->proto && filter_policy.protocol != 0) goto CheckEnd;; if(is_tcp_or_udp) // 如果不是TCP或UDP包则不进行端口检查 { if(filter_policy.dest_port != d_Port && filter_policy.dest_port != 0) goto CheckEnd;; }else{} // 匹配,判断如何对待 switch(filter_policy.policy) { case 0: // policy为0表示拦截 if(!KeReadStateEvent(gpEventObject)) // KeReadStateEvent返回0代表事件处于非信号态 { // 复制数据到共享内存 memset(SystemVirtualAddress, 0, 100); memcpy(SystemVirtualAddress, pPacket, 256); KeSetEvent(gpEventObject, 0, FALSE); } else{} result = REFUSE; goto Exit; case 1: // policy为1表示放行 result = PASS; goto Exit; case 2: goto Exit; default: goto Exit; }; // 检查结束 CheckEnd: |
|
8楼#
发布于:2004-06-02 11:59
LornWolf最早写的FireWall例子,并在这里贴出来。(那个帖子已经不好找了,你可以看我签名的帖子给的代表,那是最早的东西。)
你的那个例子是别人修改过的,你看看是不是没有把规则定义好。readme是不是没好好看啊。 其实驱动没什么的,如果不涉及跟上面的通信你就当C程序看好了。 那个netwall的防火墙应该是借鉴费尔的 [编辑 - 6/2/04 by spike] |
|
|
9楼#
发布于:2004-06-02 20:08
关键是我不设置规则,他也过滤。WHY?
if(filter_policy.src_ip != p_ip->sourceIP && filter_policy.src_ip != 0) goto CheckEnd;; if(filter_policy.protocol != p_ip->proto && filter_policy.protocol != 0) goto CheckEnd;; 这两句是不是过滤TCP,UDP的语句。是不是如果不符合rule.txt的规则就不过滤的意思 |
|
10楼#
发布于:2004-06-02 20:17
netwall是耐威作的的商业防火墙,是基于NDIS中间层驱动的防火墙
|
|
11楼#
发布于:2004-06-03 11:07
关键是我不设置规则,他也过滤。WHY? 这两句是通过IP地址跟协议来判断是否过滤的。不过这两句好像写的有问题。安我的思路 if(filter_policy.src_ip == 0 || filter_policy.src_ip != p_ip->sourceIP) goto CheckEnd;; if(filter_policy.protocol == 0 || filter_policy.protocol != p_ip->proto) goto CheckEnd;; //------------------------------------------ filter_policy.src_ip跟filter_policy.protocol里的东西是你配置的规则。 p_ip->sourceIP跟p_ip->proto里的东西是实际包里的内容 具体怎么判断你自己决定吧。其实思路对了,实现的方式有很多的。这里是基本的C语言,很好理解的。 |
|
|
12楼#
发布于:2004-06-05 12:13
支持楼主~~~~!!!
|
|
13楼#
发布于:2004-06-05 21:18
哦,我的规则设置错了,所以乱过滤。但是我发现有的时候设置所有ICMP包拦截,但是PING自己还是能PING通,不知道为什么
|
|
14楼#
发布于:2004-06-26 10:11
在swich结构前加入 if(filter_policy.protocol == p_ip->proto),即搞定之。
|
|