どんなブラウザを使って見られたかを知る(user agent)

ここでは、apache(アパッチ)のアクセスログからユーザエージェント(user agent)を解析する方法を説明したいと思います。 user-agentは、ホームページを閲覧するために利用されたクライアントアプリケーション(もしくはブラウザ)の種類を示します。 ブラウザの種類を調べると、どのような系統のユーザがホームページを閲覧しているかがわかります。 例えば、macosのブラウザを使っているということがわかればマックを使った人がホームページを見ているということがわかります。 また、同じIPアドレスで同じブラウザで閲覧している人が最初のアクセスから7日後にまた来ていたら、最訪問してくれた可能性が高いということもわかります。

ユーザエージェントに関する情報を取得する

user agentを取得するには、アクセスログの9個目の項目を抜き出します。 (apacheのcombined logを前提にしています。必要に応じてサンプルを変えてください。)

抜き出したuser agentを単純に羅列しただけでは膨大な量のデータになってしまうので、ここでは、各user agentの登場回数を数えてみたいと思います。 user agentの登場回数を計算するために、perlの連想配列を利用します。 最終的には、連想配列に覚えこませたuser agentの登場回数を表示してサンプルスクリプトは終了します。

以下に、perlスクリプトのサンプルを示します。


#!/usr/bin/perl

# (注意)/usr/bin/perlの部分は必要に応じて変更してください。

# (注意)"access_log.txt"は解析するアクセスログのファイル名に
#  変更してください。
open(LOGFILE, "access_log.txt") || die $! . "\n";

# 一行ずつアクセスログファイルを読みます。
while (<LOGFILE>) {

  # perlのパターンマッチを行っています。
  # $1,$2,...$9にマッチした結果が入ります。
  /^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;

  # パターンマッチの結果を変数に代入しています。
  $useragent = $9;

  # 取得したuser agentをキーにした連想配列の値を増やします
  $useragentcount{$useragent}++;
}
close(LOGFILE);

# 連想配列に覚えさせたuser agent数を表示します
# $keyには、user agentが入っています
# $valueには、各回数が入っています

while (($key, $value) = each(%useragentcount)) {
  print "$value\t$key\n";
}

exit;

ここでは、とりあえず最も単純なuser agent取得方法を説明しました。

(注意)この方法で得られるユーザエージェントは、クライアント(ブラウザ)による申告制です。 そのため、閲覧を行っているブラウザが嘘をついている場合には、アクセスログに記述された情報が正しくない内容になっている場合があります。


IPv6基礎検定

YouTubeチャンネルやってます!