【问题标题】:Fetching the MAC address of my router (not my network card MAC) using C#使用 C# 获取我的路由器的 MAC 地址(不是我的网卡 MAC)
【发布时间】:2013-04-29 09:37:55
【问题描述】:

我需要获取路由器的 MAC 地址,以便在我的程序中像标识符一样使用它。

我的 PC 使用以太网电缆连接到路由器

有没有办法获取 MAC,如果有,有没有办法使用 C# 更改或克隆它?

我需要获取路由器MAC地址而不是我的网卡MAC地址...

我看到了这样的种子Get BSSID (MAC address) of wireless access point from C# ...如果可以获取无线设备的MAC地址,是否可以获取连接的以太网设备的MAC地址?

【问题讨论】:

  • @MariusBancila 我需要获取路由器Mac地址而不是获取我的网卡Mac地址
  • @BrianO''Byrne 抱歉,如果我知道我的路由器 IP 地址并且我只需要获取路由器 MAC 地址,我不知道它现在太复杂了,我该怎么做请提供示例
  • 是的,这很复杂。从命令行运行arp -a 并查看它为您提供的输出。这将包括路由器的 MAC 地址。现在从您的 C# 代码中执行相同的操作。启动一个 shell,运行 arp,然后解析结果。或者,使用链接答案中定义的 Windows API。这是我能给你的最大帮助。
  • 投票重新开放:问题不是重复的。

标签: c# router


【解决方案1】:

您可以寻求这个答案:Get the Default Gateway

public static IPAddress GetDefaultGateway()
{
    var card = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault();
    if(card == null) return null;
    var address = card.GetIPProperties().GatewayAddresses.FirstOrDefault();
    return address.Address;
}

编辑(这是你寻找的):

var macAddr =
(
    from nic in NetworkInterface.GetAllNetworkInterfaces()
    where nic.OperationalStatus == OperationalStatus.Up
    select nic.GetPhysicalAddress().ToString()
).FirstOrDefault();

【讨论】:

  • 我需要获取路由器Mac地址才能获取我的网卡Mac地址
【解决方案2】:

通过更多研究,没有托管 API 可以让您执行此操作。您需要使用How do I access ARP-protocol information through .NET?http://www.pinvoke.net/default.aspx/iphlpapi.sendarp 中描述的Windows API 方法,或者您需要启动一个shell 来运行arp -a 并捕获结果。

【讨论】:

  • 有趣的是“arp -a”给了我一个不同的MAC地址,写在我的路由器背面的MAC地址......前6个数字相同,但其余的不同……正常吗?
  • 也许吧。这取决于你的路由器。我会说打印在上面的 MAC 地址很可能是 WAN 接口的地址,而您的计算机将连接到 LAN 接口之一。显然,每个接口都有不同的 MAC 地址。 MAC 地址的结构是前三个字节分配给制造商,其余字节由制造商分配。由于路由器上的每个接口都具有相同的制造商,因此 MAC 地址具有相同的前三个字节是正常的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多