尝试更改数据包ip并将其发送出去

本文关键字:数据包 ip | 更新日期: 2023-09-27 18:29:28

这是我在这里的第一个问题,所以请温柔!

最近,我试图构建一个可以获取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

也许有人能帮我明白怎么了?

尝试更改数据包ip并将其发送出去

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);

我做了什么

  • 提取ip有效载荷,因为ethernetfload包含您已经提取的ip层
  • 只添加一次iplayer