Como fazer upload de tcpdumps em tempo real para FTP?

2

Eu posso fazer tcpdumps com este comando:

tcpdump -w 'date +%F-%Hh-%Mm-%Ss-%N'.pcap src 10.10.10.10 or dst 10.10.10.10

Q : Eu tenho um servidor FTP com nome de usuário: FTPUSER e senha FTPPASSWORD. Como posso carregar o tcpdump em "tempo real"? Quer dizer, eu não tenho um armazenamento muito grande para armazenar os despejos, então preciso carregá-lo em um local que só posso acessar via FTP. Posso " pipe " de alguma forma a saída do tcpdump para um cliente de ftp que faz o upload? [Eu preciso preservar os nomes dos arquivos também: " date +%F-%Hh-%Mm-%Ss-%N .pcap"]

então eu estou procurando por uma solução que não armazena nenhum tcpdumps localmente, ao invés disso, ele envia os dumps em "tempo real".

O SO é o OpenWrt 10.03 - o roteador onde o tcpdump é executado. [4MB piscam no roteador, é por isso que não consigo armazená-los localmente.]

UPDATE2: não há conexão SSH com o servidor FTP, apenas FTP [e FTPES, mas isso não importa agora, eu acho]

    
por LanceBaynes 03.01.2012 / 12:18

7 respostas

1

instale o curlftpfs

opkg update; opkg install curlftpfs

crie um script que será executado após cada inicialização do roteador

vi /etc/rc.d/S99tcpdump

o conteúdo do S99tcpdump

#!/bin/ash

mkdir -p /dev/shm/something
curlftpfs FTPUSERNAMEHERE:[email protected] /dev/shm/something/
tcpdump -i wlan0 -s 0 dst 192.168.1.200 or src 192.168.1.200 -w "/dev/shm/something/tcpdump-'date +%F-%Hh-%Mm-%Ss'.pcap" &

torne-o executável

chmod +x /etc/rc.d/S99tcpdump

reinicie o roteador, aproveite.

p.s .: parece que "-s 0" é necessário porque pode haver mensagens como: "tamanho do pacote limitado ao capturar, etc." - ao carregar os arquivos .pcap no wireshark

p.s.2: verifique se a hora está correta, porque se não, o nome do arquivo de saída pode estar errado ..

    
por 04.01.2012 / 18:19
5

Com o SSH indisponível (e possivelmente nenhuma máquina UNIX / Linux em que o servidor FTP é executado, você pode usar netcat também), o seguinte pode funcionar :

Usando curl , você pode fazer upload de de STDIN para um arquivo por meio de FTP desta maneira:

tcpdump -w - | curl -u FTPUSER:FTPPASS ftp://ftpserver/where/ever/dump.pcap -T -

em que tcpdump envia pacotes brutos ( compara essa questão ) e aplica curl appends (sobrescreve? não tenho certeza) esta entrada. Não tenho certeza se isso funciona, mas vale a pena tentar.

(O registro de data e hora do arquivo curl cria é deixado como um exercício.)

    
por 03.01.2012 / 14:22
2

Dê uma olhada na opção -C para tcpdump:

   -C     Before  writing  a  raw  packet  to  a savefile, check whether 
 the file is currently larger than file_size and, if so, close the current 
 savefile and open a new one.  Savefiles after the  first savefile  will  have 
 the name specified with the -w flag, with a number after it, starting at 1 
 and continuing upward. The units of file_size are  millions  of  bytes 
 1,000,000  bytes, not 1,048,576 bytes).

Se você definir o sinalizador de tamanho como algo razoavelmente pequeno e escrever um script cron que testa a existência de novos arquivos de estouro a cada minuto, carregue os arquivos transbordados via FTP e altere o nome antes de excluí-los. deve conseguir o que você está procurando.

Esta configuração ainda seria vulnerável ao DOS se algo inundar o link mais rápido do que o seu script cron pode carregar os novos arquivos, e se você tiver alguma capacidade SSH, eu recomendo o truque ssh pipeline @Chris Green acima oferece-se.

    
por 03.01.2012 / 12:45
2

Você pode gravar a saída tcpdump em um pipe e depois salvá-la em outro lugar. Atualizei seu filtro BPF também.

tcpdump -w - host 10.10.10.10  | ssh host2 'cat - > 'date +%F-%Hh-%Mm-%Ss-%N'.pcap'

Isso gravará os pacotes em stdout e gravará em uma conexão ssh com outro host. Você também pode dar a volta e executá-lo a partir do outro host.

ssh router tcpdump -w - host 10.10.10.10 > 'date +%F-%Hh-%Mm-%Ss-%N'.pcap
    
por 03.01.2012 / 12:41
0

Eu acho que para o ftp funcionar em sincronia, ele precisa estar ciente de que existe esse fluxo de arquivo não do disco, mas do programa; além disso, poderia ser muito difícil conseguir isso.

Eu sugiro que você vá com sshfs e use ssh / sshfs para montar o sistema de arquivos remoto com as credenciais apropriadas (é um sistema de arquivos do usuário, portanto, pequenas mudanças na configuração relacionadas ao fuser no sistema, nenhuma credencial exigida) use o tcpdump que despejaria constantemente a captura do fluxo de pacotes no arquivo no sistema de arquivos montado sshfs.

Iniciantes no SSHFS:

link

link

    
por 03.01.2012 / 12:38
0

Use SMB / samba! seu roteador dd-wrt suporta: link

Uma vez que você pode ls e ver um arquivo no diretório que você configurou na sua caixa do Windows, então diga tcpdump para a saída para esse diretório:

tcpdump -n -i any -s 65535 src 192.168.2.200 and not dst port 139 -w /tmp/smbshare/capture.lpc

Você não deseja que ele monitore o tráfego na porta SMB (bloco de mensagem do servidor) ou monitore seu próprio tráfego e apenas exploda o tamanho do arquivo.

    
por 14.11.2012 / 18:18
0

Outra pequena forma é usar o netcat (embutido no busybox).

Roteador: tcpdump -w - | nc 192.168.1.110 1337

Host: nc -l -p 1337 > dump.pcap

    
por 03.08.2015 / 14:14

Tags