到合适的网络接口设备。
网络接口在Linux网络体系中是一个很重要的概念它是对具体网络硬件设备的一个抽象在它的下面是具体的网卡驱动程序而其上则是网络协议层。
Linux中最常见的接口设备名eth0和lo。
Lo 称为回路设备是一种逻辑意义上的设备其主要目的是为了调试网络程序之间的通讯功能。
eth0对应了实际的物理网卡在真实网络环境下数据包的发送和接收都要通过 eht0。
如果计算机有多个网卡则还可以有更多的网络接口如eth1eth2 等等。
调用命令ifconfig可以列出当前所有活跃的接口及相关信息注意对eth0的描述中既有物理网卡的MAC地址也有网络协议的IP地址。
查看文件/proc/net/dev也可获得接口信息。
Libpcap中检查网络设备中主要使用到的函数关系如下图 libpcap调用pcap_lookupdev函数获得可用网络接口的设备名。
首先利用函数 getifaddrs 获得所有网络接口的地址以及对应的网络掩码、广播地址、目标地址等相关信息再利用 add_addr_to_iflist、add_or_find_if、get_instance 把网络接口的信息增加到结构链表 pcap_if 中最后从链表中提取第一个接口作为捕获设备。
其中 get_instanced的功能是从设备名开始找第一个是数字的字符做为接口的实例号。
网络接口的设备号越小则排在链表的越前面因此通常函数最后返回的设备名为 eth0。
虽然 libpcap 可以工作在回路接口上但显然 libpcap 开发者认为捕获本机进程之间的数据包没有多大意义。
在检查网络设备操作中主要用到的数据结构和代码如下 / libpcap 自定义的接口信息链表 pcap.h / struct pcap_if struct pcap_if next char name / 接口设备名 / char description / 接口描述 / /接口的 IP 地址 地址掩码 广播地址目的地址 / struct pcap_addr addresses bpf_u_int32 flags / 接口的参数 / char pcap_lookupdevregister char errbuf pcap_if_t alldevs …… pcap_findalldevsalldevs errbuf …… strlcpydevice alldevs-name sizeofdevice
上一篇:
基于Asp. net 和JQquery 的课件下载系统
下一篇:
基础体育课教改初探