- - PR -
HTTPのパケットキャプチャについて(GETやPOSTでのURLを取得したい)
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-29 10:38
お世話になります。
ブラウザ(種類を問わず)でGETやPOSTしたときのURLをキャプチャしたい(ログとして残したい)のですが、いくつかわからない点がありますので、ご教授いただければ幸いでです。 ※なお、キャプチャソフトはWireshark(旧EtherReal)を使っています。 @URLを取得する際に、HTTPパケットのどこを参照すればよいのか? http://www.google.co.jp/にアクセスした際に、パケットを解析すると、下記のようなデータが流れてきます。 ************************************************ GET / HTTP/1.1 host:www.google.co.jp ************************************************ HTTP1.1であればhostフィールドが必須のため、hostとGETリクエスト行のパス名を結合すればよいと思うのですが、http1.0ではhostフィールドが必須ではないため、URLが取得できない場合もあるかと思います。ためしにIE6.0でhttp1.1を使用しない設定でアクセスしてみたのですが、hostは取れました。ただブラウザによっては取得できない場合を想定すると、http1.0と1.1両方を取得するのによいフィールドはどこになるのでしょうか?またPOSTの場合でも参照すればよいフィールドがありましたらご教授願います。 A大量に画像が貼り付けてあるページを見ると大量のGETが流れるため、ブラウザで入力したURLだけをキャプチャするにはどうすればよいか? http://www.yahoo.co.jp/とブラウザに入力してアクセスした場合、パケットキャプチャすると大量のGETが送信されています(アクセスしたURLに貼り付けてある画像やflashを取得しているようです)。取得したいのはブラウザで入力したhttp://www.yahoo.co.jp/のみなのですが、その後に流れる余計なGETを除外するにはどうすればよいでしょうか(どこかのフィールドで識別できますでしょうか)? B参考になるホームページや書籍がありましたら教えていただけないでしょうか? http://www.tohoho-web.com/ex/http.htm http://cai.cs.shinshu-u.ac.jp/sugsi/Lecture/php/http/ http://www.studyinghttp.net/header#Abstract 今のところ、数日間検索して役に立ちそうなホームページは上記3つでした。 | ||||||||||||
|
投稿日時: 2008-04-05 23:05
パケットキャプチャからURLを取得するには以下の手が考えられます。 ・リクエストライン ・hostヘッダー ・接続先IPからDNSで いずれにせよ、RFC上は1.0でも確実に取得できるものはありません。 一番確実性が高いのはプロキシを立てるという手だと思いますが、 これもHTTPクライアントが勝手にURLを解決してしまった場合は対応できません。
パケットからは区別ができません。 大抵は最初にリクエストされたコンテンツが ユーザーが入力したURLに対応すると思いますが、 キャッシュの都合などで違う場合も発生するはずです。
RFCを参照したらよいと思います。 | ||||||||||||
|
投稿日時: 2008-04-06 01:19
すぐには目的が良く分からなかったのですが、要求としては、ネットワーク上の TCP/IP を流れる情報(Destination の IP アドレスや host フィールド)から、元となる URL という文字列を再構成したいということですよね。 完全な逆変換は理論的には無理でしょう。なんらかの恣意的な推論をしないといけない分野だと思います。だれもが正しいとみなすような正解はないでしょう。まず、これが大前提となります。
うろ覚えですが REFERER って付いていないでしょうか?もっとも、たとえ付いていたとしても、それをクリックして HTTP アクセスが発生したのかどうかの区別は付かないかもしれませんね。そもそも取得対象は、キーボードを操作して入力した文字列だけなのでしょうか?リンクやボタンをクリックして画面遷移した場合は、それは取得対象なのでしょうか? http://www.yahoo.co.jp/ のページの HTML の中のリンク(A タグなど)を解析しないといけないのかもしれません。こうなるといわゆる「巡回ソフト」に近いものになるでしょう。 | ||||||||||||
|
投稿日時: 2008-04-06 10:26
ならば、リクエストヘッダのRefererの有無で出来ると思います。 あくまでブラウザで【入力したもの】だけという前提です。 セキュリティソフトなどがカットしてしまう設定の場合はダメです。 URLを完全にする場合ですがHTTP 1.0でも Hostを送ることが推奨されています。 逆にHostが送られていない場合で、サーバで仮想ホストで運用している場合、サーバは アクセス先ドメインを特定できないためデフォルトのホストのページを返します。 http://000.000.000.000/〜のようにIPアドレスでアクセスして表示されるページです。 host レコードを送らないブラウザと比べたときに表示するページがまったく違うという ことがありえるわけです。 なのでHostを送らないブラウザで入力したURLのホスト名、ドメイン名の部分を取得しても意味が無いので。http://000.000.000.000/〜のように接続先のIPアドレスとGET引数を 連結したアドレスでいいんじゃないでしょうか? [ メッセージ編集済み 編集者: 末記人 編集日時 2008-04-06 10:27 ] |
1