簡體   English   中英

如何使用awk從特定中繼中提取Postfix日志中的所有對話?

[英]How can I extract all conversations in a Postfix log from a particular relay using awk?

我正在嘗試從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

嗯,如果你只是想收集,並用它們的顯示金光閃閃繼電器領域,你可以這樣做:

/: 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中使用。

$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]}
}

每次看到一條來自記錄的行,這會將其保存在一個關聯數組中,該數組由消息的隊列ID索引。 當看到中繼線時,如果它是用於中繼的,則您對關聯的from行感興趣。 使用substr()只是這樣,您不必\\-轉義所有元字符-“ [”,“]”,“。”。 無論您是否對中繼感興趣,都會清理from數據,以便數組不會無限制地增長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM