免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ljcai123
打印 上一主题 下一主题

工作中的问题,IPTABLE旁路监听数据包 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2005-12-30 09:40 |只看该作者
原帖由 daemeon 于 2005-12-29 22:13 发表
You can't do that on netfilter hook of IP stack, because packets for other host are droped immediately when they reach IP Layer.


不太同意吧,你把开了包转发功能,怎么会丢弃呢?我认为网络接收中两个丢包的地方(还没做实验,纯理论讨论):
1、网卡处;
-----网卡发现若非是发给自己地址的包(如MAC=自己,广播包等),就将其丢弃,把网卡设为所谓混杂模式,则可过这一关;

2、IP层
----IP层发现目的地址不是自己的,可能会丢弃,如果没有把开ip_forward的话,如果打开了,就是一个查路由表,然后再不到路由,再丢弃的过程,所以要挂钩,如果没有网关,要在查路由表之前,即ip_rcv处。
ps:上面是一种思路,内核中代码的实现是先查路由表,再来区分,也就是发往本机的路由做为路由表的一部份。

但是二层的代码我没有看,我担心的是如果没有在网桥下边工作的话,因为dst mac不是自己,从而导致包被丢弃,而不是楼上的说的“when they reach IP Layer. ”,待会看看这方面的代码,再来继续贴!

至于做协议分协器,我在Win 下边有两种办法, 一种是Hook NDIS,一种是用Winpcap,在Linux下边,直接就是libpcap了,用最简单的方法,达到我的目的,这是偶一向的懒人作风!

论坛徽章:
0
32 [报告]
发表于 2005-12-30 09:49 |只看该作者
我发现 libpcap 太消耗资源了
那天在网上看到一个 libpcap 的教程,于是粘了过去编译了一下,发现在包速率很高,已经占用了很多 CPU 的时候只要一执行那个程序,intel 网卡就一直频繁 DOWN/UP、DOWN/UP

论坛徽章:
0
33 [报告]
发表于 2005-12-30 09:50 |只看该作者
原帖由 独孤九贱 于 2005-12-30 09:40 发表
不太同意吧,你把开了包转发功能,怎么会丢弃呢?我认为网络接收中两个丢包的地方(还没做实验,纯理论讨论):


I did not express myself well. Here "packets for other host" is in layer-2's point of view.  
Please read codes of function ip_rcv(...) carefully.

[ 本帖最后由 daemeon 于 2005-12-30 10:17 编辑 ]

论坛徽章:
0
34 [报告]
发表于 2005-12-30 09:50 |只看该作者
1、HUB放在防火墙内吧?
2、防火墙不带日志监控分析功能?不会吧?
3、用iptables这方面还不如用snort,甚至在Win下边用Sniffer Pro

论坛徽章:
0
35 [报告]
发表于 2005-12-30 10:04 |只看该作者

回复 33楼 daemeon 的帖子

netfilter的确不会收到其他主机的数据报,就算是混杂模式也不成。俺试过。再说,代码里也是这么写的。呵呵。
但是不知道l7filter这个东西具体是做什么的?他能分析出应用协议的内容吗?例如:他能不能分析出url地址?
谢谢!

论坛徽章:
0
36 [报告]
发表于 2005-12-30 10:10 |只看该作者
原帖由 platinum 于 2005-12-30 09:49 发表
我发现 libpcap 太消耗资源了
那天在网上看到一个 libpcap 的教程,于是粘了过去编译了一下,发现在包速率很高,已经占用了很多 CPU 的时候只要一执行那个程序,intel 网卡就一直频繁 DOWN/UP、DOWN/UP


这个问题倒没有遇到,我用一台P3的机器,做局域网协议分析,平均流量在60-70M之间(100M内网),工作很正常……
按照其开发者公布的数据,libpcap能够以更高的速度从网卡高速读取数据包,大约在200M-300M之间,不过若是在如此高负载情况下运行,由于回调函数会完全占用CPU周期,导致系统超载,从而在解码时可能会有部份数据丢失。可以到网上找一个优化的libpcap驱动试试……

论坛徽章:
0
37 [报告]
发表于 2005-12-30 10:15 |只看该作者
原帖由 daemeon 于 2005-12-30 09:50 发表


I did not express myself well. Here "packets for other host" is in layer-2's point of view.  
please read codes of function ip_rcv(...) carefully.


谢谢,的确没有仔细看代码,向被我误导的同志道歉!

        /* When the interface is in promisc. mode, drop all the crap
         * that it receives, do not try to analyse it.
         */
        if (skb->pkt_type == PACKET_OTHERHOST)
                goto drop;

论坛徽章:
0
38 [报告]
发表于 2005-12-30 10:22 |只看该作者
原帖由 独孤九贱 于 2005-12-30 10:10 发表


这个问题倒没有遇到,我用一台P3的机器,做局域网协议分析,平均流量在60-70M之间(100M内网),工作很正常……
按照其开发者公布的数据,libpcap能够以更高的速度从网卡高速读取数据包,大约在200M-300M之间 ...


那200M以下是否能满足大多企业的需要呢?万一人家用的是Gbit的以太网,libpcap不就跟不上需要了么?

论坛徽章:
0
39 [报告]
发表于 2005-12-30 10:25 |只看该作者
原帖由 chunhui_true 于 2005-12-30 10:22 发表


那200M以下是否能满足大多企业的需要呢?万一人家用的是Gbit的以太网,libpcap不就跟不上需要了么?


我刚才说的都是在100M网络下边,至于更高的网络,我的个人测试条件十分有限,想当然地认为不能达到线速,但是性能也不会很差吧,在硬件支持足够的情况下……不过我看国内出了声称可以达到千兆线速的IDS……呵呵……

论坛徽章:
0
40 [报告]
发表于 2005-12-30 10:37 |只看该作者

我明白

1、楼主是想抓一些自己感兴趣的东西,利用iptables来做抓包的过滤器,因为iptables的这个L7filter插件可以识别应用层协议(不以L4端口号为依据),像各种p2p、不使用标准端口的服务都能认出来。
2、不把网卡置成混杂模式,非本机有关的包就算物理上可以被本机网卡收到,但协议栈是不处理的,直接就丢了,所以你侦听不到。如果把网卡置成混杂模式,不知道iptables还能用否,你可以想办法试试。如果不行,想要侦听,就只有让所有流量都通过侦听机器,比如把机器配置成网桥或路由……

[ 本帖最后由 急不通 于 2005-12-30 10:44 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP