0

postfix ログ ファイルの送信元リレー IP アドレスから送信元アドレスを抽出しようとしています。

何か案は???

どんな助けにも感謝します

ケン

Nov 16 00:05:10 mailserver pfs/smtpd[4365]: 925D54E6D9B: client=client1[1.2.3.4]   
Nov 16 00:05:10 mailserver pfs/cleanup[4413]: 925D54E6D9B: message-id=<11414>    
Nov 16 00:05:10 mailserver pfs/qmgr[19118]: 925D54E6D9B: from=<11414@localhost>, size=40217, nrcpt=1 (queue active)    
Nov 16 00:05:10 mailserver pfs/smtp[4420]: 925D54E6D9B: to, relay=[1.3.5.7]:25, delay=0.02, delays=0.02/0/0/0, dsn=5.0.0, status=bounced (host [1.3.5.7] refused to talk to me: 550 Please remove this address from your list)   
Nov 16 00:05:10 mailserver pfs/bounce[4310]: 925D54E6D9B: sender non-delivery notification: 972E34E6D9F   
Nov 16 00:05:10 mailserver pfs/qmgr[19118]: 925D54E6D9B: removed
4

2 に答える 2

0

うーん、表示ブリングを使用してfromフィールドとRelayフィールドを収集するだけの場合は、次のように使用できます。

/: from=/ { lastFrom = $7 }
/relay=/ { print lastFrom, $8 }

本当にコア アドレスを抽出したい場合は、もう少し複雑になります...

/: from=/ { lastFrom = $7 }
/relay=/ {
  r = $8
  gsub(/from=</, "", lastFrom)
  gsub(/>,*/, "", lastFrom)
  gsub(/relay=\[/, "", r)
  gsub(/\].*/, "", r)
  print lastFrom, r
}

$ awk -f mail2.awk mail.dat
11414@localhost 1.3.5.7

いつものように、これらのソリューションは The One True Awk と gawk の両方で機能します。

于 2010-11-18T05:54:12.680 に答える
0
$7 ~ /^from=,$/ {
    from[$6] = substr($7, 7, length($7) - 8)
} 
$8 ~ /^relay=\[/ { 
    if (substr($8, "[1.3.5.7]")) 
        print from[$6]
    delete from[$6]}
}

from-recording 行が表示されるたびに、メッセージのキュー ID でインデックス付けされた連想配列に保存されます。リレー行が表示されると、それがリレーの場合、関連する from 行が出力されます。substr() は、すべてのメタ文字 ("["、"]"、".") を \-エスケープする必要がないように使用されます。興味のあるリレーであるかどうかにかかわらず、配列が際限なく大きくならないように from データがクリーンアップされます。

于 2010-11-27T08:11:45.687 に答える