- PR -

HTTPのパケットキャプチャについて(GETやPOSTでのURLを取得したい)

1
投稿者投稿内容
macrosoft
会議室デビュー日: 2008/02/21
投稿数: 3
投稿日時: 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つでした。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2008-04-05 23:05
引用:

@URLを取得する際に、HTTPパケットのどこを参照すればよいのか?



パケットキャプチャからURLを取得するには以下の手が考えられます。

・リクエストライン
・hostヘッダー
・接続先IPからDNSで

いずれにせよ、RFC上は1.0でも確実に取得できるものはありません。
一番確実性が高いのはプロキシを立てるという手だと思いますが、
これもHTTPクライアントが勝手にURLを解決してしまった場合は対応できません。

引用:

A大量に画像が貼り付けてあるページを見ると大量のGETが流れるため、ブラウザで入力したURLだけをキャプチャするにはどうすればよいか?



パケットからは区別ができません。
大抵は最初にリクエストされたコンテンツが
ユーザーが入力したURLに対応すると思いますが、
キャッシュの都合などで違う場合も発生するはずです。

引用:

B参考になるホームページや書籍がありましたら教えていただけないでしょうか?



RFCを参照したらよいと思います。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-04-06 01:19
引用:

macrosoftさんの書き込み (2008-02-29 10:38) より:
ブラウザ(種類を問わず)でGETやPOSTしたときのURLをキャプチャしたい(ログとして残したい)のですが、いくつかわからない点がありますので、ご教授いただければ幸いでです。


すぐには目的が良く分からなかったのですが、要求としては、ネットワーク上の TCP/IP を流れる情報(Destination の IP アドレスや host フィールド)から、元となる URL という文字列を再構成したいということですよね。
完全な逆変換は理論的には無理でしょう。なんらかの恣意的な推論をしないといけない分野だと思います。だれもが正しいとみなすような正解はないでしょう。まず、これが大前提となります。

引用:

macrosoftさんの書き込み (2008-02-29 10:38) より:
取得したいのはブラウザで入力したhttp://www.yahoo.co.jp/のみなのですが、その後に流れる余計なGETを除外するにはどうすればよいでしょうか(どこかのフィールドで識別できますでしょうか)?


うろ覚えですが REFERER って付いていないでしょうか?もっとも、たとえ付いていたとしても、それをクリックして HTTP アクセスが発生したのかどうかの区別は付かないかもしれませんね。そもそも取得対象は、キーボードを操作して入力した文字列だけなのでしょうか?リンクやボタンをクリックして画面遷移した場合は、それは取得対象なのでしょうか?
http://www.yahoo.co.jp/ のページの HTML の中のリンク(A タグなど)を解析しないといけないのかもしれません。こうなるといわゆる「巡回ソフト」に近いものになるでしょう。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2008-04-06 10:26
引用:
ブラウザで入力したURLだけをキャプチャする


ならば、リクエストヘッダの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

スキルアップ/キャリアアップ(JOB@IT)