(转)Libcap库学习::(三)抓包流程

理解了Libpcap的工作原理,下面将介绍如何利用Libpcap库进行数据包的捕获。其具体的编程流程如下:


(1)网络设备查找

网络设备查找的目的就是发现可用的网卡,它的实现函数是pcap_lookupdev(),如果当前有多个网卡,它会返回一个网络设备名指针列表。

(2)打开网络设备

利用第一步的返回值,用户可以决定Libpcap实用哪个网卡,当然打开这个网络设备的函数是pcap_open_live(),它返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的任何操作都要基于这个描述字。

(3)获取网络参数

利用pcap_lookupnet()函数,可以获得指定网络设备的IP地址和子网掩码,当然这个步骤并不是必须,但是为了显示的完整性,有时候还是需要标记这些参数。

(4)编译过滤策略

Libpcap的一个功能就是提供数据包过滤,即只采集符合规则的数据包,此项功能由函数pcap_compile()来实现,这个函数的作用即使将用户指定的过滤策略编译到过滤程序中。

(5)设置过滤器

这是上步骤的继续,pcap_setfilter()函数用于设置上一步骤配置好的过滤器,当然要注明一点,步骤4和步骤5也不是必须的,如果不采用过滤,意味着程序会抓到所有的网络数据包。

(6)利用回调函数捕获数据包

Libpcap提供的是一种回调的机制来获取数据包,可以采用pcap_loop()和pcap_dispatch()函数来抓取数据包,当然,也可以调用pcap_next和pcap_next_ex()函数来完成同样的工作。

若数据包捕获到之后,应用程序就可以采用相应的方式进行数据包解析,分析其中感兴趣的信息,当然分析工作往往是整个程序的关键。

(7)关闭网络设备

当应用程序工作完毕时,可以调用pcap_close()函数关闭网络设备,释放资源。

猜你喜欢

转载自blog.csdn.net/dieju8330/article/details/84112916