Normalmente, são as opções -v
e -x
de socat
.
-v
envia os dados para stderr com alguma transformação, como o caractere CR se torna \r
para que você possa vê-lo.
-x
faz um dump hexadecimal (não é muito útil, já que não há registro de data e hora ou indicação de em que direção o tráfego descartado está fluindo).
Com -v
e -x
combinados, você recebe um tipo de dump hd
com timestamp e direção:
> 2014/03/08 08:46:23.370824 length=4 from=0 to=3
61 64 73 0a ads.
--
< 2014/03/08 08:46:23.398666 length=1371 from=0 to=1370
48 54 54 50 2f 31 2e 30 20 34 30 30 20 42 61 64 HTTP/1.0 400 Bad
20 52 65 71 75 65 73 74 0d 0a Request..
43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 Content-Type: te
[...]
Se você quer que seja despejado em um arquivo, você pode redirecionar o stderr para um arquivo e a saída de depuração redirecionada para stdout com:
socat -d -d -lf /dev/stdout -x -v 2> dump.txt \
"READLINE,history=$HOME/s.hist" \
openssl:host:port,crnl,cafile=some.ca
Você também pode convertê-lo em um pcap com text2pcap
(que vem com o wireshark) depois de um pouco de pós-processamento, usando:
{
socat -d -d -lf /dev/stdout -x -v 2>&1 >&3 3>&- \
"READLINE,history=$HOME/s.hist" \
openssl:host:port,crnl,cafile=some.ca |
awk '/^[<>]/{a=0;print $1 == "<" ? "I" : "O", $2, $3; next}
{$0 = substr($0, 1, 48);printf "%.4x %s\n",a,$0;a+=NF}' |
text2pcap -l 147 -Dnqt '%Y/%m/%d %H:%M:%S.' - dump.pcap
} 3>&1
Esse pcap usando o encapsulamento 147. Esse não é um tipo de camada de link, mas o wireshark entende isso como um encapsulamento usuário .
Em seguida, podemos dizer ao wireshark que os pacotes contêm tráfego HTTP, por exemplo:
wireshark -o 'uat:user_dlts:"User 0 (DLT=147)","http","0","","0",""' \
-o 'gui.column.format:"No.","%m","Time","%Yt",
"Direction","%Cus:frame.packet_flags_direction:0:R","Protocol","%p",
"Length","%L","Information", "%i"' -r dump.pcap
(aqui também modifica as colunas exibidas também, já que não há endereço, mas temos a direção do tráfego (fornecida por text2pcap -D
depois de convertermos o <
, >
to I
, O
)).
Você pode ver o tráfego ao vivo com wireshark
canalizando a saída text2pcap
para wireshark
com -ki -
em vez de -r dump.pcap
, mas wireshark
suporta apenas o formato antigo pcap
, não pcap-ng
, o que significa que precisamos descartar a opção -n
de text2pcap
e perderemos as informações da direção :
{
socat -d -d -lf /dev/fd/3 -x -v 2>&1 >&3 3>&- \
"READLINE,history=$HOME/s.hist" \
openssl:host:port,crnl,cafile=some.ca |
awk '/^[<>]/{a=0;print $1 == "<" ? "I" : "O", $2, $3; next}
{$0 = substr($0, 1, 48);printf "%.4x %s\n",a,$0;a+=NF}' |
text2pcap -l 147 -Dqt '%Y/%m/%d %H:%M:%S.' - - |
wireshark -o 'uat:user_dlts:"User 0 (DLT=147)","http","0","","0",""' \
-o 'gui.column.format:"No.","%m","Time","%Yt",
"Direction","%Cus:frame.packet_flags_direction:0:R","Protocol","%p",
"Length","%L","Information", "%i"' -ki -
} 3>&1