ARP ping到Device类

时间:2014-04-03 12:46:31

标签: c# networking arp

我的ARP ping有问题。

首先我ping扫描以找到网络上的IP。然后我进行ARP查找以查找MAC(并使用数据库查找供应商)和主机名(如果设备有任何)。然后我将它全部添加到foreach循环中的Device类,并将其显示在我的GUI中。

这是我的foreach循环的一部分

if (SendARP(intAddress, 0, macAddr, ref macAddrLen) == 0) // ARP Success!
{
DoAlotOfStuff(IP,macAddr); // Adds Info to Device class
}

上述代码不起作用。如果我添加一个Threaded睡眠它也不起作用,但如果我添加一个

System.Windows.Forms.MessageBox.Show("");
在DoAlotOfStuff()之前,我必须按下消息框上的“确定”按钮,但循环工作,设备成功添加并在GUI中显示。

现在该怎么办?我认为Timers可能是一个选择,但我不确定如何使用它们。由于暂停GUI,因此螺纹睡眠不起作用。

SendARP是Pinvoke

[DllImport("iphlpapi.dll", ExactSpelling=true)]
public static extern int SendARP( 
int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);

DoAlotOfStuff函数只使用Device类Setters来设置IP,MAC,VENDOR和Hostname等选项

Dns.GetHostEntry(IP).HostName;

编辑:我的整个循环:

        foreach (Device d in Devices)
        {
            IPAddress Destination = IPAddress.Parse(d.GetIP());

            byte[] macAddr = new byte[6];
            uint macAddrLen = (uint)macAddr.Length;

            int intAddress = BitConverter.ToInt32(Destination.GetAddressBytes(), 0);

            if (SendARP(intAddress, 0, macAddr, ref macAddrLen) == 0)
            {
                d.SetMAC(MacFormat(ByteArrayToString(macAddr)));

                d.SetVendor(CheckVendorList(d.GetIP(), ByteArrayToString(macAddr)));

                d.SetName(FindName(d.GetIP()));

                ADD_TO_LISTVIEW(d.GetAll());
            }
        }

0 个答案:

没有答案