web-dev-qa-db-ja.com

Linuxでは、どのプロセスがイーサネットパケットを送信しているかをどのように確認できますか?

私はgkrellmを実行しています。これは、私のDebian Linuxシステムの一部のプロセスが約500KB /秒をeth0に書き込んでいることを示しています。それがどのプロセスであるかを知りたいのですが。私はnetstatについて少し知っていますが、これは膨大な数のオープンTCP接続を示しており、トラフィックに関する情報を生成させることができません。

実際にsing eth0インターフェイスであるプロセスのリストを取得して、違反者を追跡できる方法を誰かが知っていますか?


[〜#〜] followup [〜#〜]:Debian Linuxディストリビューションには、この問題を確実に解決するnethogsパッケージが含まれています。あまり注目されていない関連ツールには、iftopnetstatlsofなどがあります。

18
Norman Ramsey

私は nethogs を好みます。これは、プロセスごとのネットワークトラフィックステータスを便利な方法で表示する小さなncursesベースのコンソールプログラムです。

16

netstat -ptuは、すべてのtcp接続とudp接続の所有プロセスID(および標準のnetstat情報)を提供します。 (通常のユーザーはすべてのプロセスにidを付けることができません。)

何かが一定量の一定のトラフィックを送信している場合は、それぞれRecv-QまたはSend-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によってトリガーされていると思われる場合。

18
84104

データを送受信するプロセスだけを探している場合のより手動の操作は、lsofコマンドを実行することです。これは、o.sへのファイル記述子であるため、ネットワーク接続を含む各プロセスのすべての開いているファイルをリストします。

これがあなたが探しているものかどうかわかりません。

5
gdurham

iftop(シンプルなテキストベース)またはntop(グラフィカル)をインストールします。

4
David Schwartz

tcpdumpを使用して、このインターフェース上のいくつかのパケットをスニッフィングします。

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

クライアントにコピーし、Wiresharkで開いて何が起こるかを確認します。

3
quanta