一定期間、どのプロセスがどのウェブサイトと通信しているかを知りたいです。私が見つけたすべてのプログラム(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 -pt
1時間毎秒実行され、結果を直接保存します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名と送信されたすべてのコンテンツ(短期接続を含む)を表示できます。