コマンドのネットワークアクティビティをトレースする方法


13

コマンドのネットワークアクティビティをトレースしたいのですが、成功せずにtcpdumpとstraceを試しました。

たとえば、パッケージをインストールしている場合、または特定のサイトに到達しようとするコマンドを使用している場合、そのネットワークアクティビティ(到達しようとしているサイト)を表示したいです。

tcpdumpを使用してこれを行うことができると思います。試しましたが、システムのすべてのネットワークアクティビティを追跡しています。複数のネットワーク関連コマンドを実行していて、特定のコマンドネットワークアクティビティのみを追跡したい場合、正確な解決策を見つけるのは困難です。

それを行う方法はありますか?

更新:

ネットワークインターフェースで行われるすべてを追跡したくありません。コマンド(#yum install -y vimなど)のネットワークアクティビティを追跡したいだけです。到達しようとするサイトなど。


1
アプリケーションをネットワーク名前空間に入れてから、tcpdump / wiresharkを使用します。ここを参照してください。
Dirkt

回答:


17

簡単にするためのnetstat

netstatPIDまたはプロセス名の使用とgrepping:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

またwatch、動的更新に使用できます。

watch 'netstat -np --inet | grep "thunderbird"'

と:

  • -n:シンボリックホスト、ポート、またはユーザー名を決定しようとする代わりに、数値アドレスを表示します
  • -p:各ソケットが属するプログラムのPIDと名前を表示します。
  • --inet:raw、udp、およびtcpプロトコルソケットのみを表示します。

冗長性のためのstrace

あなたがしようとしたと述べたstraceツールをしていますが、オプションを試してみましたかtrace=network?出力は非常に冗長になる可能性があるため、いくつかのgrepが必要になる場合があります。「sin_addr」をgrepすることから始めることができます。

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

または、すでに実行中のプロセスの場合、PIDを使用します。

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

+1 netstatは、私見で最も単純で最も近いソリューションです。
-dr01

@Gohu dnfでも同じことをしました。しかし、運はありません。dnfを使用していくつかのパッケージをインストールしようとしましたが、dnfプロセスが実行されていることがわかりました(プロセス名:dnfはtopおよびps auxコマンドによる)。悲しいことに、netstat -np --inet |から出力が得られませんでした。grep "dnf"。
ブヴァネーシュクマール

straceの場合は+1。私の問題は解決しました。IPアドレスを取得できます。ご回答ありがとうございます:) @Gohu。ネットワークを介して到達するすべてのIPアドレス(ルーターIPやその他のIPなど)を提供していると思います。知っている場合、宛先IPのみを追跡できますか?
ブヴァネーシュクマール

あなたは試してみて、フィルタリングすることができますstrace唯一の維持、いくつかのより多くの出力をconnectシステムコールをして取り除くdnsと要求(ポート53):| grep connect | grep -v 'sin_port=htons(53)'
Gohu

straceのtrace-networkオプションの+1
phreed


5

sysdig カーネルのすべてのアクティビティ、またはネットワークアクティビティに限定されないシステムで実行中のいくつかのコマンドをすべて監視できます。

出力が大きくなる可能性があるため、フィルターを作成する必要があります。最も基本的なフィルターのデフォルトページは非常にわかりやすいものです。

また、のようにアプリケーションラッパーとして使用されないという利点もあり、strace非常に強力です。

Sysdigの例から

ネットワーキング

ネットワーク帯域幅の使用量に関する上位プロセスを参照してください

sysdig -c topprocs_net 

ホスト192.168.0.1と交換されたネットワークデータを表示する

バイナリとして:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

ASCIIとして:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

上位のローカルサーバーポートを参照してください。

確立された接続に関して:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

合計バイト数に関して:

sysdig -c fdbytes_by fd.sport 

トップクライアントIPを見る

確立された接続に関して

sysdig -c fdcount_by fd.cip "evt.type=accept"   

総バイト数に関して

sysdig -c fdbytes_by fd.cip 

Apacheによって処理されないすべての着信接続をリストします。

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

1

wiresharkを使用して、ネットワークインターフェイスのすべての入力および出力トラフィックをスニッフィングできます。GUIなしのオプションが必要な場合は、tsharkを使用できます。

両方のオプションを使用すると、すべてのネットワークトラフィックを確認して保存し、後で確立されたすべての接続を分析できます。


1
先ほど言ったように、ネットワーク関連のコマンドを複数実行している場合、どのコマンドがどのサイトにアクセスしているかを知るにはどうすればよいですか?
ブヴァネーシュクマール

これはより一般的な答えです。ネットワークインターフェイスのネットワークアクティビティを追跡できることは既に知っています。特定のコマンドネットワークの統計情報を追跡しています。
ブヴァネーシュクマール

コマンドが使用するポートがわかっている場合は、スニフをフィルタリングして、必要なコマンドに制限することができます。ただし、これはあなたの状況では実行できない場合があります。
リカールモリンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.