在我的办公室防火墙中,我使用类似以下命令的语句:
要监控局域网客户端发送的邮件(我需要尽早检测出可能来自某个客户端的垃圾邮件机器人,我们在这里有非常宽松的安全政策... :-()。
$ sudo tcpdump -v -s 1500 -i eth0 port 25 | grep 'smtp: S'
要监控局域网客户端发送的邮件(我需要尽早检测出可能来自某个客户端的垃圾邮件机器人,我们在这里有非常宽松的安全政策... :-()。
到目前为止,情况还不错:只要有任何客户端发电子邮件,就会有持续的输出。
但是,如果我添加一些过滤器来获得更干净的输出,类似于这样:
$ sudo tcpdump -v -s 1500 -i eth0 port 25 | grep 'smtp: S' | perl -pe 's/(.*?\)) (.*?)\.\d+ \>(.*)/$2/'
我想要获取源IP/名称,但在tcpdump输出超过(bash?)缓冲区大小之前,我没有获得任何输出...(或者至少我是这样认为的...)。
使用'sed'代替'perl'也没有改变什么...
有什么提示可以连续输出过滤后的数据吗?