web-dev-qa-db-ja.com

単一のプロセス用にヘッドレスサーバー上にパケットキャプチャファイルを作成するにはどうすればよいですか?

ヘッドレスサーバーでpythonスクリプトを作成していますが、スクリプトのパケットキャプチャ出力を確認したいと思います。

他のノイズが多すぎるため、サーバーでettercapまたはWiresharkを実行できません(wiresharkはGUIツールです)。ただし、Sudoアクセスはあります。

そのスクリプトによってのみ生成されたパケットをキャプチャできる方法はありますか?できればWiresharkにロードできる形式で(必須ではありませんが、必要に応じてテキストを調べます)

3
Manishearth

Wiresharkにはコマンドラインユーティリティがあります。コンソールにしかアクセスできないリモートコンピューターで使用しましたが、非常にうまく機能します。使い方を学ぶためにパラメータを読むのにほんの数分かかります。

C:\Program Files (x86)\Wireshark>dumpcap.exe -h
Dumpcap 1.10.3 (SVN Rev 53022 from /trunk-1.10)
Capture network packets and dump them into a pcapng file.
See http://www.wireshark.org for more information.

Usage: dumpcap [options] ...

Capture interface:
  -i <interface>           name or idx of interface (def: first non-loopback),
                           or for remote capturing, use one of these formats:
                               rpcap://<Host>/<interface>
                               TCP@<Host>:<port>
  -f <capture filter>      packet filter in libpcap filter syntax
  -s <snaplen>             packet snapshot length (def: 65535)
  -p                       don't capture in promiscuous mode
  -B <buffer size>         size of kernel buffer in MB (def: 2MB)
  -y <link type>           link layer type (def: first appropriate)
  -D                       print list of interfaces and exit
  -L                       print list of link-layer types of iface and exit
  -d                       print generated BPF code for capture filter
  -k                       set channel on wifi interface <freq>,[<type>]
  -S                       print statistics for each interface once per second
  -M                       for -D, -L, and -S, produce machine-readable output

RPCAP options:
  -r                       don't ignore own RPCAP traffic in capture
  -u                       use UDP for RPCAP data transfer
  -A <user>:<password>     use RPCAP password authentication
  -m <sampling type>       use packet sampling
                           count:NUM - capture one packet of every NUM
                           timer:NUM - capture no more than 1 packet in NUM ms
Stop conditions:
  -c <packet count>        stop after n packets (def: infinite)
  -a <autostop cond.> ...  duration:NUM - stop after NUM seconds
                           filesize:NUM - stop this file after NUM KB
                              files:NUM - stop after NUM files
Output (files):
  -w <filename>            name of file to save (def: tempfile)
  -g                       enable group read access on the output file(s)
  -b <ringbuffer opt.> ... duration:NUM - switch to next file after NUM secs
                           filesize:NUM - switch to next file after NUM KB
                              files:NUM - ringbuffer: replace after NUM files
  -n                       use pcapng format instead of pcap (default)
  -P                       use libpcap format instead of pcapng

Miscellaneous:
  -N <packet_limit>        maximum number of packets buffered within dumpcap
  -C <byte_limit>          maximum number of bytes used for buffering packets wi
thin dumpcap
  -t                       use a separate thread per interface
  -q                       don't report packet capture counts
  -v                       print version information and exit
  -h                       display this help and exit

Example: dumpcap -i eth0 -a duration:60 -w output.pcapng
"Capture packets from interface eth0 until 60s passed into output.pcapng"

Use Ctrl-C to stop capturing at any time.
4
Vasili Syrakis

はい、iptablesとdumpcapを使用できます。 要約:

# iptables -A OUTPUT -m owner --pid-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 pid-1000.pcap

これにより、プロセスID 1000のすべてのトラフィックがキャプチャされます。これらのコマンドは、ホスト自体(PID情報が利用可能な場所)で実行する必要があります。

4
Mark Wagner

もう1つのオプションは、SSH経由でdumpcap出力をローカルマシンで実行されているwiresharkにパイプすることです。

wireshark -k -i <(ssh -l USER REMOTEHOST "dumpcap -i lo -P -w - -f 'not tcp port 22'")

これにより、リモートマシンからのトラフィックをローカルに表示するwiresharkのインスタンスが開きます。フィルタを修正することをお勧めしますnot tcp port 22ネットワーク全体に大量のトラフィックをパイプすることを防ぐため。

2
Cory Klein