在Linux上,如何确定哪个进程正在发送以太网数据包?


18

我正在运行gkrellm,这表明我的Debian Linux系统上的某些进程正在向eth0写入大约500KB / s。我想找出它是哪个过程。我对netstat有点了解,但是它显示了无数个开放的TCP连接,我似乎无法使其产生有关流量的任何信息。

有人知道我如何获得实际使用 eth0接口的进程列表,以便追查违规者吗?


FOLLOWUP:Debian Linux发行版包含一个可以nethogs最终解决此问题的软件包。相关的工具都不太上的标记包括iftopnetstat,和lsof


iptraf
Luv33preet

这对我来说非常适合短暂的UDP交换:serverfault.com/a/683327/119360
Luc

Answers:



18

netstat -ptu将为您提供所有tcp和udp连接的拥有的进程ID(以及标准的netstat信息)。(普通用户将无法标识所有进程。)

如果有些东西发出恒定的流量相当数量的你应该看到它Recv-QSend-Q分别列2和3。

例子:
Recv-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k2'

Send-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k3'

如果您怀疑该进程是由另一个进程触发的ps axf


(如果您知道要查找TCP连接,则不必-u标志。)
andol 2011年

5

如果您只是在寻找发送/接收数据的过程,则更手动的操作是运行lsof命令。这将列出每个进程的所有打开文件,其中包括网络连接,因为它们是os的文件描述符

不知道这是您在寻找什么。


4

安装iftop(基于简单文本)或ntop(图形)。


1
iftop仅显示接口上的带宽使用情况。
量子

它显示的远不止于此。默认情况下,按主机将其细分。
大卫·史瓦兹

它可以列出使用接口的所有进程吗?如果是这样,您能告诉我们命令和选项吗?
量子

1
不直接。但是,一旦找到主机,就可以找到进程,例如使用netstat -pn
大卫·史瓦兹

3

用于tcpdump在此接口上嗅探一些数据包:

# tcpdump -vv -s0 -i eth0 -c 100 -w /tmp/eth0.pcap

复制到客户端并使用Wireshark打开以查看会发生什么。


这不是获得简单统计信息的最简单方法,但是任何稍微复杂一点的东西都将闪耀!
Silverfire,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.