回答:
実際、Wiresharkフィルターを使用する方法があります。ただし、プロセス名またはPIDで直接フィルタリングすることはできません(これらはネットワーク数量ではないため)。
まず、プロセスで使用されているプロトコルとポートを把握する必要があります(前のコメントのnetstatコマンドはうまく機能します)。
次に、Wiresharkを使用して、受信(または送信)ポートを取得したポートでフィルタリングします。これにより、プロセスの着信トラフィックと発信トラフィックが分離されます。
netstat
です。存続期間の長い接続のみをキャッチできます。:(
新しいプロセスを開始して監視するには:
strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
既知のPIDで既存のプロセスを監視するには:
strace -p $PID -f -e trace=network -s 10000
-f
「新しいプロセスに従う」ためのものです-e
フィルターを定義します-s
文字列の制限を32以上に設定します-p
接続するプロセスIDを取得します私はこのスレッドが少し古いことを知っていますが、これはあなたの一部を助けるかもしれないと思います:
カーネルで許可されている場合、単一のプロセスのネットワークトラフィックのキャプチャは、分離されたネットワーク名前空間で上記のプロセスを実行し、上記の名前空間でもwireshark(またはその他の標準のネットワークツール)を使用することで非常に簡単に実行できます。
セットアップは少し複雑に見えるかもしれませんが、一度理解して慣れると、作業が非常に楽になります。
そうするために:
テストネットワーク名前空間を作成します。
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 <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
(必要に応じてMASQUERADEルールを使用することもできます)
最後に、分析するプロセスを新しいネームスペースで実行できます。また、wiresharkも実行できます。
ip netns exec test thebinarytotest
ip netns exec test wireshark
veth-aインターフェイスを監視する必要があります。
socat
を使用できます。
--to-source
引数に使用するIPアドレスは何iptables
ですか?これは、-o
オプションに渡すインターフェイスのIPアドレス、構成するIPアドレス、または???です。私は必要ありませんマスカレードバージョンを試してみました--to-source
、ここで説明したように、それは働きました!
netstat -taucp | grep <pid or process name>
使用されているポートを含め、アプリケーションが確立している接続が表示されます。
アイデア:アプリケーションを別のIPアドレスにバインドすることは可能ですか?その場合、通常の容疑者(tcpdumpなど)を使用できます。
別のIPアドレスにバインドできないアプリケーション用のツール:
http://freshmeat.net/projects/fixsrcip
fixsrcip
発信TCPおよびUDPクライアントソケット(IPv4)をマルチホームホスト上の特定のソースIPアドレスにバインドするためのツールです
http://freshmeat.net/projects/force_bind
force_bind
特定のIPまたはポート、あるいはその両方でバインディングを強制できます。IPv4とIPv6の両方で機能します。
私は同様の問題に来ており、ここで説明されているようにNFLOGを使用して、ioerror によるこの答えに基づいてそれを整理することができました:
# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30
# dumpcap -i nflog:30 -w uid-1000.pcap
その後、他に何もしないユーザーアカウントから問題のプロセスを実行して作成できます。できれば、1つのプロセスからトラフィックを分離してキャプチャしました。
誰にでも役立つ場合に備えて、ただ投稿したかっただけです。
felahdabによる上記のすばらしい回答で説明されていることを行うCアプリケーションを作成しました。
こちらをご覧ください:nsntrace github repo
これは汚いハックですが、特定のUIDのiptablesを使用した迂回またはログターゲットのいずれかをお勧めします。例えば:
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG
また、そのログターゲットの「--log-tcp-sequence」、「-log-tcp-options」、「-log-ip-options」、「-log-uid」などを調べる価値があるかもしれません。それは、他の大量のデータを含むpcapを後処理するのに役立つだけだと思いますが。
NFLOGターゲットは、パケットにフラグを立てて、特定のタグ付きパケットをnetlinkソケットを介して選択したプロセスに送信する場合に便利です。それがwiresharkと特定のユーザーとして実行されている特定のアプリケーションで何かをハッキングするのに役立つのだろうか?
tracedumpを試すことができます-http : //mutrics.iitis.pl/tracedump
それはまさにあなたが望むことをします、あなたはそれにプロセスIDまたは実行するプログラムを与えることができます。
興味のあるプロセスをstraceで実行してみてください:
strace ping www.askubuntu.com
プロセスの実行内容に関する非常に詳細な情報を提供します。プロセスは任意のポートを任意の場所に開くことができるため、事前定義されたフィルターを使用すると、何かを見逃す可能性があります。
もう1つのアプローチは、ネットワーク上で機能が削減された仮想マシンまたはテストマシンを使用し、これにプロセスを分離して配置することです。次に、Wiresharkを使用して、そのマシンからすべてをキャッチできます。キャプチャするトラフィックが関連するものであると確信できます。
上のビルのioerrorによって答え私はあなたが使用することができます疑うiptables --uid-owner
トラフィック上のマーカーを設定し、その後、あなたはそのマーカーでのみトラフィックをキャプチャするのwiresharkを求めることができます。DSCP(差分サービスマーカー)、フローID、またはQoSマーカーを使用できる場合があります。
または、実際にこれを使用して、これらのパケットを別のインターフェイスに送信し、そのインターフェイスでのみキャプチャできます。
wiresharkバグ#1184はこの機能です。まだ実装されていません。ask.wireshark.orgの
ユーザーcmanynardからコピー
おそらくiptablesとulogは機能しますか?私は、正確なレシピがありますが、私はないということだと思う iptablesのは、かつてあなたがULOG使用することができます一致、プロセスを一致させることができます。
iptables -m owner --pid-owner $PID
Linux 2.6.14で削除されました:ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14
netstatの実行とテキストファイルへのログ記録をループするシェルスクリプトを作成できると思います。次のようなもの(非常に大まかな手順):
echo "press q to quit"
while [ <q is not pressed>]
do
`netstat -taucp | grep <pid or process name> 1>>logfile.txt`
done
私はプログラマーではないので、これを改良することはできません。しかし、ここで誰かが私が中断したところから始めて、あなたのために動くスクリプトを作成することができます。
netstat
中のマシンで単純なネットワークキャプチャフィルタを使用するだけの簡単な方法はありません。