Pesquisei bastante por isso, mas não consigo encontrar um exemplo prático.
Meu objetivo é monitorar o tráfego TCP em uma porta específica para ver as conexões de entrada e gravá-las em um arquivo de texto. O problema é que também preciso de um carimbo de data/hora em cada linha para mostrar exatamente quando o cliente se conectou à segunda.
Já esgotei netstat, nmap e tcptrack, mas nenhum suporta carimbo de data/hora.
Eu estava pensando que um script de shell do Linux poderia funcionar se eu monitorasse uma porta local específica e escrevesse texto em um arquivo quando uma conexão fosse feita e apenas concatenar a data em cada linha.
Eu estava brincando com isso:
netstat -ano|grep 443|grep ESTABLISHED
assim como isso:
tcptrack -i eth0 port 443
mas nenhum deles atende às minhas necessidades, pois preciso do momento em que a conexão chegar.
Se você tiver alguma sugestão ou puder me indicar a direção certa, ficaria muito grato.
Obrigado. :)
Responder1
editar: Ainda estou recebendo votos positivos para isso anos depois. Por favor, não vá para esta resposta, oresponda usandoiptables
aqui é muito superior na minha opinião.
tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'
ou only tcp-syn
, ou only tcp-ack
(meu palpite seria esse), dependendo do que você precisa.
Responder2
Você pode usar o suporte iptables no kernel Linux para isso.A vantagem é que não requer nenhum software extra para ser moderadamente útil. A desvantagem é que a configuração requer privilégios de root (mas como você está falando da porta 443, que é uma porta privilegiada, provavelmente precisará de privilégios de root na maioria das soluções).
Adicione uma regra iptables com algo como:
sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "
(Ajuste a -I INPUT
peça de acordo com seu gosto.)
Quando a regra for acionada, uma entrada syslog será emitida pelo kernel. Por exemplo, com uma regra de entrada, a entrada de log pode ser semelhante a:
5 de dezembro 09:10:56 kernel do nome do host: [1023963.185332] HTTPS SYN: IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC=ABCD DST=WXYZ LEN=52 TOS=0x00 PREC=0x20 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0
Você pode então usar qualquer ferramenta comum de monitoramento de log para fazer algo útil com essas informações. Se a sua implementação de syslog suportar, você poderá até direcioná-los para um arquivo de log separado, atendendo efetivamente ao seu requisito de gravar os dados de conexão em um arquivo com carimbo de data e hora para o segundo, sem software adicional.
Observe que o LOG
alvo é um alvo sem terminação, o que significa que quaisquer regras que o sigam ainda serão avaliadas e o pacote não será rejeitado ou aceito pela própria regra LOG. Isso torna o LOG
alvo útil também para depurar regras de firewall.
Para evitar inundar seu log, considere usar o limit
módulo em conjunto com este. Consulte a página man do iptables(8) para obter detalhes.
Responder3
Resolução em microssegundos
Por padrão, otcpdumputilitário reportará o tempo com resolução de microssegundos. Por exemplo:
$ sudo tcpdump -i any port 443
mostrará uma saída semelhante à seguinte:
12:08:14.028945 IP localhost.33255 > localhost.https: Flags [S], seq 1828376761, win 43690, opções [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], comprimento 0
12:08: 14.028959 IP localhost.https > localhost.33255: Sinalizadores [R.], seq 0, ack 1828376762, vitória 0, comprimento 0
Veja tcpdump(8) para uma lista completa de opções do tcpdump, e pcap-filter(7) para a sintaxe completa dos filtros que você pode usar.
Responder4
Você pode precisar disso também para monitorar os pacotes de entrada e saída de outras máquinas.
tcpflow -i eth0 -c port 7891
(opção -i
de mencionar a rede, opção -c
de imprimir os pacotes no console)