当前位置: 技术问答>linux和unix
请教:Linux下抓包功能的编程实现
来源: 互联网 发布时间:2015-10-14
本文导语: 本人现在需要做Linux下的入侵检测系统,基础部分就是网络数据包的提取。前一段时间在网上下载了libpcap库,看了源代码,好多--没办法全部理解。现在的设想是借鉴libpcap库,自己做一个跟libpcap差不多的,功能不...
本人现在需要做Linux下的入侵检测系统,基础部分就是网络数据包的提取。前一段时间在网上下载了libpcap库,看了源代码,好多--没办法全部理解。现在的设想是借鉴libpcap库,自己做一个跟libpcap差不多的,功能不需要那么全,只要能提取出数据包来就行,哪位高手指点指点。
--或者给一下Linux下抓包功能的最基本实现(不要基于libpcap库的,只用Linux自带的库函数)
--推荐几本书或网上的资料也可以。
---先谢过各位了!
--或者给一下Linux下抓包功能的最基本实现(不要基于libpcap库的,只用Linux自带的库函数)
--推荐几本书或网上的资料也可以。
---先谢过各位了!
|
其实也没那么复杂啦,关键是你要用tcpdump之类的程序跑起来,然后动态的跟踪一下,看看一个数据包都经过些什么处理过程。一个开源代码应当经过静态分析和动态分析两个过程,相互结合才能确知其工作过程,光看源代码是不行的,你会对很多非主流代码过于关注,失去你的注意焦点。从代码看一个大概结构,然后用KDBG动态跟踪,你就能找到程序的主流程在哪里,以此为依据,一步步化繁为简,也没什么难了。
|
应用程序通过PF_PACKET协议簇直接利用网络驱动程序发送和接收报文。
recvfrom将数据拷贝到用户空间。
发生漏包现象首先要看看是不是自己的代码有问题。
收包与处理可以分开做,有足够多的方法保证正确性。
再有的话就用module吧,避免多次在内核空间与用户空间切换。
recvfrom将数据拷贝到用户空间。
发生漏包现象首先要看看是不是自己的代码有问题。
收包与处理可以分开做,有足够多的方法保证正确性。
再有的话就用module吧,避免多次在内核空间与用户空间切换。
|
用socket(PF_PACKET, SOCK_RAW, int protocol)抓包
|
或者写个module,用netfilter抓。。。
|
buf中就是读到的数据包,层层判断协议头就可以了。