给定一个外部IP地址和目标端口,在Linux中,有什么办法可以使用类似ngrep或tcpdump东西来识别有时向它发送stream量的进程和/或用户? 还是iptables规则? 是否有build议的方式来运行不是太耗费资源的持续监视器?
知道IP和端口,可以使用netstat来查找哪个进程/用户与连接相关联: netstat -tunp
# netstat -tunp Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 36 192.168.42.253:22 10.0.0.7:51313 ESTABLISHED 4060/sshd: ralloway
-t选项打开TCP。 -u选项打开UDP。 -n选项打开主机,端口等的数字打印。 -p选项打开打印程序的PID和名称。
ss实用程序是netstat一个更新的替代品,在这种情况下,相同的选项返回相同的信息:
# ss -tunp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 192.168.42.253:22 10.0.0.7:51313 users:(("sshd",pid=4062,fd=3),("sshd",pid=4060,fd=3))
我不知道任何正在进行的显示器,但是你可以查看iftop,nettop,nethogs等的选项,看看它们是否适合你的需求。
-Rich Alloway(RogueWave)
Rich Alloway – RogueWave的答案有一些很有希望的build议,但是每个scheme都会以某种方式失败。 我能find满足我所有需求的唯一select是sysdig
有很多方法来使用它,例如:
sysdig -p "*%evt.num %evt.datetime %evt.cpu (%user.name) %proc.name (%thread.tid) %evt.dir %evt.type %evt.info" '(fd.rnet=1.2.0.0/16 or fd.rnet=3.4.5.0/24) and fd.rport=443' | tee outputfile