1

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

我尝试做的事情:

  1. 欺骗我手机的 ARP 表。
  2. 将通常进入网关的流量重定向到我的计算机。
  3. 记录数据包。
  4. 将它们转发到网关。

我做了什么:

  1. 欺骗 ARP 表 -> 工作正常。
  2. 将流量重定向到我的 PC -> 工作正常(逻辑上)。
  3. 将数据包记录到转储文件 (.pcap) 中,如本网站教程中所示 -> 工作正常(我可以打开它并使用 wireshark 读取它,它看起来不错)。
  4. 将数据包转发到网关。->不起作用。

我想流利地转发它们。所以我所做的是使用教程中所示的“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);
}
}
}

非常感谢您的帮助!

4

0 回答 0