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


18

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

誰が私が実際にeth0インターフェイスを使用しているプロセスのリストを取得して犯罪者を追跡できるかを知っていますか?


フォロー:Debian Linuxディストリビューションには、nethogsこの問題を確実に解決するパッケージが含まれています。マークにはかなりありません関連のツールが含まれiftopnetstatlsof


iptraf良いです
Luv33preet

これは、非常に短命のUDP交換で機能しました:serverfault.com/a/683327/119360
リュック

回答:



18

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

何かが一定のトラフィックのかなりの量を送信している場合、あなたはそれを見るべき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


(TCP接続を探していることがわかっている場合、-uフラグは必要ありません。)
andol

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で開き、何が起こるかを確認します。


簡単な統計情報を取得する最も簡単な方法ではありませんが、少し複雑なものでもWiresharkが輝いています!
シルバーファイア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.