我需要让 Microsoft Loopback Adapter 使用 PcapDotNet 或其他任何东西接收(听到)一个数据包。我怎样才能做到这一点?
谢谢。
我需要让 Microsoft Loopback Adapter 使用 PcapDotNet 或其他任何东西接收(听到)一个数据包。我怎样才能做到这一点?
谢谢。
您的问题既不具体也不是很详细,因此您将得到广泛的解释。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);
}
这是测试卡响应的两种有效方法。如上所述,除非您专门向环回地址发送请求,否则环回不会主动“接收”任何内容。
希望这会有所帮助。