我正在使用Pcap.Net
take Pcap
File 并通过我的机器传输它的所有数据包Network Adapter
。因此,为了做到这一点,我使用了使用发送缓冲区发送数据包的代码示例:
class Program
{
static void Main(string[] args)
{
string file = @"C:\file_1.pcap";
string file2 = @"C:\file_2.pcap";
// Retrieve the device list from the local machine
IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;
// Take the selected adapter
PacketDevice selectedOutputDevice = allDevices[1];
SendPackets(selectedOutputDevice, file);
SendPackets(selectedOutputDevice, file2);
}
static void SendPackets(PacketDevice selectedOutputDevice, string file)
{
// Retrieve the length of the capture file
long capLength = new FileInfo(file).Length;
// Chek if the timestamps must be respected
bool isSync = false;
// Open the capture file
OfflinePacketDevice selectedInputDevice = new OfflinePacketDevice(file);
using (PacketCommunicator inputCommunicator = selectedInputDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
using (PacketCommunicator outputCommunicator = selectedOutputDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
// Allocate a send buffer
using (PacketSendBuffer sendBuffer = new PacketSendBuffer((uint)capLength))
{
// Fill the buffer with the packets from the file
Packet packet;
while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok)
{
//outputCommunicator.SendPacket(packet);
sendBuffer.Enqueue(packet);
}
// Transmit the queue
outputCommunicator.Transmit(sendBuffer, isSync);
inputCommunicator.Dispose();
}
outputCommunicator.Dispose();
}
//inputCommunicator.Dispose();
}
}
}
为了发送数据包Pcap.Net
提供了 2 种方式:
发送缓冲区。
使用 发送每个数据包
SendPacket()
。
现在完成发送我的 2 个文件(如在我的示例中)后,我想使用Dispose()
释放资源。
当使用第一个选项时一切正常,这完成了处理我的 2 个Pcap
文件。
在第一个文件完成后使用第二个选项SendPacket()
(当前在我的代码示例中这是作为注释)时,我的应用程序正在关闭并且无法访问第二个文件。我也尝试过Console Application
,WPF
并且在两种情况下都得到相同的结果。使用UI
(WPF)我的应用程序GUI
只是关闭而没有任何错误。
有什么建议可能导致这种情况吗?