Usando o netcat para registrar o tráfego em um arquivo

1

Atualmente tenho um laptop Windows 10 conectado a um laptop Ubuntu 12.04 via Ethernet. Todo o tráfego do sistema Windows foi roteado para passar pelo laptop Linux e pela interface wireless dos sistemas Linux para o WiFi. Eu fui encarregado de configurar o sistema Linux para registrar o tráfego. Meu primeiro pensamento foi usar o Wireshark. No entanto, fui solicitado a ter os logs em um formato específico. Este é o formato de amostra que me foi dado:

GET /
Host: bing.com
Cookie: MUID=0B62F80D880C681C2DB4F14E8C0C6BC5

HTTP/1.0 301 Moved Permanently
Date: Wed, 29 Jun 2016 19:34:28 GMT
Location: http://www.bing.com/
----------------------------------------------------------

Também me perguntaram inicialmente se netcat seria apropriado. Então, depois das palavras, imaginei que o netcat era o que parecia apropriado. No entanto, nunca usei o netcat para fins de registro. Eu procurei outros métodos e tentei métodos envolvendo pipes e fifo (ambos dos quais não tenho conhecimento). Eu sempre pareço acabar com o mesmo resultado de um arquivo de saída em branco. Qualquer ajuda seria apreciada. Obrigado.

    
por CorruptedOffset 11.07.2016 / 20:26

2 respostas

0

Os "logs" que você mostra são a solicitação e a resposta HTTP. Eu não usaria nc , já que parece estar apenas adicionando mais complexidade.

Eu recomendaria usar tcpdump . Isso basicamente captura os mesmos dados que o wireshark, e você pode até mesmo analisar os despejos com o Wireshark. Se estou tentando reunir as solicitações e respostas HTTP, gosto de usar a opção -A .

Isso parece funcionar para mostrar esses cabeçalhos:

tcpdump -A -s 8000 '(port 80 or port 443) and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | awk --re-interval 'match($0,/^.{8}((GET |HTTP\/|POST |HEAD ).*)/,a){print "\n"a[1];h=2}$0~/^.{0,1}$/&&h{h--}h&&/^[A-Za-z0-9-]+: /{print}' >> your_log_file

O comando acima deve ser executado como root. Se você estiver executando como outro usuário, se desejar capturar apenas usando uma única interface, adicione -i <your_device> a tcpdump . Por exemplo:

tcpdump -i eth0 -A -s 8000 '(port 80 or port 443) and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | awk --re-interval 'match($0,/^.{8}((GET |HTTP\/|POST |HEAD ).*)/,a){print "\n"a[1];h=2}$0~/^.{0,1}$/&&h{h--}h&&/^[A-Za-z0-9-]+: /{print}' >> your_log_file
    
por 11.07.2016 / 20:54
0

O ngrep fornece os campos que você está procurando, mas você precisará de um script para garantir que a saída esteja na ordem correta (supondo que haverá solicitações / respostas sobrepostas).

link

Exemplo:

[user@host~]$ngrep -W byline -q 'HTTP'

T 172.999.999.999:65535 -> 198.41.209.136:80 [AP]
GET / HTTP/1.1.
User-Agent: Wget/1.17.1 (linux-gnu).
Accept: */*.
Accept-Encoding: identity.
Host: reddit.com.
Connection: Keep-Alive.
.


T 198.41.209.136:80 -> 172.999.999.999:65535 [AP]
HTTP/1.1 301 Moved Permanently.
Date: Sat, 13 Aug 2016 13:55:26 GMT.
Transfer-Encoding: chunked.
Connection: keep-alive.
Set-Cookie: __cfduid=9999999999999999999999999999999999999999; expires=Sun, 13-Aug-17 13:55:26 GMT; path=/; domain=.reddit.com; HttpOnly.
Location: https://www.reddit.com/.
X-Content-Type-Options: nosniff.
Server: cloudflare-nginx.
    
por 13.08.2016 / 16:20