2006年01月12日

Webサーバのアクセスログについて

■Web サーバーのログ

Web サーバーソフトウェアの種類は数多くありますが、ここでは世界的に最も多く利用されているオープンソース ソフトウェアの Web サーバーである Apache *1 を例にとって見ていきましょう。

Apache ではさまざまなログ形式がサポートされます。デフォルトでは共通ログ形式(Common Log Format)でデータは書き込まれますが、LogFormat 指示子により形式をカスタマイズすることも可能です。

・デフォルトの LogFormat 指示子
  【%h】-- ホスト名:訪問者のIPアドレスまたはドメイン名
  【%l】--識別情報:クライアントについての識別情報
  【%u】--認証ユーザー:基本HTTP認証が必要な場合の認証済みユーザー名
  【%t】--日時:リクエストの日時
  【%r】--リクエスト:送信してきたリクエストの内容。この部分は、"と"で囲まれる。
  【%s】--ステータス:クライアントに送信されたHTTPステータスコード
       (*ステータスの区分)
        100番台:情報
        200番台:成功
        300番台:転送
        400番台:エラー(アクセスする側の問題)

  【%b】--バイト数:クライアントに送信されたファイルやオブジェクトのサイズ

・カスタムログ形式として利用される LogFormat 指示子
  【%f】--リクエストされたファイル名
  【%{variable}e】--環境変数variableの内容
  【%a】--リクエストを送信してきたコンピュータのリモートIPアドレス
  【%{IncomingHeader}i】--サーバーに送信されてきたリクエストのヘッダー行
  【%{variable}n】--別のモジュールの注釈valiableの内容
  【%{OutgoingHeader}o】--応答のヘッダー行
  【%p】--リクエストに応えるサーバーのポート
  【%P】--リクエストに応えた子プロセスID
  【%{format}t format】--書式に従って表現された時間
  【%T】--リクエストに応えるために要した時間(秒)
  【%U】--リクエストされたURLパス
  【%v】--リクエストの送信先となったサーバーの名前
  【%V】-- UseCanonicalNameの設定に応じて、リクエストの送信先となったサーバーの名前を示す

これらの指示子を組み合わせ、ダブルクオーテーションで囲んで指定すれば、望みどおりの書式でログを記録できます。ありがたいことに、必要そうな書式はあらかじめ Apache の開発者側で httpd.conf 設定ファイルにあらかじめ用意されています。

■共通ログ形式

共通ログ形式(common)では7つのトークン(データフィールド)が空白により区切られ、以下の形式で情報を表示します。

・表示順ホスト名 識別情報 認証ユーザー 日時 リクエスト ステータス バイト数
・指定方法
LogFormat "%h %l %u %t "%r" %s %b"

・ログ出力の例
192.168.100.xxx - - [01/Nov/2003:18:26:23 +0900] "GET http://www.melpod.com/index.html HTTP/1.0" 200 18167


■combined 形式

サイトを訪れたユーザーの詳細な足跡を追うためには、カスタムログ形式を設定して参照元ページである Referer と User Agent を取得する combined 形式を指定する場合が多いようです。

・表示順ホスト名 識別情報 認証ユーザー 日時 リクエスト ステータス バイト数 リファラー ユーザーエージェント
・指定方法
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

・ログ出力の例
210.197.104.30 - - [24/Nov/2003:22:27:06 +0900] "GET /index.html HTTP/1.0" 200 17319 "http://www.netage.co.jp/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; T312461)"


combined 形式のログ出力の例をみてわかるように、ブラウザ(ユーザーエージェント)からの1リクエストに対して1行のログが出力されます。それではこの combined 形式のログを例にとってユーザーの足跡を実際に辿ってみましょう。

「このユーザーは日本時間の2003年11月24日22時27分に 210.197.104.30 から Windows 98 の Microsoft Internet Explorer で index.html へアクセスしてきており。参照元は www.netage.co.jp です。」

このようにユーザーの残した足跡の詳細は Web サーバーのログファイルとして克明に残されます。あとはこの残したログをどのように解析するかによって、サイトアクセスの状態を知る上であなたの必要な情報を引き出すことができます。

posted by 貝貝 at 17:24| Comment(0) | TrackBack(1) | Internet | このブログの読者になる | 更新情報をチェックする

2006年01月11日

携帯からWebサーバにアクセスした場合の判別方法

携帯電話のユーザ判定あれこれ
携帯電話からアクセスされた場合、(公式サイトは別として)、
個人を特定する手段はIDやパスワードの発行くらいしかないと思いこんでいたが、
今日とあるリンクから偶然見つけた。
実は結構以前の機種から可能だったようだ。簡単ながら集めた情報をまとめておく。

NTTDoCoMoの場合:

<html><body><form action="./test.phtml" method="get" utn>
<input type="submit" name="submit">
</form></body></html>

のようなフォームを作成する。
formタグの最後の"utn"がポイント

するとユーザエージェントに次のような文字列が入る。apacheのログを見てみよう。
○通常のアクセス
210.136.161.236 - - [28/Oct/2003:20:25:52 +0900]
"GET /test.html HTTP/1.0" 200 127 "-" "DoCoMo/1.0/P504iS/c10/TB"
○utnを入れた場合のアクセス
210.136.161.233 - - [28/Oct/2003:20:26:00 +0900]
"GET /test.html?submit=%91%97%90M
HTTP/1.0" 200 127 "-" "DoCoMo/1.0/P504iS/c10/TB/serxxxxxxxxxxx"

このように"/serxxxxxxxxxxx"が追加されるので、ここから個人を特定すると良い。
なお携帯電話側にはアクセス時に「携帯電話情報を送信しますか?」というダイアログが出る。
503i以降の機種から実装されているらしい。

参考:http://www.zdnet.co.jp/mobile/0102/13/id.html


J-phone(vodafone)の場合:

web設定の画面から「ユーザID通知設定」をオンにしてもらうと、
「J-PHONE/4.0/J-P51/SNJMAAxxXXXXX」のようにユーザエージェントに付加される。
幾つかの機種ではデフォルトでオンらしい

参考:http://www.dp.j-phone.com/dp/tool_dl/web/useragent.php
http://d.hatena.ne.jp/HiromitsuTakagi/20030710#p1


auの場合:
subscriber IDを環境変数X-Up-Subnoで判別可能
posted by 貝貝 at 12:00| Comment(0) | TrackBack(0) | Internet | このブログの読者になる | 更新情報をチェックする