Apr -a 不会拉取所有 mac

Apr -a does not pull ALL macs

string macAddress = string.Empty;
            System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
            pProcess.StartInfo.FileName = "arp";
            pProcess.StartInfo.Arguments = "-a " + IP;
            pProcess.StartInfo.UseShellExecute = false;
            pProcess.StartInfo.RedirectStandardOutput = true;
            pProcess.StartInfo.CreateNoWindow = true;
            pProcess.Start();
            string strOutput = pProcess.StandardOutput.ReadToEnd();
            string[] substrings = strOutput.Split('-');
            if (substrings.Length >= 8)
            {
                macAddress = substrings[3].Substring(Math.Max(0, substrings[3].Length - 2))
                         + "-" + substrings[4] + "-" + substrings[5] + "-" + substrings[6]
                         + "-" + substrings[7] + "-"
                         + substrings[8].Substring(0, 2);
                return macAddress;
            }
            else
            {
                return "00:00:00:00:00:00";
            }

我有一些设备 mac 地址和 ips 没有被写入控制台。我可以 ping 并在 cmd 提示符下执行手动 arp -a 就好了,结果看起来与显示的完全一样。

这是我使用 arp 的方式的问题吗?

Arp -a

显示 arp table 中已经存在的条目。当您连接到您的专用网络中的 machine 时,将在 arp table 中输入一个条目。

因此,您只能确定 table 中的网关条目。要获取网络中所有 machines 的 mac 地址,您必须尝试手动连接到所有 machines。在您的程序中使用 arp 命令之前,您可以添加代码以 ping 到所有 mac 网络。