C# 使用SharpPcap和packet.Net发送我自己的ARP数据包

C# 使用SharpPcap和packet.Net发送我自己的ARP数据包,c#,sharppcap,packet.net,C#,Sharppcap,Packet.net,到目前为止,我试图发送一个ARP数据包,但没有成功。我使用SharpPcap使用packet.Net创建了一个ARP数据包。问题是,即使我使用设备发送数据包。SendPacket它实际上没有被发送,我也不知道为什么 这是我的代码: ARPPacket arpPacket = new ARPPacket(ARPOperation.Request, PhysicalAddress.Parse("000000000000"), targetIpAddress, device.Interface.Mac

到目前为止,我试图发送一个ARP数据包,但没有成功。我使用SharpPcap使用packet.Net创建了一个ARP数据包。问题是,即使我使用
设备发送数据包。SendPacket
它实际上没有被发送,我也不知道为什么

这是我的代码:

ARPPacket arpPacket = new ARPPacket(ARPOperation.Request, PhysicalAddress.Parse("000000000000"), targetIpAddress, device.Interface.MacAddress, myIpAddress);
EthernetPacket ethPacket = new EthernetPacket(device.Interface.MacAddress, PhysicalAddress.Parse("FFFFFFFFFFFF"), EthernetPacketType.Arp);
ethPacket.PayloadPacket = arpPacket;
device.Open();
device.SendPacket(ethPacket);
device.Close();
顺便说一句,我发送自己的ARP数据包,而不仅仅是使用SharpPcap ARP类,这一点很重要。

看看没有涉及ethernetpacket

ARPPacket arpPacket = new ARPPacket(ARPOperation.Request, PhysicalAddress.Parse("000000000000"), targetIpAddress, device.Interface.MacAddress, myIpAddress);
arpPacket.ARPTargetProtoAddress = destIP;
arpPacket.DestinationHwAddress = PhysicalAddress.Parse("FF-FF-FF-FF-FF-FF");
device.Open();
device.SendPacket(arpPacket);
device.Close();

尝试此功能,从:

您是否在发送计算机上使用Wireshark查看正在发送的数据包?你试过使用Pcap.Net吗(如果没有,为什么你要用Pcap.Net来标记这个问题)?是的,我使用了Wireshark和“arp”过滤,但没有找到我的数据包。Pcap.Net标记是错误的(意味着它是一个Packet.Net标记,现在更改了),如果我找不到解决方案,我将使用Pcap.Net,但我更喜欢Packet.Net和SharpPcap。告诉我“'PacketDotNet.ARPPacket'不包含'ARPTargetProtoAddress'的定义”,与'destinationhaddress'相同。可能是因为您链接中的代码来自SharpPcap版本2.1.2,而我使用的是最新版本4.1.0.WOW!我几乎放弃了使用SharpPcap,但这确实有效!虽然我不知道为什么这段代码有效,而我的代码无效,但我将对此进行研究。无论如何,非常感谢!
public static void ARP(IPAddress ipAddress , LivePcapDevice device)
{
if (ipAddress == null )
throw new Exception("ARP IP address Cannot be null");
var ethernetPacket = new PacketDotNet.EthernetPacket(device.Addresses[1].Addr.hardwareAddress, PhysicalAddress.Parse("FF-FF-FF-FF-FF-FF"), PacketDotNet.EthernetPacketType.Arp);

var arpPacket = new PacketDotNet.ARPPacket(PacketDotNet.ARPOperation.Request, PhysicalAddress.Parse("00-00-00-00-00-00"), ipAddress , device.Addresses[1].Addr.hardwareAddress, device.Addresses[0].Addr.ipAddress );
ethernetPacket.PayloadPacket = arpPacket;

device.SendPacket(ethernetPacket);
}