ログファイルからIPアドレスを抽出

Find ip address in logfile.

* 本ページはプロモーションが含まれています

ログファイルと言っても、様々な形式があるので、同様の結果が得られるとは限りませんので、あくまでも参考程度にて。
今回は、dnsmasq のログファイルから、自サブネットの IP アドレスを抽出します

dnsmasq のログ 

Jan 25 05:45:04 dnsmasq[1]: query[A] firestore.googleapis.com from 192.168.1.43
Jan 25 05:45:04 dnsmasq[1]: cached firestore.googleapis.com is 142.250.196.106
Jan 25 05:45:04 dnsmasq[1]: query[AAAA] firestore.googleapis.com from 192.168.1.43
Jan 25 05:45:04 dnsmasq[1]: cached firestore.googleapis.com is 2404:6800:4004:827::200a
Jan 25 05:45:04 dnsmasq[1]: reply easylist-downloads.adblockplus.org is 65.21.35.75
Jan 25 05:45:04 dnsmasq[1]: reply easylist-downloads.adblockplus.org is 136.243.9.187
Jan 25 05:45:04 dnsmasq[1]: reply easylist-downloads.adblockplus.org is 141.95.40.123
Jan 25 05:45:04 dnsmasq[1]: reply easylist-downloads.adblockplus.org is 51.255.232.90
Jan 25 05:45:04 dnsmasq[1]: reply easylist-downloads.adblockplus.org is 95.216.77.130
Jan 25 05:45:04 dnsmasq[1]: reply easylist-downloads.adblockplus.org is 95.217.32.92
Jan 25 05:45:05 dnsmasq[1]: query[A] firestore.googleapis.com from 192.168.1.43
Jan 25 05:45:05 dnsmasq[1]: cached firestore.googleapis.com is 142.250.196.106
Jan 25 05:45:05 dnsmasq[1]: query[AAAA] firestore.googleapis.com from 192.168.1.43
-

IP アドレスだけ抽出 

この中から、192.168.1.*の IP アドレスだけ抽出する

$ grep -Eo '192\.168\.1\.[0-9]{1,3}' dnsmasq.log

192.168.1.5
192.168.1.5
192.168.1.60
192.168.1.60
192.168.1.60
192.168.1.60
192.168.1.60
192.168.1.63
192.168.1.63
192.168.1.63
192.168.1.63
192.168.1.63
-

重複した IP アドレスを削除 

同じアドレスが複数表示されるので、重複を削除する

$ grep -Eo '192\.168\.1\.[0-9]{1,3}' dnsmasq.log | sort -u

192.168.1.153
192.168.1.18
192.168.1.19
192.168.1.233
192.168.1.30
192.168.1.40
192.168.1.43
192.168.1.44
192.168.1.47
192.168.1.49
192.168.1.5
192.168.1.50
-

読みやすいように整形(最終形) 

4 オクテット目の最初の一文字の数字だけでソートされているため、わかりやすい数字順に並び替えたい

$ grep -Eo '192\.168\.1\.[0-9]{1,3}' dnsmasq.log | sort -uV

192.168.1.1
192.168.1.5
192.168.1.10
192.168.1.18
192.168.1.19
192.168.1.30
192.168.1.40
-

ファイルへ保存 

ここまでは標準出力なので、必要であれば実行結果をファイルへ保存しましょう

$ grep -Eo '192\.168\.1\.[0-9]{1,3}' dnsmasq.log | sort -uV -o ip.txt