2013-03-14 65 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

相關問題