0

SharpPcapを使用してパケットを注入するアプリケーションを作成しています。

ただし、自分でパケットを作成していて、宛先の IP アドレスしか知らないため、ネクスト ホップの物理アドレスを特定する必要があります。私はいつでもリモートIP アドレスに ping を送信し、それをスニッフィングして、スニッフィングされたパケットからMAC アドレスを取得できます。ただし、 C#でこれを行うためのより複雑でない方法があることを望んでいました。

もちろん、ネクスト ホップの IP アドレスを取得すると、SendArp を使用して MAC アドレスを特定できるため、非常に役立ちます。

ルーティング テーブルを取得します。コードを使用してそれを取得するにはどうすればよいですか?

4

3 に答える 3

2

WMIでいくつかの問題が発生しました(Win32_IP4RouteTableのインターフェイスインデックスと実際のデバイスを関連付けることができないようです。MSDNのドキュメントが間違っており、一部のコンピューターでは他のよりハックな手法が失敗します)。

そこで、管理されていないGetBestRouteを使用することにしました。これにより、Windowsがルーティングを自分で決定し、ネクストホップのIPアドレスとそのアドレスにつながるNIC識別子を返すため、実際に多くの時間を節約できました。また、WMIに対してクエリを実行するよりもはるかに高速です。

次に、 GetAdaptersInfoによって返されるリストでその識別子を探すことにより、NIC自体を見つけることができます。

それが役に立てば幸い ...

于 2009-08-31T06:53:31.610 に答える
0

物理アドレスは、アドレス解決プロトコルによって解決されます。解決する IP アドレスを含むARP Reuestを送信するだけです。

宛先がローカル ネットワークにない場合、パケットを標準ゲートウェイに送信し、標準ゲートウェイに対して ARP 要求を実行する必要があります。標準ゲートウェイは、System.Net.NetworkInformation名前空間のメソッドを使用して取得できます。

 NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses
于 2009-08-26T09:23:05.213 に答える
0

これを行う完全にハックな方法は、コマンド「arp -a」を実行し、コマンドの結果を読み取って解析することです ( Windows が既に保持しているARPキャッシュを使用します)。

それ以外の場合は、プロトコル スタックに ARP を含める必要があります。これは、システム自体がフレームの送信先を特定する方法です。または最後に、非効率であることを心配していない場合は、Ethernet の宛先を FF:FF:FF:FF:FF:FF に設定して、同じ LAN 上の全員をフラッディングすることもできます。何かが応答するか、パケットを取得したら、それを自分でキャッシュして、適切な宛先 MAC アドレスを取得します。

個人的には、もしあなたが私のネットワークに全員が近づくフラッドをしたら、私はあなたを傷つけますが、あなたの状況によっては、かなり簡単なハッキングになるかもしれません. ただし、100% フル スタックの実装を行うのはかなり複雑です。これは、十分にサポートする必要がある多くのエッジ ケース (プロキシ ARP、Gratuitous ARP の処理など) があるためです。

于 2009-08-26T09:29:18.117 に答える