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