プロセスのネットワーク接続を表示する


25

プロセスの接続を表示する方法はありますか?そんな感じ:

show PID

これshowはこれを行うコマンドでPIDあり、プロセスのPIDです。必要な出力は、プロセスのすべての接続(リアルタイム)で構成されます。たとえば、プロセスが173.194.112.151に接続しようとすると、出力はになり173.194.112.151ます。

Firefoxのより具体的な例:

show `pidof firefox`

そして、firefoxでは、まずgoogle.comに行き、次にunix.stackexchange.comに行き、最後に192.30.252.129に行きます。ブラウザを閉じたときの出力は次のとおりです。

google.com
stackexchange.com
192.30.252.129

(明らかに、ブラウザではこの出力は現実的ではありません。他の多くの関連する接続があるためですが、これは単なる例です。)


どのUnixバリアントの下で?ほとんどの場合、これを行うツールがありますが、別のツールがあります。
ジル「SO-悪であるのをやめる」

本質的に、すべての接続のログが必要ですか?
セルギーKolodyazhnyy

tcpdumpまたはWiresharkがその仕事をするべきだと思います。
セルギーKolodyazhnyy

:これを行うにいくつかの可能な方法askubuntu.com/questions/11709/...
マーク・Plotnick

@GillesのUbuntu 14.04.3 LTS
ᴜsᴇʀ

回答:


23

あなたが探していstraceます!私はaskubuntuこの答えを見つけましたが、Unixには有効です:

新しいプロセスを開始して監視するには:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

既知のPIDで既存のプロセスを監視するには:

strace -p $PID -f -e trace=network -s 10000

それ以外の場合、それはLinux固有ですが、分離されたネットワーク名前空間でプロセスを実行し、wiresharkを使用してトラフィックを監視できます。これはおそらくstraceログを読むよりも便利でしょう:

  • テストネットワーク名前空間を作成します。

    ip netns add test
    
  • 一対の仮想ネットワークインターフェイス(veth-aおよびveth-b)を作成します。

    ip link add veth-a type veth peer name veth-b
    
  • veth-aインターフェイスのアクティブなネームスペースを変更します。

    ip link set veth-a netns test
    
  • 仮想インターフェイスのIPアドレスを構成します。

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • テスト名前空間でルーティングを構成します。

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • ip_forwardをアクティブにし、作成したネームスペースから入ってくるトラフィックを転送するNATルールを確立します(ネットワークインターフェイスとSNAT IPアドレスを調整する必要があります)。

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (必要に応じてMASQUERADEルールを使用することもできます)

  • 最後に、分析するプロセスを新しいネームスペースで実行できます。また、wiresharkも実行できます。

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    veth-aインターフェイスを監視する必要があります。


2
strace実際にはLinuxカーネルに固有であるため、すべてのUnixライクなオペレーティングシステムには有効ではありません。私が理解しているように、BSDに似たシステムには同様のユーティリティ(DTraceとトラス)があります。とにかく、良い答え(とても賛成)。Stack Exchangeへようこそ。
アンソニーG-モニカの正義

答えは正しい方向を指しているようですがstraceを調べながら出力を解釈するのに問題がありますgit fetch。OPからも要求されたように、出力に何らかのURLが含まれることを期待していました。誰か助けてもらえますか?
アンドリー

14

試してみる

lsof -i -a -p `pidof firefox`

部分的に機能します。プロセスの現在の接続の一部を出力しますが、自動的に閉じます。一部のプログラムでは、出力はこの警告のみですlsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/user/.gvfs Output information may be incomplete.
。–

-r11秒ごとに出力を繰り返し、-w警告を抑制するオプションを追加できます。
alxrem

2
これは、ある時点での接続のみを表示し、プロセスがその存続期間中に確立するすべての接続をリストするわけではありません。このコマンドをループに入れても、短命の接続は失われます。
ジル「SO-悪であるのをやめる」

質問者は、その存続期間にわたって接続を表示するように要求しませんでした。(in real-time)として解釈できfrom the point in time of tracking and forwardます。
llua

8

別のアプローチを次に示します。

ss -nap | grep $(pidof firefox)

サンプル出力:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))

1
これは、ある時点での接続のみを表示し、プロセスがその存続期間中に確立するすべての接続をリストするわけではありません。このコマンドをループに入れても、短命の接続は失われます。
ジル「SO-悪であるのをやめる」

5

で試すこともできnetstat -pます。manページから:

netstat-ネットワーク接続、ルーティングテーブル、インターフェイス統計、マスカレード接続、およびマルチキャストメンバーシップを出力します

ネットワーク接続のみを表示するには、を使用しますnetstat -tup。プロセスPIDを表示するには、rootになる必要があることに注意してください。

あなたが持っていない場合はnetstat、システム上、あなたは持っていることがありss、ほぼ正確な構文を持っています、。それからss -tup(rootとして)使用できます。


1
これは、ある時点での接続のみを表示し、プロセスがその存続期間中に確立するすべての接続をリストするわけではありません。このコマンドをループに入れても、短命の接続は失われます。
ジル 'SO-悪である停止'

1
netstat -p | grep firefox | grepのTCP
フィリップKirkbride

@Gillesこれは、ある時点で接続を確認したい人にとっては素晴らしい答えであることを意味します。私の場合は最近でした。
ホセアントニオレインステートモニカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.