gpt4 book ai didi

c# - C#中的ARP请求

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:43 25 4
gpt4 key购买 nike

我试图让我的 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)

它会起作用:

enter image description here

因此,如果源 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);
}

谢谢。

最佳答案

我认为你误解了第二个参数的意思。

1) ARP 请求不是发送到特定 IP(例如 Android 设备),而是广播到网络中的所有计算机。

2) 查看SendARP function的描述,第二个参数是接口(interface)IP,不是目的IP。如果我没理解错的话,如果你的电脑里有多张网卡,你可以选择一张发送ARP请求

SrcIP [in] The source IPv4 address of the sender, in the form of an IPAddr structure. This parameter is optional and is used to select the interface to send the request on for the ARP entry. The caller may specify zero corresponding to the INADDR_ANY IPv4 address for this parameter.

关于c# - C#中的ARP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com