プロセスとドメイン名でネットワークトラフィックを記録できるプログラムはありますか?

プロセスとドメイン名でネットワークトラフィックを記録できるプログラムはありますか?

一定期間、どのプロセスがどのウェブサイトと通信しているかを知りたいです。私が見つけたすべてのプログラム(ssなど)は、現在開いている接続を一覧表示してから終了します。

実際に私が望むのはWiresharkに似ていますが、プロセス名を記録することです。

本当にそのようなプログラムはありませんか?

答え1

最新のカーネル(4.9以降が望ましいが、一部の機能は4.2でも機能します)がある場合は、新しいカーネルを利用できます。このツールを使用すると、connect()カーネルのすべてのTCP呼び出しを傍受して、プロセスID、リモートIPアドレス、およびポートを表示できます。

これはポーリングしないため、一時的な接続を見逃すことはありません。ブレンデン・グレグからブログ2016年の一般的な生産量は

# tcpconnect
PID    COMM    IP SADDR            DADDR            DPORT
1479   telnet  4  127.0.0.1        127.0.0.1        23
1469   curl    4  10.201.219.236   54.245.105.25    80
1469   curl    4  10.201.219.236   54.67.101.145    80
1991   telnet  6  ::1              ::1              23
2015   ssh     6  fe80::2000:bff:fe82:3ac fe80::2000:bff:fe82:3ac 22

より多くの例は、次のサイトにあります。隠し参照ツールパック源泉。内蔵インストールパッケージはさまざまな用途に利用可能分散あるいは、コンパイルの指示に従うこともできます。

答え2

これを使用して、netstat次のようにPIDとプロセス名を持つtcp / ipトラフィックを表示できます。

netstat -pt

リアルタイム放送を視聴するには、watch -n以下のように特定の間隔を使用してください。

watch -n 2 netstat -pt

時間の経過とともにこの種の情報を収集するには、これをbashスクリプトとして保存して次のように実行します。

sec=1
count=0
end=3600

echo > output.txt

while [ $count -lt $end ]; do
        netstat -pt | sed -e '1,2d' >> output.txt
        sleep $sec
        count=$((count+1))
done

これはnetstat -pt1時間毎秒実行され、結果を直接保存しますoutput.txt

awk '{ print $7 "\t" $5 }' output.txt 

フォーマットされたPID /プロセス名とウェブサイト:プロトコルを素敵に印刷し、収集された各行ごとにタブを区切ります。

答え3

tcpdumpパケットが見えるネットワーク層では、ユーザープロセスへの接続はできません。このツールには、ネットワーク接続に関連するプロセスを一覧表示するssオプションがあります。特定の時点の情報のみが表示される-pため、頻繁に実行する必要があり、接続時間が短いと情報が失われる可能性があります。ss

送信される内容を理解するには、すべてを実行してキャプチャし、後でtcpdump取得したローカルポート番号に対してキャプチャされたパケットをフィルタリングできますss

接続は常にIPアドレスで行われるため、使用されたDNS名に関する直接情報は提供されません。ただし、後で使用した接続のIPアドレスを使用して、応答されたDNS要求のネットワークキャプチャを取得できます。これにより、同じDNS名を使用する別のDNS名に対する要求がない限り、使用されたDNS名を知ることができます。 IPアドレス。

プロセスが実行していることを実際に知りたい場合は、を使用してくださいstrace。リゾルバーに送信されたDNS名と送信されたすべてのコンテンツ(短期接続を含む)を表示できます。

関連情報