我试图让我的 Android 设备认为我是路由器,在 C# 中使用一个简单的 ARP 请求(使用 C# 将 arp 从我的笔记本电脑发送到我的 android 设备)。我想如果我使用 SendArp 方法(来自 Iphlpapi.dll),它会起作用:
SendArp(ConvertIPToInt32(IPAddress.Parse("myAndroidIP")),
ConvertIPToInt32(IPAddress.Parse("192.168.1.1")), macAddr, ref macAddrLen)
但我无法发送请求。*但是,如果我写 '0' 而不是ConvertIPToInt32(IPAddress.Parse("192.168.1.1"))
:
SendArp(ConvertIPToInt32(IPAddress.Parse("myAndroidIP")), 0,
macAddr, ref macAddrLen)
它将起作用:
因此,如果源 ip 为“0”,它正在工作,但如果源是路由器 IP 地址,则它不是。
我正在使用这个 pinvoke 方法来发送 ARP:
[System.Runtime.InteropServices.DllImport("Iphlpapi.dll", EntryPoint = "SendARP")]
internal extern static Int32 SendArp(Int32 destIpAddress, Int32 srcIpAddress,
byte[] macAddress, ref Int32 macAddressLength);
这种将字符串 IP 转换为 Int32 的方法:
private static Int32 ConvertIPToInt32(IPAddress pIPAddr)
{
byte[] lByteAddress = pIPAddr.GetAddressBytes();
return BitConverter.ToInt32(lByteAddress, 0);
}
谢谢你。