0

我正在设置一个程序以将 UDP 数据包从一台服务器发送到不同网络上的另一台服务器。我在设置 EthernetLayer 时遇到问题,我已设法将源 MacAddress 设置为我自己的使用:

    public static string GetMacAddress()
    {
        string macAddresses = string.Empty;

        foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (nic.OperationalStatus == OperationalStatus.Up)
            {
                //macAddresses += nic.GetPhysicalAddress();
                macAddresses = string.Join(":", (from z in nic.GetPhysicalAddress().GetAddressBytes() select z.ToString("X2")).ToArray());
                break;
            }
        }

        return macAddresses;
    }

这似乎工作正常,但是我将什么设置为目标 MacAddress?无论我将它设置为什么,它似乎只是通过我的本地网络将数据包广播到所有机器。这是我从 pcapdotnet 示例中遵循的以下代码。

        new EthernetLayer
        {
            Source = new MacAddress(Mac),
            Destination = new MacAddress("02:02:02:02:02:02"),
            EtherType = EthernetType.None,
        };

这正确设置了我的源 MacAddress 但目标显然不正确,pcapdotnets 文档上的示例如下所示:

        new EthernetLayer
            {
                Source = new MacAddress("01:01:01:01:01:01"),
                Destination = new MacAddress("02:02:02:02:02:02"),
                EtherType = EthernetType.None, // Will be filled automatically.
            };

有没有办法获取目标 IP 的 MacAddress?

4

1 回答 1

0

正如评论中提到的,您可以使用 ARP 协议自动获取 IP 地址的 MAC 地址。要使用它,首先阅读 ARP 并熟悉它,然后查看Pcap.Net中的ArpLayerand 。ArpDatagram

如果您想跳过该步骤,您可以检查您的路由器 MAC 地址是什么,然后将其硬编码,因为除非您使用不同的路由器,否则它不会改变。

于 2016-02-05T11:03:11.440 回答