access.log から IP アドレスからドメイン名を取得する

access.log から IP アドレスからドメイン名を取得する

実際、どのドメインから自分の Web サイトにアクセスしたかを確認したいのです。Apache access.log ファイル内の IP アドレスからドメイン名を生成したいのです。

どうすればいいでしょうか? ログ ファイルは 54 個ほどあります。すべてのファイルを 1 つに連結します。

これは Unix サーバーです。Apache ログ ファイル アナライザーを使用する必要があります。そのため、Webalizer を使用していますが、IP をドメイン名に解決できません。

答え1

かなり前に、このための簡単なスクリプトを書きました。完璧とは言えず、いくつかの障害モードがありますが、簡単に検査するには十分です。私はこれを改良しようとは思っていませんが、おそらく他の誰かがそうするでしょう。

#!/bin/bash

while read junk
do
        echo -n "$junk "
        dig +short -x $junk
done

次のように使用します。

cut -f 1 -d ' ' access.log | sort | uniq | ips.sh

答え2

Windows を使用している場合は、各 IP に対して「nslookup」を実行し、連結されたログ ファイルをスクリプトで解析できます。

if wscript.arguments.count > 0
then
  logname = wscript.arguments(0)
  set fs = wscript.createobject("scripting.filesystemobject")
  set readstream = fs.opentextfile(logname, 1, 0, 0)
  while not readstream.atendofstream str = readstream.readline ' parse str with RegEx object to get IP
    set shell = wscript.createobject("wscript.shell")
    shell.run "nslookup " & ip & " > temp.txt", 0
    set lookupstream = fs.opentextfile("temp.txt", 1, 0, 0)
    lookup = lookupstream.readall ' parse lookup info
    lookupstream.close
  wend
  readstream.close

関連情報