![](https://csdnimg.cn/release/download_crawler_static/86319212/bg5.jpg)
3.2 通过编程获取 IP 地址与 MAC 地址的对应关系 4 实验过程
3.2 通过编程获取 IP 地址与 MAC 地址的对应关系
3.2.1 获取本机网络接口的 MAC 地址和 IP 地址
调川 WinPcap 的 pcap_ndalldevs_ex() 函数后,参数 alldevs 指向的链表中包含了主
机中安装的网络接口设备列表。在 alldevs 链表每个元素保存的网络接口相关信息中,地址
信息保存了该网络接口卡上绑定的 IP 地址、网络掩码、广播地址和目的地址等。由于每个
网卡接口卡上都可以绑定多个 IP 地址因此每个网络接口卡拥有的地址信息也采用了链表结
构。然后即可通过此函数获取本机网卡除 MAC 地址外的大部分信息。
为了形成 ARP 请求数据包,不但需要知道本机网络接口上绑定的 IP 地址,而且必须
知道这块网卡的 MAC 地址。获取本机网络接口的 MAC 地址和 IP 地址可以使用不同的方
法,常用的方法包括利用 NetBIOS 编程接口及 winsock 提供的 gethostbyname() 函数等。
但是,如果希望这样获取的 MAC 地址和 IP 地址与 WinPcap 获取的设备接口名字联系起
来,那么,编程过程中需要做进一步的处理。实际上,在理解 ARP 的基本思想后,可以直
接通过 WinPcap 获取本机网络接口的 MAC 地址。
按照 ARP,以太网中的主机如果发现一个 ARP 请求的 IP 地址为自己拥有的 IP 地址,
那么,它将形成 ARP 响应,并将该 IP 地址与 MAC 地址的对应关系返回给请求主机如果
应用程序能够捕获到本机发出的 ARP 响应,那么就能够知道本机网络接口的 MAC 地址。
3.2.2 向网络发送数据包
为了获取以太网中其他主机的 IP 地址与 MAC 地址的对应关系,应用程序需要向以太
网广播 ARP 请求。向以太网发送数据包可以使用 winPcap 提供的 pcap_sendpacket() 函
数。发送成功时,
pcap_sendpacket()
函数返回
0
,否则返回
-1
。
4 实验过程
先理解实验中涉及到的原理(ARP 协议),然后根据正确配置环境,在上一次实验 [2]
的基础之上继续写入源代码。
ARP 的相关知识点在附录 A 中解释。
4.1 开发及测试环境
目前仅能保证程序在开发及测试环境中正常工作,其他情况均不能保证程序能够稳定
运行。
测试环境如下:
• 操作系统:Microsoft Windows 10 专业版 (x64) (version: 18362)
5