首先,我将 Visual Studio 2012 与 C# 和 Pcap.Net 库一起使用。我尝试转发之前捕获的数据包。
我尝试做的事情:
- 欺骗我手机的 ARP 表。
- 将通常进入网关的流量重定向到我的计算机。
- 记录数据包。
- 将它们转发到网关。
我做了什么:
- 欺骗 ARP 表 -> 工作正常。
- 将流量重定向到我的 PC -> 工作正常(逻辑上)。
- 将数据包记录到转储文件 (.pcap) 中,如本网站教程中所示 -> 工作正常(我可以打开它并使用 wireshark 读取它,它看起来不错)。
- 将数据包转发到网关。->不起作用。
我想流利地转发它们。所以我所做的是使用教程中所示的“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);
}
}
}
非常感谢您的帮助!