zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2031回复:14

FireWall这个例子只能过滤ICMP包吗

楼主#
更多 发布于:2004-06-01 11:22
FireWall这个例子只能过滤ICMP包吗,里面的过滤TCP和UDP的代码怎么不好使,我将规则设为空,但是他也进行过滤,不知道都过滤些什么。哪位帮忙解答一下,谢谢。
附件名称/大小 下载次数 最后更新
2004-06-01_FireWall.rar (177KB)  62

最新喜欢:

jzyhummeljzyhum...
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-01 11:33
这是两个防火墙的源码,都是Jesús O.的作品,都是基于ipfltdrv.sys的,希望有点用
附件名称/大小 下载次数 最后更新
2004-06-01_防火墙.rar (107KB)  39
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-01 11:36
这个是仿上面做的。怎么一次只能上传一个呀?
附件名称/大小 下载次数 最后更新
2004-06-01_fire.rar (88KB)  33
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-01 11:39
这个是Jesús O改的
附件名称/大小 下载次数 最后更新
2004-06-01_FirewallPApi.exe (52KB)  33
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-01 11:45
这个是耐微的,刚开源不久的。我还有XFILTER2.0原代码和一个基于IPHLP的防火墙原代码,以后再传。呵呵,是不是菜鸟都喜欢收集原代码呀。

[编辑 -  6/1/04 by  zeusares]
附件名称/大小 下载次数 最后更新
2004-06-01_NetWall_Lite.rar (439KB)  97
cmymfc
驱动牛犊
驱动牛犊
  • 注册日期2003-11-30
  • 最后登录2012-06-20
  • 粉丝0
  • 关注0
  • 积分62分
  • 威望8点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-01 17:27
这个在firewall例子中写的已经很清楚了, 在check_packet函数中
判断数据包是不是你要拦截的, 如果是return 1, 如果让其通过return 0;
用deviceiocontrol函数将过滤规则传给驱动, 从而。。。。
spike
驱动牛犊
驱动牛犊
  • 注册日期2004-01-25
  • 最后登录2004-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-01 19:36
收集这么多源代码不看有什么用?
不是不能过滤,而是这个FileWall程序是个半成品,剩下的东西需要你自己添加。
他发这个例子是为了让你明白驱动与应用界面是如何通信的。
给刚开始学NDIS的一点建议http://www.driverdevelop.com/forum/viewthread.php?tid=67763
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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:
spike
驱动牛犊
驱动牛犊
  • 注册日期2004-01-25
  • 最后登录2004-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-06-02 11:59
LornWolf最早写的FireWall例子,并在这里贴出来。(那个帖子已经不好找了,你可以看我签名的帖子给的代表,那是最早的东西。)
你的那个例子是别人修改过的,你看看是不是没有把规则定义好。readme是不是没好好看啊。

其实驱动没什么的,如果不涉及跟上面的通信你就当C程序看好了。
那个netwall的防火墙应该是借鉴费尔的

[编辑 -  6/2/04 by  spike]
给刚开始学NDIS的一点建议http://www.driverdevelop.com/forum/viewthread.php?tid=67763
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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的规则就不过滤的意思


zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-06-02 20:17
netwall是耐威作的的商业防火墙,是基于NDIS中间层驱动的防火墙
spike
驱动牛犊
驱动牛犊
  • 注册日期2004-01-25
  • 最后登录2004-08-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-06-03 11:07
关键是我不设置规则,他也过滤。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的规则就不过滤的意思


 


这两句是通过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语言,很好理解的。
给刚开始学NDIS的一点建议http://www.driverdevelop.com/forum/viewthread.php?tid=67763
endicking
驱动牛犊
驱动牛犊
  • 注册日期2004-05-14
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-06-05 12:13
支持楼主~~~~!!!
zeusares
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2004-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-06-05 21:18
哦,我的规则设置错了,所以乱过滤。但是我发现有的时候设置所有ICMP包拦截,但是PING自己还是能PING通,不知道为什么
yy1125322
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2004-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-06-26 10:11
在swich结构前加入 if(filter_policy.protocol == p_ip->proto),即搞定之。
游客

返回顶部