Como posso criar um arquivo de captura de pacotes em um servidor sem cabeçalho para um único processo?

1

Estou escrevendo um script python em um servidor sem cabeçalho e gostaria de ver a saída de captura de pacotes para o script.

Não consigo executar o ettercap ou o Wireshark no servidor, pois há muito outro ruído (além disso, o wireshark é uma ferramenta GUI). Eu tenho acesso ao sudo, no entanto.

Existe alguma maneira que eu possa capturar os pacotes gerados por esse script apenas? De preferência em um formato que pode ser carregado no Wireshark (não é obrigatório, no entanto, eu posso marchar pelo texto se necessário)

    
por Manishearth 03.02.2014 / 23:18

3 respostas

3

O Wireshark tem um utilitário de linha de comando. Eu usei em computadores remotos, onde eu só tinha acesso ao console, funciona muito bem. Leva apenas alguns minutos lendo os parâmetros para aprender a usá-lo.

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.
    
por 03.02.2014 / 23:36
3

Sim, você pode com iptables e dumpcap. Resumo:

# 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

Isto irá capturar todo o tráfego com o ID do processo 1000. Este comando tem que ser executado no próprio host (que é onde as informações do PID estão disponíveis).

    
por 04.02.2014 / 02:17
1

Outra opção é canalizar dumpcap de saída via SSH para o wireshark sendo executado em sua máquina local.

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

Isso abrirá uma instância do wireshark exibindo o tráfego localmente da máquina remota. Você provavelmente desejará alterar o filtro not tcp port 22 para evitar excesso de tráfego na rede.

    
por 21.11.2015 / 00:41