2013-03-14 70 views
0

我需要使Microsoft环回适配器使用PcapDotNet或其他任何方式接收(听到)数据包。我怎样才能做到这一点?使网络接口接收(听到)数据包

谢谢。

+0

我试图在Microsoft Loopback Adapter本身上发送数据包,但它没有听到它发送的数据包。问题是:它听到什么吗? – 2013-03-14 22:12:06

回答

0

您的问题并不具体也不是很详细,所以您会收到一个广泛的解释。微软.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因为这是回送地址的网卡是目前正在使用。

答复将指示它是否正在接收您的数据包。

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

您的其他选项,如果你不喜欢Ping想法。是简单地设置您的NetworkInterface听一变:

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

这是两个有效的方法来测试从您卡的响应。正如我上面所说的,除非你专门发送请求到回送地址,否则回送不会主动“接收”任何东西。

希望有帮助。

+0

我认为问题是回送适配器根本不接收数据包。事件,如果我ping适配器我看不到该环回适配器的本地连接状态告诉我,一个数据包收到。 – 2013-03-14 22:47:19

+0

它改变了,一些网络管理员改变它们。就其本质而言,在那里行业'127.0.0.1'实际上是不好的做法,他们通常推荐我认为'127.0.1.1'或'127.0.0。5'。尽管不能完全记住。这样人们不会淹没本地适配器。 – Greg 2013-03-14 22:56:13

3

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

+0

难道他不能从PCap发送'ICMP',然后在应用程序中使用'NetworkInformation'类对他的本地'127.0.0.1'进行ping来验证它?甚至仅仅使用'NetworkInformation'来发送ping(ICMP)请求? – Greg 2013-03-14 22:34:33

+0

如果他使用PCAP,他试图在网络上嗅探数据包。最有可能尝试调试一些使用本地套接字的进程间通信。 – 2013-03-14 22:37:09

+0

我不知道他是否意味着捕获数据包?我刚刚意识到你说Capture,是的,如果他确实表示你确实是对的。 – Greg 2013-03-14 22:37:13

相关问题