これによるとコメント、提案を受けて別の質問で提出します。私はネットワーキングとセキュリティについてもっと学びたいと思い、理解を深めるのに役立つツールを使いたいと思います。
Fingは本当に素晴らしいツールのようです。ネットワーク内のデバイスと関連するMACアドレスを見つけることです。検出と警告を提供するすべてのソリューションを簡単に実装できますが、これらのツールがどのように実装されるかを知りたいです。これは低レベルのLinuxユーティリティの組み合わせですか、それともいくつかのカスタムプログラミングが行われていますか?
2番目の場合、アルゴリズムはどのように見えますか?
ベストアンサー1
無線ネットワークでFingを実行しました。を使用すると、tcpdump
Fingが生成するようです。アドレス解決プロトコル(ARP) 要求パケット。 ARPは、イーサネットプロトコルレベル(データリンク、OSIレベル2)で実行される非常に単純なプロトコルです。 ARPリクエストパケットには、「to」アドレスでブロードキャストアドレス(ff:ff:ff:ff:ff:ff)、「from」情報でAndroid携帯のMACとIPアドレス、Fingが送信したいIPアドレスがあります。について知りたいです。 Fingはサブネットが何でも通過するようです。私の場合は172.31.0.0/24なので、172.31.0.1から172.31.0.254までの255のIPアドレスがあります。パレードの終了後に応答しないIPアドレスで再試行しているようです。 FingがIPアドレスを一括して試してFingスレッドができるだけ早く処理できるように、デフォルトのLinuxカーネルを使用してARP応答をバッファリングしているようです。フィンがタイムアウトを確認すると、再送信されます。 Fing(Javaプログラム)が電話のLinuxカーネルを取得してARPパケットを生成する方法がわかりません。
有名な地図は-sn
「ping scan」フラグで呼び出され、同じことを行います。カーネルにARP要求を送信させる方法を学ぶためにstrace
実験を行いました。これは通常のTCP / IPソケットを作成し、IPアドレスを使用してそのソケットをTCPポート80に呼び出すnmap -sn 172.31.0.0/24
ようです。これは、IPアドレスを持つホストがないときにLinuxがタイムアウトを決定できるよりも早く多数の呼び出しを連続して実行するため、非ブロックモードで実行する必要があります。nmap
connect()
nmap
connect()
connect()
したがって、答えは次のようになります。 TCP / IPソケットを作成し、connect()
特定のポートとIPアドレスを使用して呼び出して、エラーが何であるかを確認してください。エラーがECONNREFUSEDの場合、これはライブIPアドレスですが、そのポートでリッスンしているエントリは何もありません。 TCP接続が確立されると、そのIPアドレスのホストがあります。コールタイムアウトには、connect()
IPアドレスに関連付けられたコンピュータはありません。速度のために通話をバッチ処理し、IPアドレスに接続されているコンピュータがないことを確認するには、通話がタイムアウトするまでconnect()
待つ必要があります。connect()