2012-03-30 63 views
0

这是我的第一个问题,所以要温柔!尝试更改数据包IP并发送它

最近我试图建立应用程序谁可以采取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
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上
相关问题