0

PcapDotNetなどを使用して、Microsoft Loopback Adapterがパケットを受信(受信)するようにする必要があります。どうやってやるの?

ありがとう。

4

2 に答える 2

3

PCAPを使用して、Windowsのループバックアダプタからパケットをキャプチャすることはできません。ただし、RawCAPと呼ばれるツールを使用してそれを実行し、代わりに.pcapファイルを出力することができます(WireSharkで開くことができます:http ://wiki.wireshark.org/CaptureSetup/Loopback )。

于 2013-03-14T22:32:08.130 に答える
0

あなたの質問は具体的でも非常に詳細でもないので、あなたは幅広い説明を受けるでしょう。Microsoft .Net Framework 4.5には、実際にはこれを処理するためのクラスがありNetworkInterfaceます。

Microsoft Developer Networkは、実際にこれらのクラス要件を詳細に説明しています。

この特定のクラスは、ローカルコンピューター上のネットワークインターフェイス(アダプターとも呼ばれます)のデータをカプセル化します。このクラスのインスタンスは作成しません。GetAllNetworkInterfacesメソッドは、ローカルコンピューターのネットワークインターフェイスごとに、このクラスの1つのインスタンスを含む配列を返します。

ご覧のとおり、半特定の詳細が必要です。そうでない場合、失敗します。接続されていないアダプタを試す可能性があるため。あなたの質問は私に信じさせます、あなた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て、現在使用中のネットワークカードへのループバックアドレスにすることができます。

応答は、パケットを受信して​​いるかどうかを示します。

はい、ループバックはカードが使用中であることを知るための応答を受け取るはずです。ただし、ほとんどの場合、無視できます。アドレスは、リクエストを受け取ったときにのみ役立つ情報を表示するためです。

Pingアイデアが気に入らない場合は、他のオプション。NetworkInterface変更をリッスンするように設定するだけです。

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

これらは、カードからの応答をテストするための2つの有効な方法です。上で述べたように、ループバックアドレスにリクエストを具体的に送信しない限り、ループバックはアクティブに何も「受信」しません。

うまくいけば、それがお役に立てば幸いです。

于 2013-03-14T22:31:12.360 に答える