日期:2014-05-16  浏览次数:20697 次

关于上层应用程序调用协议栈进行报文分析
    最近在用libpcap进行抓报文进行分析,目前分析的报文类型是很简单的二层报文,比如取以太网地址,以太网类型或者TCP数据内容等等,都是自己的算法,因为,libpcap是抓的是网卡的包,没有进过协议栈处理。
    接下来的工作是要能分析更多类型的报文,更高层的报文。如果说还是自己分析的话,工作量是没法估算的,太大了。所以说,我能否调用协议栈,或者有其他的方法,能减少工作量。因为我对协议栈只是大致了解,没有深入研究过,所以我想问一下:我要调用协议栈的话,需要做哪些工作,怎样调用,是否跟调用库一样有专门的接口函数?

------解决方案--------------------
libpcap可以抓上来的是原始数据包,你看你要应用什么协议,找到协议的数据格式,对号入座就行了,协议栈也可以,你可以下一个独立的协议栈,打个比方,好比是lwip,自己配置好协议栈的相关文件,其实就是接口移植文件,然后参照源码直接调用函数就行,我觉着linux下的协议栈应该有相应的api提供给你吧,这个木有研究过
------解决方案--------------------
pcap文件得自己解包,,格式:搜索 pcap文件格式
用C语言自己解也简单,只是麻烦。
当然如何有已经封装好的库就更好了,C语言版的库你自己找找看吧。

我前段时间也做了这个的,,不过用的是python和dpkt库。dpkt库包含了pcap和各种协议的解析。
------解决方案--------------------
wireshark(使用的libpcap)抓包后直接写入pcap文件,,你说的可能是自己写的抓包程序吧。都写入pcap文件。然后就是对文件的静态分析了。

------解决方案--------------------
上面说的不是实时分析,
其实实时分析最好的就是直接用wireshark。 这个还是得结合你的需求来做!
1.如果你的目的是为了分析某个程序,那就用wireshark抓包直接分析就行了啊。这样也是实时的。最后存成pcap文件,事后写程序分析pcap文件,或者用wireshark打开慢慢分析是否正确。
2.如果你的目的是写一个实时分析抓包的程序,那你抓到包还是只能自己解析!没API调用,因为你抓到的包就是一堆字节而已。你得根据链路类型,分析出其携带的是什么数据,IP? 然后如果是IP包,再分析此IP包内部是不是TCP/UDP,然后依次。  (分析解析过程见RFC规定的协议格式标准。)
所谓协议栈,我用自己的通俗的话来说,那本来就是存在于内核中的,走了那个流程就得经网络发送出去或者接收进来的一段程序而已。。  我知道你是想借助这里面的解析过程,,但你得深入内核协议栈自己提取解析协议过程的代码,这恐怕更花费时间了吧。   
或者你可以搜索下C/C++版的协议封装/解析库直接使用。
前面说了,python的dpkt库就是这个作用。C语言版的我前段时间找了下,没找到。再或者你提取下wireshark的解析协议的代码也行。不过难度多少未知。。
------解决方案--------------------
引用:
我之前就是按照楼上说的按层解析的。libpcap抓到的就是整个的一帧报文。

然后还在疑惑什么呢?
------解决方案--------------------
引用:
已经做了几种协议的分析了,以后还要继续这样做么?
   首先我们要实现对报文的实时解析,不能够对存下来的pcap文件里面的报文解析。wireshark它是运用的协议树,把协议分析插件放到相对应的节点上,按说也没有调用内核协议栈解析过程。那么这样的话,我的解析过程跟wireshark本质上都是自己添加解析器喽?只不过我的属于内嵌的。

应该是这样了,,你尝试提取wireshark中的协议解析代码可能会更好些.