システムがアクセスした Web サイトの URL (IP アドレス) をパケット キャプチャによって抽出するプログラムを作成したいと思います。 tcp-udp .. (このようなプログラムは http スニファーと呼ばれることもあります。利用可能なツールを使用することは想定されていません)。初心者として、私はたった今、この基本的なスニファ プログラムを実行しました: sniffex.c .. どなたか教えてください。
6 に答える
いいえ、十分な情報がありません。1 つの IP は任意の数のドメイン名に対応でき、これらの各ドメインには文字どおり無限の数の URL を含めることができます。
ただし、gethostbyaddr(3) を参照して、少なくともその IP の正規名を取得するために IP で逆引き DNS ルックアップを行う方法を確認してください。
更新: 質問を編集したので、@aehiilrs の方がはるかに優れた回答をしています。
注: 以下の情報では、GET には POST およびその他の HTTP メソッドも含まれていると想定しています。
1 つのパケットを調べるよりもはるかに多くの作業が必要になることは間違いありませんが、ストリーム全体をキャプチャすると、送信された HTTP ヘッダーから取得できるはずです。
提供されている場合は Host ヘッダーを確認し、GET によって実際に要求されているものも確認してください。GET は、完全な URL またはサーバー上の単なるファイル名のいずれかです。
また、これは IP アドレスからドメイン名を取得することとは関係がないことに注意してください。ドメイン名が必要な場合は、データを掘り下げる必要があります。
Wireshark からの私のマシンでの簡単な例:
GET http://www.google.ca HTTP/1.1
Host: www.google.ca
{other headers follow}
ブラウザーからではなく、GET にパスのみを使用した別の例:
GET /ccnet/XmlStatusReport.aspx HTTP/1.1
Host: example.com
2 番目の例では、実際の URL はhttp://example.com/ccnet/XmlStatusReport.aspxです。
PasTmonを見てください。http://pastmon.sourceforge.net
私は似たようなことを研究していて、これに出くわしました。Linuxを使用している場合、これが良いスタートになることを願っています-justniffer。
http://justniffer.sourceforge.net/
また、HTTP リクエストから情報を取得する場合に役立つ http トラフィック グラブ python スクリプトもあります。
逆引き DNS ルックアップが必要になる場合があります。そのために gethostbyaddr を呼び出します。
Linux を使用している場合は、iptables にフィルターを追加して、HTTP 取得要求を含むパケットを探して URL を取得する新しいルールを追加できます。
したがって、ルールは次のようになります。
localhost からポート 80 で送信される各パケットについて -> パケットに GET 要求が含まれているかどうかを確認します -> URL を取得して保存します
このアプローチは、HTTPS ヘッダーであっても、すべての場合に機能するはずです。