1. rejhost.pl (Extract rejected hosts)
機能 引数で指定されたPostfixのログファイルから、拒否されたホストのFQDNとIPアドレスを抽出する。引数を省略したら、/var/logディレクトリの下の、過去と最新の全メールログファイルを入力する。ディレクトリを省略したファイル名を指定したら(「/」がないとき)、デフォルトのディレクトリを/var/logとする。
出力例
166-71-95-178.pool.ukrtel.net[178.95.71.166]
使用例
rejhost.pl # /var/logの下のmaillog.4~maillog.1とmaillogから入力
rejhost.pl maillog.1 maillog # /var/logの下のmaillog.1とmaillogから入力
rejhost.pl ~/maillog.save # ~/maillog.saveから入力
プログラムコード
#!/usr/local/bin/perl $dir = "/var/log"; if (@ARGV == ()) { @ARGV = ("maillog.4", "maillog.3", "maillog.2", "maillog.1", "maillog"); } foreach $file (@ARGV) { unless ($file =~ /\//) { $file = $dir . "/" . $file; } } while(<>) { if (/reject:.* from ([^]]+\])/) { print "$1\n"; } } |
デフォルトのディレクトリとデフォルトのメールログファイルを変更したい場合は、適当に手直ししてください。Perlプログラミングの経験のない人でも直し方はおわかりになると思う。
2. revfqdn.pl (Reverse FQDNs)
機能 sortコマンドを使ってFQDNを上位ドメインの文字コード順にソーティングするために、FQDNのラベルを逆順に並べる。結果をもう一度これに通すと元のFQDNに戻る。
変換例
166-71-95-178.pool.ukrtel.net[178.95.71.166] → net.ukrtel.pool.166-71-95-178[178.95.71.166]
使用例
(拒否されたホストを上位ドメインの文字コード順にソーティングし、重複を削除する。――同じサイトドメイン内のホストは連続して並ぶことになる。)
rejhost.pl | revfqdn.pl | sort -f | uniq | revfqdn.pl
プログラムコード
#!/usr/local/bin/perl while (<STDIN>) { chop; $_ =~ /^([a-z0-9._-]+)(.*)$/i; @labels = split(/\./, $1); @labels = reverse(@labels); print join(".", @labels), $2, "\n"; } |
3. sitedom.pl (Extract site domain names)
機能 FQDNを入力してサイトドメイン名を抽出する。トップレベルドメインが英字2文字(国ドメイン)で、第2レベルがcom、net、org、gov、edu、または英字2文字ならば第2レベルを属性ラベルと推定し(これは確かではないが)、第3レベルをサイトドメインとみなして、上位3階層を抽出する。それ以外の場合は上位2階層を抽出する。2階層以上でない名前(unknownを含む)は出力されない。
変換例
189-68-193-53.dsl.telesp.net.br[189.68.193.53] → telesp.net.br
vc-41-16-75-82.umts.vodacom.co.za[41.16.75.82] → vodacom.co.za
166-71-95-178.pool.ukrtel.net[178.95.71.166] → ukrtel.net
bl17-17-97.dsl.telepac.pt[188.82.17.97] → telepac.pt
使用例
(拒否されたホストのサイトドメインの数を数える。)
rejhost.pl | sitedom.pl | sort | uniq | wc
プログラムコード
#!/usr/local/bin/perl while (<STDIN>) { $_ =~ /^(([a-z0-9_-]+\.)+[a-z0-9_-]+)/i; if ($1 =~ /(^|\.)([a-z0-9_-]+\.(((com|net|org|gov|edu|[a-z]{2})\.)?[a-z]{2}|[a-z0-9_-]+))$/i) { print "$2\n"; } } |
0 件のコメント:
コメントを投稿