我需要使用PcapDotNet或其他任何东西使Microsoft Loopback Adapter接收(收听)数据包。我怎么能这样做?
感谢。
答案 0 :(得分:3)
您不能使用PCAP从Windows上的环回适配器捕获数据包。但是,您可以使用名为RawCAP的工具来执行此操作并输出.pcap文件(您可以在WireShark中打开:http://wiki.wireshark.org/CaptureSetup/Loopback)。
答案 1 :(得分:0)
您的问题不具体,也不十分详细,因此您会得到一个广泛的解释。 Microsoft .Net Framework 4.5实际上有一个完全可以处理这个名为NetworkInterface
的类。
The Microsoft Developer Network actually explains in great detail these class requirements.
此特定类也封装了网络接口的数据 在本地计算机上称为适配器。您不创建实例 这个班级; GetAllNetworkInterfaces方法返回一个数组 包含每个网络接口的此类的一个实例 本地电脑。
因此,您可以看到它需要半特定的细节,否则它将失败。因为它可能会尝试未连接的适配器。您的问题让我相信,您尝试ping
一个有效的数据包到您的本地适配器以验证是否有响应。
您甚至拥有NetworkInformation
命名空间,它提供了大量相关的information。一个非常非常简单的实现就像:
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);
}
这是测试卡片响应的两种有效方法。如上所述,除非您专门向环回地址发送请求,否则Loopback不会主动“接收”任何内容。
希望这有帮助。