我正在使用sockaddr_ll在C中进行一些原始套接字编程。我的程序需要接受ARP请求,然后通过编辑标题的字段发送回复。我遇到的唯一问题是我需要将发件人的Mac地址(我的ARP处理系统的mac地址)放入回复中(使用来自if_arp.h的arphdr' s ar_sha字段),我不知道如何从程序中检索它。 ARP请求的ar_tha字段用零填充。
答案 0 :(得分:0)
查找计算机连接的网络接口的MAC地址的方式将根据您运行的操作系统而有所不同。
在Windows下,您可以调用GetAdaptersAddresses(),然后迭代结果,查找结果列表中每个IP_ADAPTER_UNICAST_ADDRESS结构的PhysicalAddress字段中的值,直到找到与特定网络关联的地址为止您关注的界面。
在POSIX-y操作系统(例如Linux和Mac / BSD)下,您可以调用getifaddrs()来查找ifad_r结构,其ifa_addr-> sa_family等于AF_PACKET(适用于Linux)或AF_LINK(适用于Mac / BSD)。这些类型的ifaddr结构包含您想知道的MAC地址信息,可通过Linux下的sockaddr_ll结构或Mac / BSD下的LLADDR()宏访问。
如果您不介意深入研究某些代码,可以在我自己的networking library NetworkUtilityFunctions.cpp file中的GetNetworkInterfaceInfos()函数中查看如何执行此操作的示例(在Windows 1322行,Mac / BSD行1209,Linux行1212行。