Показаны сообщения с ярлыком tcpdump. Показать все сообщения
Показаны сообщения с ярлыком tcpdump. Показать все сообщения

Отслеживание HTTP-взаимодействия с помощью tcpdump

Иногда нужно в консоли посмотреть, что происходит с запросами на веб-сервер, правильные ли приходят запросы, нормальные ли уходят ответы, если вообще уходят. Для таких целей есть утилита tcpdump, но она больше для работы с уровнем TCP/IP,  а для получения данных о запросах HTTP,- приходится применять определённые ключи и фильтры. Я делаю вот так:

tcpdump -i eth0 -nA -s 0 '(((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' and port 80

Широковещательная передача через атмосферу

Очередной первоапрельский RFC 6217: Regional Broadcast Using an Atmospheric Link Layer :-)

Предлагают использовать в качестве среды передачи атмосферу. В IPv4/6 слишком много лишних заголовков (Destination, TTL (Time to Live), DSCP (Diffserv Code Point), ECN (Explicit Congestion Notification), Hop Limits и т.д.). От этого всего можно отказаться. Оставим только необходимое:

      +-------------------------------+-----------------------------+
      |            Content            |           Source            |
      +-------------------------------+-----------------------------+

                     Рисунок 1: Формат датаграммы

Content - Поле переменной длины, содержащее инкапсулированные данные протоколов верхнего уровня,
Source - источник данных
В качестве источника могут выступать:
  • IP - адрес
  • номер телефона в формате E.123
  • IPv6 адрес в стандартной нотации (RFC 5952)
  • URI (RFC 3986)
  • географический адрес
  • и так далее...
Типичным примером использования такого вида связи может быть трансляция рекламных сообщений, типа такого:
 Content                          Source
   +------------------------------------------------------------+
   | Lobster Dinner - only $14.99    500 Boardwalk, Pt Pleasant |
   +------------------------------------------------------------+

                 Figure 2: Example ADVERT Datagram

Жгут ребята :-)

Мониторинг запросов к DNS-серверу

Для быстрого мониторинга запросов к DNS_серверу можно воспользоваться простым скриптом
tcpdump -n -i fxp0 -c 20 dst port 53
где fxp0 - интерфейс, на котором снимается трафик, 20,- количество пакетов для перехвата.
Необходимые опции можно узнать в man tcpdump. Там-же можно узнать о формате вывода запросов DNS:

If a query contains an answer, nameserver, or authorative section, ancount,
nscount, or arcount are printed as [na], [nn], or [nau], where 'n' is the
appropriate count.


Это позволяет показать только нужные записи, например запросы клиентов в два столбца: "IP-адрес клиента" и "запрошенный адрес", исключая запросы PTR:

tcpdump -n -i fxp0 -c 20 dst port 53 | grep -v '1au' | grep -v ".in-addr.arpa." | awk '{ print $3,$8};'

Неофициальный Мультифон

Про Мультифон не отписался только ленивый, внесу свои пять копеек: Мегафон запустил услугу "Мультифон",- голосовая связь на основе протокола SIP, с несколькими вкусными плюшками и массой недостатков. Из плюсов,- возможность настроить варианты приёма звонков,- на компьютер, на телефон или параллельно, отправка SMS и MMS с компьютера. Из минусов,- ужасный клиент и отсутствие описания настроек для подключения альтернативных SIP-клиентов (или устройств). С официальным клиентом сделать ничего нельзя, зато можно попробовать подсмотреть как он работает. Вооружаемся wireshark'ом (или tcpdump'ом):

Регистрация проводится на хосте 193.201.229.35 (sbc.megafonmoscow.ru), на первый REGISTER приходит ответ 407 Authorization Required с данными для Digest-авторизации.
Для авторизации нужно поставить realm=BREDBAND (некоторые альтернативные клиенты нормально авторизуются без шаманства). Далее идёт какой-то обмен по https с 193.201.231.53 (im.megafon.ru), вероятно, подгружается контакт-лист? Какие-то SUBSCRIBE непонятные, с этим надо разбираться. Но главное,- после того, как на REGISTER приходит 200 Ok,- уже можно звонить!

Удалённая трассировка с помощью wireshark, tcpdump и ssh

В случае, когда приходится снимать много сетевых дампов на одном и том-же сервере, а клиентская машина работает под линуксом, можно использовать полезную функцию перенаправления вывода по ssh:

ssh root@127.0.0.1 "tcpdump -i bond0 -w - -s 0" | /usr/bin/wireshark -k -i -

Для ускорения процесса можно записать эту строчку в скриптовый файл, вывести ссылку на него на рабочий стол (или прописать алиас в .bashrc) и в ssh настроить авторизацию по ключу, чтобы не вводить пароль при каждом подключении.