0

我需要让 Microsoft Loopback Adapter 使用 PcapDotNet 或其他任何东西接收(听到)一个数据包。我怎样才能做到这一点?

谢谢。

4

2 回答 2

3

您不能使用 PCAP 从 Windows 上的环回适配器捕获数据包。但是,您可以使用名为RawCAP的工具来执行此操作并输出一个 .pcap 文件(您可以在 WireShark 中打开该文件:http ://wiki.wireshark.org/CaptureSetup/Loopback )。

于 2013-03-14T22:32:08.130 回答
0

您的问题既不具体也不是很详细,因此您将得到广泛的解释。Microsoft .Net Framework 4.5 实际上有一个类来处理这个问题,称为NetworkInterface.

Microsoft Developer Network 实际上非常详细地解释了这些类要求。

这个特定的类封装了本地计算机上网络接口(也称为适配器)的数据。您不创建此类的实例;GetAllNetworkInterfaces 方法返回一个数组,该数组包含本地计算机上每个网络接口的此类的一个实例。

如您所见,它需要半具体的细节,否则它将失败。因为它可能会尝试未连接的适配器。您的问题让我相信,您尝试将ping有效数据包发送到本地适配器以验证是否有响应。

您甚至拥有NetworkInformation提供大量相关信息的命名空间。一个非常非常简单的实现就像:

Ping pingSender = new Ping();
PingOptions options = new PingOptions();

// Default Time To Live (TTL) but don't fragment request.
options.DontFragment = true;

// Create a buffer of 32 Bytes:
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);

// Timeout
int timeout = 120;

// Ping and Request Reply
pingReply reply = pingSender.Send(args[0], timeout, buffer, options);
if(reply.Status == IPStatus.Success)
{
     Console.WriteLine("Address: {0}, reply.Address.ToString());
     Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
     Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
     Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
     Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length); 
}    

您可以简单地使用该Ping请求,127.0.0.1因为这是当前正在使用的网卡的环回地址。

回复将表明它是否正在接收您的数据包。

是的,Loopback 应该收到响应以知道您的卡正在使用中。但在大多数情况下可以忽略它;因为地址只会在您收到请求时显示有用的信息。

如果你不喜欢这个Ping想法,你的另一个选择。只是设置您NetworkInterface的监听更改:

NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach(NetworkInterface n in adapters)
{
      Console.WriteLine("   {0} is {1}", n.Name, n.OperationalStatus);
}

这是测试卡响应的两种有效方法。如上所述,除非您专门向环回地址发送请求,否则环回不会主动“接收”任何内容。

希望这会有所帮助。

于 2013-03-14T22:31:12.360 回答