首先,我使用带有C#的Visual Studio 2012和Pcap.Net库。 我尝试转发之前捕获的数据包。
我尝试做什么:
我做了什么:
我想流利地转发它们。所以我所做的是使用“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);
}
}
}
非常感谢您的帮助!