给定一个外部 IP 地址和目标端口,在 Linux 中,是否有任何方法可以使用类似ngrep
或tcpdump
来识别有时会向其发送流量的进程和/或用户?或者iptables
规则?有没有推荐的方法来运行不太耗费资源的持续监控?
答案1
知道 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)
答案2
Rich Alloway——RogueWave的回答有一些有希望的建议,但每个包都有这样或那样的不足之处。我能找到的唯一能满足我所有需求的选项是系统挖掘
它有多种使用方法,例如:
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