【问题标题】:try to change packet ip and send it away尝试更改数据包 ip 并将其发送出去
【发布时间】:2012-06-21 19:57:18
【问题描述】:

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

最近我尝试构建可以获取 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

也许有人可以帮助我了解问题所在?

【问题讨论】:

    标签: c#


    【解决方案1】:
    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 有效负载,因为 ethernetpayload 也包含您已经提取的 iplayer
    • 只添加一次iplayer

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2019-12-04
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 2021-08-17
      • 2017-11-01
      相关资源
      最近更新 更多