我正在使用Pcap.Net
获取Pcap
文件并通过我的计算机Network Adapter
传输所有数据包。
所以为了做到这一点,我使用代码示例Sending packets using Send Buffer:
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
提供两种方式:
发送缓冲区。
使用SendPacket()
发送每个数据包。
现在完成发送我的2个文件后(就像我的例子中一样)我想使用Dispose()
来释放资源。
使用第一个选项时,一切正常,此完成处理我的2 Pcap
个文件。
在第一个文件完成后使用第二个选项SendPacket()
(当前在我的代码示例中这是注释)时,我的应用程序正在关闭而未到达第二个文件。
我也会在Console Application
和WPF
中尝试,在两种情况下都会得到相同的结果。
使用UI
(WPF)我的应用程序GUI
只是关闭而没有任何错误。
任何可能导致此问题的建议?
答案 0 :(得分:0)
当您使用using
关键字时,这意味着您在范围的末尾隐式调用Dispose()
。
如果您也明确地致电Dispose()
,则表示您在同一个实例上拨打Dispose()
两次,这可能会导致您的计划崩溃。