C#& Pcap.Net - 转发收到的数据包

时间:2014-04-29 14:54:00

标签: c# visual-studio-2012 networking arp pcap.net

首先,我使用带有C#的Visual Studio 2012和Pcap.Net库。 我尝试转发之前捕获的数据包。

我尝试做什么:

  1. 欺骗ARP-Table of my phone。
  2. 将通常进入网关的流量重定向到我的计算机。
  3. 记录数据包。
  4. 将它们转发到网关。
  5. 我做了什么:

    1. 欺骗ARP表 - >工作正常。
    2. 将流量重定向到我的电脑 - >工作正常(逻辑上)。
    3. 将数据包记录到dumpfile(.pcap),如本网站教程所示 - >工作得很好(我可以打开它并用wireshark阅读它看起来不错)。
    4. 将数据包转发到网关。 - > 不起作用。
    5. 我想流利地转发它们。所以我所做的是使用“sendBuffer()”函数,如教程中所示。所以我只读入.pcap文件,其中保存了所有数据包信息,并尝试使用此“sendBuffer()”函数重新发送它。当然我使用相同的适配器来做到这一点。 当我使用wireshark捕获流量时,我可以看到我的数据包甚至没有被发送。 (当我将数据捕获到文件时,我也不确定它是否同时工作。因为转发它们的代码需要从文件中读取数据包。是不是有另一种方式?< /强>) 我的代码转发来自.pcap文件的数据包(IDE不会给我任何错误): 这大约是我的代码,我没有它可用因为我不在家。但是应该是对的。

      IList<LivePacketDevice> devices = LivePacketDevice.AllLocalMachine;
      PacketDevice selectedOutputDevice = devices[0];
      long capLength = new FileInfo(@"E:\CSharp\Pcap\dumpFile.pcap").Length;
      bool isSync = true;
      OfflinePacketDevice selectedInputDevice = new OfflinePacketDevice(@"E:\CSharp\Pcap\dumpFile.pcap");
                  using (PacketCommunicator inputCommunicator = selectedInputDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
                  {
                      using (PacketCommunicator outputCommunicator = selectedOutputDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000))
                      {
                          if (inputCommunicator.DataLink != outputCommunicator.DataLink)
                          {
                             tB_Log.Text = tB_Log.Text + Environement.NewLine + "ERROR: Different Datalinks!";
                          }
                          using (PacketSendBuffer sendBuffer = new PacketSendBuffer((uint)capLength))
                          {
                              Packet packet;
                              while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok)
                              {
                                  sendBuffer.Enqueue(packet);
                              }
      outputCommunicator.Transmit(sendBuffer, isSync);
      }
      }
      }
      

      非常感谢您的帮助!

0 个答案:

没有答案