Por que o tcpdump não grava um arquivo pcap?

8

No processo de depuração de um bot irc de python que parece não conseguir se conectar, pensei "Eu sei, vou apenas chutá-lo e ver o que ele está fazendo". Então eu corri o tcpdump como eu costumo fazer e ele diz que é um pacote capturado, mas que na verdade não escreve o arquivo do cap.

akraut@lance ~/pcaps $ sudo tcpdump -w pyhole -s 0 "port 6667"
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C17 packets captured
17 packets received by filter
0 packets dropped by kernel
4294966881 packets dropped by interface
akraut@lance ~/pcaps $ ls -la
total 8
drwxr-xr-x 2 akraut akraut 4096 Feb  6 11:50 .
drwxr-xr-x 8 akraut akraut 4096 Feb  6 11:50 ..
akraut@lance ~/pcaps $ 
    
por akraut 06.02.2012 / 20:53

3 respostas

11

Você pode querer verificar o comportamento do tcpdump com strace, para ver se está fazendo algo estranho como o chrooting, se está no gentoo ou em outra distribuição que possa suid os binários.

    
por 06.02.2012 / 23:13
10

Ok, resolvi o mistério. Acompanhe-me enquanto nós desvendamos o TCPDump de Funtoo e o arquivo pcap do Mystery of the Missing.

Eu usei strace para ver o que está acontecendo e as linhas relevantes são:

chroot("/var/lib/tcpdump")              = 0
chdir("/")                              = 0
--- SNIP ---
open("/tmp/lol.wat", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)

Então ...

lance ~ # ls /var/lib/tcpdump/
blah  blah.cap  irc.cap  pyhole

Ei, olhe! Todos os arquivos de limite que eu tentei criar!

Depois de dar uma olhada nos flags de uso que o tcpdump é construído por padrão, eu vejo isto:

lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges

Então, por que é assim? Minha teoria é algo assim:

  1. Muitos aplicativos que interagem com o tráfego bruto da rede precisam ser executados como root.
  2. O tráfego de rede não processado tem uma grande variedade de valores válidos e inválidos no mundo real.
  3. Muitas explorações existem para esses aplicativos. (Wireshark, Ethereal, tcpdump, et al)
  4. Portanto, o tcpdump obtém acesso à interface de rede enquanto o root, se aprisiona em /var/lib/tcpdump , depois descarta privilégios de root e começa a capturar.

Como resultado, quando especifiquei ./blah ou blah , funcionou bem. Mas /tmp/blah não porque /var/lib/tcpdump/tmp não existe.

Um excelente recurso de tudo isso é: ao usar o sinalizador suid para instalar o tcpdump SetUID, você pode conceder acesso aos usuários com o grupo tcpdump sem fornecer acesso sudo ou root. Usos possíveis incluem uma caixa de captura para os engenheiros de rede ou pesquisadores.

Eu só queria que o Gentoo / Funtoo tivesse uma mensagem sobre a instalação que dizia tudo isso.

tl; dr: Gentoo / Funtoo coloca seus arquivos pcap em /var/lib/tcpdump .

    
por 07.02.2012 / 04:54
3

A sintaxe está correta: Eu apenas tentei (embora na porta 80) e ela gerou um arquivo pcap no diretório de trabalho atual, considerando as mesmas opções que você está usando.

Poderia ter algo a ver com o seu diretório pessoal, que você está tentando gravar como root (por causa do sudo)? É possível que você esteja usando diretórios base montados em NFS com raiz-squashing? sudo touch ~akraut/pcaps/foo ?

Você pode tentar escrever o pcap para / tmp / ou algo assim?

    
por 06.02.2012 / 21:39