如何通过win套接字或远程ip获取我的本地网络接口的MAC地址

问题描述 投票:0回答:1

有没有办法获取我的网络接口的MAC地址(物理地址),套接字连接通过该接口,具有win套接字和远程ip。 也就是说,我们有一个

SOCKET
,通过它连接到远程服务器,我们需要找出我的本地机器连接到哪个网络接口以及它有哪个MAC。不是远程 MAC。

在我们有 2 个或更多网络接口的情况下,我们无法可靠地了解连接是使用主适配器建立的。

Linux 上有 ifreq 和

<arpa/inet.h>
- 从 IP 地址查找 MAC 地址 但我在Windows下找不到类似的解决方案 我在哪里可以获得 arpa/inet.h?

我们有 https://learn.microsoft.com/ru-ru/windows/win32/api/winsock2/nf-winsock2-getsockopt

SOL_SOCKET
SO_PROTOCOL_INFO
。但事实并非如此。

我们有

IPX_ADDRESS
但我们使用 TCP/IP

我将感谢您的帮助,因为我已经 3 天没能弄清楚了

c++ windows sockets network-programming mac-address
1个回答
0
投票

如果您有连接(或绑定)的套接字,您可以调用 getsockname() 找出套接字的本地 IP 地址。

一旦获得了套接字的本地 IP 地址,您所需要做的就是找出与该 IP 地址关联的本地 NIC,然后找出与该本地 NIC 关联的 MAC 地址。

正如 Mestkon 在他的评论中提到的,您可以调用 GetAdaptersAddresses() 来获取有关本地网卡的信息,然后只需查看返回的结构体即可找到您感兴趣的具体值;例如对于 MAC 地址,您需要将

PhysicalAddress
PIP_ADAPTER_ADDRESSES
字段与您的 IP 地址关联。

如果您想查看一些执行此类操作的示例代码,请查看 此文件(我作为网络库的一部分编写的)的第 1993-2092 行;特别是查看第 2067 行本地变量

mac
的设置方式,以包含本地 NIC 的 MAC 地址。

© www.soinside.com 2019 - 2024. All rights reserved.