tcpdumpを使ってPOP3を監視

なんというか、変なコードを書いてしまった。普通のpop3サーバなら、この情報はsyslogにだしてくれるんだけどなぁ。
pop3.awk

BEGIN {
        username = "username"

        start = 0
        username1st = sprintf("USER.%s", substr(username, 1, 3))
        username2nd = substr(username, 4, 16)
}
$1 ~ /^[0-9][0-9]:/ {
        lasttime = $1
}
$1 ~ "0x0020:" &&  $NF ~ /^P/ && $NF ~ username1st {
        start = 1
        lastline = $NF
}
$1 ~ "0x0030:" && $NF ~ username2nd {
        if ( start == 1 )  {
                print lasttime, ":" , lastline $NF
                start = 2
        }
}
$1 ~ "0x0020:" &&  $NF ~ /^P/ && $NF ~ "QUIT" {
        if ( start == 2 )
                print lasttime, ":" , $NF
        start = 0
}
$1 ~ "0x0020:" &&  $NF ~ /^P/ && $NF !~ "PASS" {
        if ( start == 2 )
                print  lasttime, ":" , $NF
}

実行例

# tcpdump  -X -s 128 port 110 and src host サーバ名 2>&1 2> /dev/null | awk -f pop3.awk
15:33:56.169345 : P...f7..USER.username..
15:33:56.365534 : P.............
15:33:56.369747 : P.......STAT..
15:33:56.374015 : P.......QUIT..

POPのコマンドの分別のところをtcpdumpの条件式で ip[0x28] & 0xff > 'A' and ip[28] & 0xff < 'Z' みたいに書けないものか?