【问题标题】:Make a network interface receive (hear) a packet使网络接口接收(听到)数据包
【发布时间】:2013-03-03 11:54:31
【问题描述】:

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

谢谢。

【问题讨论】:

  • 我尝试在 Microsoft Loopback Adapter 本身上发送数据包,但它听不到从它发送的数据包。问题是:它听到什么了吗?

标签: c# networking winpcap pcap.net


【解决方案1】:

您的问题既不具体也不是很详细,因此您会得到广泛的解释。 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);
}

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

希望对您有所帮助。

【讨论】:

  • 我认为问题在于环回适配器根本不接收数据包。如果我 ping 适配器的事件,我看不到该环回适配器的本地连接状态告诉我收到了单个数据包。
  • 是否已更改,一些网络管理员更改了它们。正如业内的本质一样,127.0.0.1 实际上是不好的做法,他们通常推荐我认为127.0.1.1127.0.0.5。不过记不太清了。这样人们就不会淹没本地适配器。
【解决方案2】:

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

【讨论】:

  • 他不能从PCap 发送ICMP,然后在应用程序中使用NetworkInformation 类对他的本地127.0.0.1 执行ping 验证吗?或者甚至只使用 NetworkInformation 本身来发送 ping (ICMP) 请求?
  • 如果他正在使用 PCAP,他正在尝试嗅探网络上的数据包。最有可能尝试调试一些使用本地套接字的进程间通信。
  • 不知道他的意思是不是抓包?我刚刚意识到你说 Capture,是的,如果他的意思是你确实是正确的。
  • 我可以使用 Wireshark 嗅探 MS Loopback Adapter 上的数据包。我需要让 MS Loopback 适配器接收数据包。
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2021-09-16
  • 2016-12-19
  • 1970-01-01
  • 2012-05-01
  • 2012-08-29
相关资源
最近更新 更多