在我的办公室防火墙中,我使用如下命令:
$sudo tcpdump -v -s 1500 -i eth0 port 25 | grep 'smtp: S'
监控发送邮件的LAN客户端(我需要从某个客户端提前检测到任何可能的垃圾邮件机器人,我们有非常宽松的安全策略,这里…… :-().
到目前为止,非常好:任何客户发送电子邮件后我都会有连续输出.
$sudo tcpdump -v -s 1500 -i eth0 port 25 | grep 'smtp: S' | perl -pe 's/(.*?\)) (.*?)\.\d+ \>(.*)/$2/'
(这里我打算只得到源ip /名称),在tcpdump输出超过(bash?)缓冲区大小…之前我没有得到任何输出(或者至少我猜是这样……).
使用’sed’代替’perl’没有任何变化……
解决方法
在第一个命令之前放入stdbuf:
sudo stdbuf -o0 tcpdump ...