这是我的第一个问题,所以要温柔!
最近我尝试构建可以接受Wireshark文件并将所有数据包发送到网络的应用程序,经过几天的阅读我发现Pcap.Net项目并在构建我的应用程序(winform)之后我想添加高级选项比如改变IP地址,MAC地址等.Pcap.Net支持这一切。 在我的例子中,在分配缓冲区之后我尝试更改数据包ip,构建新数据包(使用新的ip)并使用我文件中的所有数据包填充缓冲区(发送前):
// Allocate a send buffer
using (PacketSendBuffer sendBuffer = new PacketSendBuffer((uint)capLength))
{
// Fill the buffer with the packets from the file
int numPackets = 0;
Packet packet;
while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok)
{
IpV4Layer ipLayer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();
ipLayer.Destination = new IpV4Address("11.12.13.14");
EthernetLayer ethernet = (EthernetLayer)packet.Ethernet.ExtractLayer();
PayloadLayer payload = (PayloadLayer)packet.Ethernet.Payload.ExtractLayer();
Packet newPacket = PacketBuilder.Build(DateTime.Now, ethernet, ipLayer, ipLayer, payload);
sendBuffer.Enqueue(newPacket);
++numPackets;
}
outputCommunicator.Transmit(sendBuffer, isSync); //Transmit the queue
}
我的问题是在行sendBuffer.Enqueue(newPacket)
之后。
我收到以下错误:Failed enqueueing to SendQueue
答案 0 :(得分:0)
PayloadLayer payload = (PayloadLayer)packet.Ethernet.Payload.ExtractLayer();
// and
Packet newPacket = PacketBuilder.Build(DateTime.Now, ethernet, ipLayer, ipLayer, payload);
应该是
PayloadLayer payload = (PayloadLayer)packet.Ethernet.IpV4.Payload.ExtractLayer();
// and
Packet newPacket = PacketBuilder.Build(DateTime.Now, ethernet, ipLayer, payload);
我做了什么