1

В настоящее время у меня есть ноутбук с Windows 10, подключенный к ноутбуку Ubuntu 12.04 через Ethernet. Весь трафик из системы Windows направляется через ноутбук Linux и из беспроводного интерфейса систем Linux в WiFi. Мне было поручено настроить систему Linux для регистрации трафика. Моей первой мыслью было использовать Wireshark. Однако мне было предложено иметь журналы в определенном формате. Это образец формата, который мне дали:

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/
----------------------------------------------------------

Меня также первоначально спросили, будет ли уместным netcat. Поэтому после слов я понял, что netcat - это то, что мне кажется подходящим. Тем не менее, я никогда не использовал netcat для регистрации. Я искал другие методы и пробовал методы, включающие pipe и fifo (оба из которых я не знаю). Кажется, я всегда получаю один и тот же результат с пустым выходным файлом. Любая помощь будет оценена. Благодарю.

2 ответа2

0

"Журналы", которые вы показываете, являются HTTP-запросом и ответом. Я бы не стал использовать nc как это, кажется, просто добавляет сложности.

Я бы порекомендовал использовать tcpdump . Это в основном собирает те же данные, что и Wireshark, и вы даже можете анализировать дампы с помощью Wireshark. Если я пытаюсь собрать HTTP-запросы и ответы, мне нравится использовать опцию -A .

Кажется, это работает для меня, чтобы показать эти заголовки:

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

Приведенная выше команда должна быть запущена от имени пользователя root. Если вы запускаете его как другой пользователь, или если вы хотите захватывать только с помощью одного интерфейса, обязательно добавьте -i <your_device> в tcpdump . Например:

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
0

ngrep предоставляет поля, которые вы ищете, но вам понадобится скрипт, чтобы убедиться, что выходные данные находятся в правильном порядке (при условии, что запросы / ответы будут перекрываться).

http://ngrep.sourceforge.net/usage.html

Пример:

[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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .