質問
クレイジーな質問ですが、とにかくDHCPなしでデフォルトのゲートウェイを発見することはありますか?
これは、IPアドレスがまだないDHCPを使用していないネットワーク上のデバイス用です。デフォルトのゲートウェイを発見できたら、未使用のIPアドレスを推測してから、ネットワークでブロードキャストして使用されているかどうかを確認することができました。
私は理解しているトラブルを求めているかもしれません。たとえば、静的IPを持ち、シャットダウンしているコンピューターが既にある場合。
解決
しばらくパケットを嗅ぎ、ヒューリスティックを適用します。私はこれの残りのためにIPv4とイーサネットを想定しています。これは、ハブではなくイーサネットスイッチを使用している場合、それほどうまく機能しません。最後に詳細があります。
実際のARPパケットと同様に、表示されるイーサネット(または何でも)およびIPヘッダーに基づいて、独自のRARP(逆アドレス解像度)テーブルを作成します(ブロードキャストとマルチキャストIPおよびMACアドレスを無視します)。テーブルが複数のIPアドレスを単一のハードウェアインターフェイスにマッピングできることを確認してください。実際のARPパケットによって入力または検証されたテーブル内のIPアドレスは、そのようにフラグを立てる必要があります。
ゲートウェイは、より多くのトラフィックを受け取り、送信する可能性があります。このトラフィックは、多くの異なるネットワークから多くのIPアドレスを持っている可能性がありますが、同じハードウェアアドレスがあります。ゲートウェイは、多くのIPアドレスを備えた1つのMACアドレスとしてテーブルに表示されます。このMACアドレスアドレスを含むARPトランザクションが観察された可能性が高いため、MacがあるAiraseのIPアドレスを探すことができます。 seen in ARP packet
フラグセット。これはほぼ間違いなくゲートウェイのIPアドレスです。
おそらく、ゲートウェイのIPアドレスに基づいてネットワークアドレスとサブネットマスクを推測できるでしょうが、これは信頼できるものではないかもしれません。標準以外のネットマスクを備えたネットワークでこの作業を試みたい場合は、以下を実行することができます。 2つのIPアドレスサイズのアキュムレータ変数を作成します。
uint32_t acc_and = 0xFFffFFff;
uint32_t acc_or = 0x00000000;
そして、あなたのテーブルのARP検証済みアドレスごとにあなたがする
acc_and &= ip_addr;
acc_or |= ip_addr;
また、このためにゲートウェイから来たパケットで宛先IPアドレス(マルチキャストではない)を使用することもできますが、そのようにフラグを立てる前にゲートウェイを知る必要があります。
ネットマスクとネットワークアドレスを見つける
アドレスのネットワーク部分は両方で同じままでなければなりません(最初の操作の後)が、 acc_and
ボトムビットは acc_or
ボトムビットがいっぱいになり始めます。十分なサンプルを使用すると、次のようなネットワークアドレスを決定できます。
uint32_t net_addr = acc_and & acc_or;
およびネットマスク:
uint32_t net_mask = acc_and ^ acc_or;
十分なサンプリングされたローカルIPアドレスを取得するには時間がかかりすぎる可能性があるため、以下で絞り込もうとすることができます。
uint32_t almost_net_mask = acc_and ^ acc_or;
int i = 0;
while ( 1 & almost_net_mask ) {
i++;
almost_net_mask >>= 1;
}
uint32_t net_mask = 0xFFffFFff;
while( i-- ) {
net_mask <<=1;
}
これにより、最後の1ビットセットが見つかります。最低0ビットは、明らかにアドレスの地域部分の一部ではありません。代わりに、同じものを得ることができます i
に:
i = ffs( ~ ( acc_and ^ acc_or ) ) ; // assuming that int on your system is 32 bit. if not use ffsl
あなたが本当にあなたのネットマスクとネットワークのアドレスを本当に確認したいなら、あなたは他のいくつかのことを試すことができます。ゲートウェイがパケットを転送しようとするかどうかを確認することができます。これは、先に進んで自分にIPアドレスを割り当てる必要があるからです。これは、ネットマスクが正しくない場合に危険です。
自分のためにIPを選択します
それが範囲外ではない可能性を高めるために、あなたがトラフィックを見たことがない最低の法的IPアドレスを選択してみてください。そのアドレスのARPリクエストをスプーフィングして、返信を探すことができます(独自の実際のMACアドレスを使用できますが、これにはIPを構成する可能性があります。IPである必要はありません。 。自分でそれを主張できないIPアドレスを見つけた後。
実際には高すぎるIPアドレスになった可能性があります。あなたのネットマスクはまだ良い推測であるため、これは確実に知ることは困難です。あなたが生きるための無料のスロットがないので、これが事実であるなら、あなたは運が悪いです。
ネットマスクに戻ります
ネットマスクが調整する必要があるかどうかを確認するには、ローカルネットワークに表示されていない宛先アドレスを備えたIPパケットを送信してみてください。これらの推測がオフになっている場合、ネットワークアドレスに割り当てられたビットが多すぎるはずです。そのため、(これまでのところ)推測されたネットワークアドレスのネットマスク部分から低いビットを変更するアドレスに送信することが必要なものです。通常のようにこれらを送信して、IPアドレスをarえて誰かが返信するかどうかを確認することができますが、アドレスを推測していて見逃す可能性が高いので、宛先MACアドレスが設定されたパケットを作成してみる方が良いかもしれません。それが転送されるかどうかを確認するためのゲートウェイ。そうではないように構成されている可能性があるため、ネットワークで既に観察したネットワークのメンバーに対して最初にこれを行うことで、それがあなたのために転送されるかどうかを確認することができます。ゲートウェイがパケットを前方に進める場合、ネットマスクのアイデアに頼ってネットマスクのアイデアを絞り込むことができます。ゲートウェイがローカルネットワークの既知のメンバーを運命づけているパケットの転送がない場合、ローカルネットマスクとネットワークのアイデアを使用し続けることができます。これは、「はい」または「たぶん」のいずれかで、「いいえ」の可能性がなく、質問に答えるだけです。
ハブではなくイーサネットスイッチを使用している場合
イーサネットスイッチを使用している場合、スイッチが他の場所に移動する必要があることを知っている場合、スイッチがイーサネットフレームを転送しないため、物事ははるかに困難になります。ただし、送信者がARPキャッシュにそのIPのエントリをまだ持っていて、そのエントリの早期更新を試みている場合を除き、それらはブロードキャストされるため、多くのARP要求を転送します(これはすべてのシステムで行われない場合があります)。これにより、ネットワークとそのメンバーのアイデアを構築することははるかに困難になりますが、まともな仕事をすることができるでしょう。ただし、おそらくゲートウェイのARPリクエストの量に依存し、ゲートウェイから他のシステムよりも高くなっている必要があります。これは、ファイルサーバーが同様のトラフィックを持つ可能性があるため、エラーが発生しやすいです。
他のヒント
できるが、簡単な方法ではできませんでした(私の知識が悪いことによると)。解決策私はさらに分析します:
- ゲートウェイの検出-2の可能性(データスニッフィングに関連するすべてのもの):
- DHCPオファーパケットをキャプチャし、ゲートウェイを取得します
- アウターネットワークにアドレス指定されたパケットを探してください(たとえば、各ターゲットIPアドレスでARP要求を行います - 回答がない場合は、デフォルトゲートウェイのMACアドレスの可能性がある場合 - このゲートウェイのIPアドレスを見つける必要があります(すべてのパケット、すべてのパケット、すべてのパケット、等..)
- IPアドレスを持っている1つは、ARPリクエストを行い、無料のIPを見つけます。
スニッフィングライブラリは、libpcapまたはwinpcapだと思います。
似たようなことさえもしたことはありませんが、Googleに参照が見つからない場合は、このようにして行くと思います。
Windowsネットワークでは、IP 0.0.0.0を使用して、ポート67を搭載したUDPソケット(または68)を開き、SMBブロードキャストメッセージがIPアドレスを学習するのを待つことができます。そこから、ARPパケットを使用して、そのIPに近いアドレスでデバイスを検索できます。
ネットワークが255.255.255.0未満のネットマスクを使用している場合に備えて、元のIP(同一の上部ビット)に近い未使用アドレスを見つけてみてください。未使用のIPを見つけたら、デバイスに請求し、無償のARPを送信します。
ARPスキャンを続行し、応答するデバイスを見つけるたびに、デフォルトゲートウェイとして一時的に設定し、インターネット上のデバイスの既知のIPアドレスをインターネット上の既知のIPアドレスをpingしようとします。応答が得られた場合、ゲートウェイを見つけました。
DHCPを使用すると、99%の時間が得られる場合、それは多くの作業です。