【发布时间】:2013-03-03 11:54:31
【问题描述】:
我需要让 Microsoft Loopback Adapter 使用 PcapDotNet 或其他任何东西接收(听到)一个数据包。我该怎么做?
谢谢。
【问题讨论】:
-
我尝试在 Microsoft Loopback Adapter 本身上发送数据包,但它听不到从它发送的数据包。问题是:它听到什么了吗?
标签: c# networking winpcap pcap.net
我需要让 Microsoft Loopback Adapter 使用 PcapDotNet 或其他任何东西接收(听到)一个数据包。我该怎么做?
谢谢。
【问题讨论】:
标签: c# networking winpcap pcap.net
您的问题既不具体也不是很详细,因此您会得到广泛的解释。 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);
}
这是测试卡片响应的两种有效方法。如上所述,除非您专门向环回地址发送请求,否则环回不会主动“接收”任何内容。
希望对您有所帮助。
【讨论】:
127.0.0.1 实际上是不好的做法,他们通常推荐我认为127.0.1.1 或127.0.0.5。不过记不太清了。这样人们就不会淹没本地适配器。
您不能使用 PCAP 从 Windows 上的环回适配器捕获数据包。但是,您可以使用名为 RawCAP 的工具来执行此操作并输出一个 .pcap 文件(您可以在 WireShark 中打开该文件:http://wiki.wireshark.org/CaptureSetup/Loopback)。
【讨论】:
ICMP,然后在应用程序中使用NetworkInformation 类对他的本地127.0.0.1 执行ping 验证吗?或者甚至只使用 NetworkInformation 本身来发送 ping (ICMP) 请求?