gpt4 book ai didi

c - 如何获取用于发送 ARP 回复的 MAC 地址?

转载 作者:行者123 更新时间:2023-11-30 19:37:23 25 4
gpt4 key购买 nike

我正在使用 sockaddr_ll 用 C 语言进行一些原始套接字编程。我的程序需要接受 ARP 请求,然后通过编辑 header 字段发送回复。我遇到的唯一问题是我需要将发件人 Mac 地址(我的 ARP 处理系统的 mac 地址)放入回复中(使用 if_arp.h 中的 arphdr 的 ar_sha 字段),并且我不知道如何从内部检索它该程序。 ARP 请求的 ar_tha 字段用零填充。

最佳答案

查找计算机连接的网络接口(interface)的 MAC 地址的方法将根据您运行的操作系统而有所不同。

在Windows下,您可以调用GetAdaptersAddresses()然后迭代结果,在此类结构的结果列表中查找每个 IP_ADAPTER_UNICAST_ADDRESS 结构的 PhysicalAddress 字段中的值,直到找到与您关注的特定网络接口(interface)关联的地址。

在 POSIX-y 操作系统(例如 Linux 和 Mac/BSD)下,您可以调用 getifaddrs()查找 ifa_addr->sa_family 等于 AF_PACKET(对于 Linux)或 AF_LINK(对于 Mac/BSD)的 ifaddr 结构。这些类型的 ifaddr 结构包含您想知道的 MAC 地址信息,可以通过 Linux 下的 sockaddr_ll 结构或 Mac/BSD 下的 LLADDR() 宏访问。

如果您不介意深入研究一些代码,您可以在我自己的 networking library 中的 GetNetworkInterfaceInfos() 函数中查看如何执行此操作的示例。的NetworkUtilityFunctions.cpp file (Windows 为第 1322 行,Mac/BSD 为第 1209 行,Linux 为第 1216 行)。

关于c - 如何获取用于发送 ARP 回复的 MAC 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39934858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com