Eu quero usar uma regra de filtro para capturar apenas pacotes ack ou syn. Como eu faço isso?
Eu quero usar uma regra de filtro para capturar apenas pacotes ack ou syn. Como eu faço isso?
Respostas:
A sintaxe do filtro pcap usada para tcpdump deve funcionar exatamente da mesma maneira no filtro de captura do wireshark.
Com o tcpdump eu usaria um filtro como este.
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Verifique a página do manual tcpdump e preste muita atenção às tcpflags.
Verifique também as seções no Wiki do Wireshark sobre filtros de captura e exibição. Infelizmente, os dois tipos de filtros usam uma sintaxe completamente diferente e nomes diferentes para a mesma coisa.
Se você quisesse um filtro de exibição em vez do filtro de captura, provavelmente precisaria criar uma expressão combinando tcp.flags.ack e tcp.flags.syn. Porém, eu estou muito mais familiarizado com os filtros de captura, então você terá que resolver isso sozinho.
Embora a resposta do @ Zoredache seja agradável e completa, observe que essa sintaxe produzirá todos os pacotes com o sinalizador TCP SYN ou TCP ACK definido, incluindo pacotes que não sejam estritamente pacotes "TCP SYN" ou "TCP ACK", porque eles também tem outros sinalizadores definidos. Isso pode ou não ser o que você (ou futuros leitores) pretendeu. Por exemplo, essa sintaxe também captura os pacotes TCP SYN-ACK, TCP FIN-ACK etc. Se você deseja apenas pacotes TCP SYN ou TCP ACK (por exemplo, APENAS um desses sinalizadores configurados), a sintaxe apropriada do filtro de captura é:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
Equivalentemente:
'tcp[13] == 2 or tcp[13] == 16'
Felicidades!
Eu criei um script para ver os principais "sincronizadores". Para isso, considero apenas o pacote syn inicial (o primeiro pacote do handshake de três pacotes). Ou seja, syn = 1, ack = 0
while :; do
date;
tcpdump -i eth1 -n -c 100 \
'tcp[tcpflags] & (tcp-syn) != 0' and
'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
| awk '{ print $3}' \
| sort | uniq -c | sort | tail -5;
echo;
sleep 1
done
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
Avançado
Você também pode filtrar com base em partes específicas de um pacote, bem como combinar várias condições em grupos. O primeiro é útil ao procurar apenas SYN
s ou RST
s, por exemplo, e o último para isolamento de tráfego ainda mais avançado.
UAP RSF
[Dica: um anagrama para os sinalizadores do TCP: invasores não qualificados incomodam a segurança real]
sua nota: ...
Mostre-me todos os URG
pacotes URGENTES ( ) ...
tcpdump 'tcp[13] & 32 != 0'
Mostre-me todos os ACK
pacotes RECONHECIMENTO ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Mostre-me todos os PSH
pacotes PUSH ( ) ...
tcpdump 'tcp[13] & 8 != 0'
Mostre-me todos os RST
pacotes RESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
Mostre-me todos os SYN
pacotes SYNCHRONIZE ( ) ...
tcpdump 'tcp[13] & 2 != 0'
Mostre-me todos os FIN
pacotes FINISH ( ) ...
tcpdump 'tcp[13] & 1 != 0'
Mostre-me todos os SYNACK
pacotes SYNCHRONIZE / RECONHECIMENTO ( ) ...
tcpdump 'tcp[13] = 18'
[ Nota: Apenas o PSH
, RST
, SYN
, e FIN
bandeiras são exibidos na saída de campo a bandeira do tcpdump. URG
s e ACK
s são exibidos, mas são mostrados em outro lugar na saída e não no campo sinalizadores]
Eu queria obter apenas pacotes SYN, usei o seguinte comando:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Isso deve funcionar para você imediatamente.
tcpdump -s SIZE
. O cabeçalho TCP pode ter um comprimento variável; portanto, a captura-s 128
provavelmente obterá todos os cabeçalhos possíveis e talvez um pouco de dados.