Estou tentando processar alguns arquivos pcap. Meus pcaps possuem um handshake tcp padrão para conexão e fechamento, e um ou mais pacotes interessantes enviados enquanto a conexão está aberta.
Eu preciso extrair apenas a parte de dados dos pacotes para que eu possa usar o hex como entrada para outro programa. Eu uso tcpreplay
para jogar meu pcap no loopback
tcpreplay --intf1=lo some.pcap
Usar tcpdump
parece não funcionar
tcpdump -x -i lo
exibe os dados em hexadecimal, algo como
0x0000: 4500 003a 0300 0000 4006 79bc 7f00 0001
0x0010: 7f00 0001 a7be 4e20 0000 0002 0000 0002
0x0020: 5018 8000 b9b7 0000 ffff ffff ffff ffff
Eu realmente gostaria de cortar todo o cabeçalho IP / TCP e deixar apenas
ffff ffff ffff ffff
(Neste exemplo, imagine os 8 bytes são para um protocolo F tal que os primeiros 3 bytes são o cabeçalho para F e os últimos 5 bytes são os dados para F. Eu quero processar F eu mesmo em outro programa, então Vou me referir a todos de F como "os dados". Isso cria um problema quando eu uso tshark
.
Eu não quero usar nada como strings
ou cut
, que confia no meu próprio conhecimento de quanto tempo o cabeçalho tcp será porque 1) os dados são hexadecimais, então não tem uma boa forma de usar strings
ou uma ferramenta semelhante em e 2) alguns dos cabeçalhos tcp têm opções e, portanto, o comprimento é variável e o comprimento dos dados é variável, portanto cut
ou uma ferramenta semelhante não é boa.
Eu também tentei tshark
com
tshark -r some.pcap -Tfields -e data
que não exibe nada e
tshark -r some.pcap -x
que exibe
Frame (72 bytes):
0000 06 05 04 03 02 01 01 02 03 04 05 06 08 00 45 00 ..............E.
0010 00 3a 03 00 00 00 40 06 79 bc 7f 00 00 01 7f 00 .:[email protected].......
0020 00 01 a7 be 4e 20 00 00 00 02 00 00 00 02 50 18 ....N ........P.
0030 80 00 b9 b7 00 00 ff ff ff .........
Application Layer message (5 bytes):
0000 ff ff ff ff ff
Então, o wireshark reconhece o protocolo mais interno e está "ajudando" a dividir o cabeçalho e os dados para mim ... Exceto que quero que o cabeçalho e os dados juntos sejam processados por conta própria.
Estou completamente perdido em como posso despir cabeçalhos Ether / IP / TCP e deixar apenas os dados desejados.