Используем tcpdump для анализа и перехвата сетевого трафика / Хабр
Утилита tcpdump — отличный инструмент командной, который способен перехватывать и анализировать сетевой трафик. Может оказаться большим подспорьем при решении сетевых проблем. Пакеты можно сохранить в файл и анализировать позже. Рекомендуется время от времени запускать эту утилиту, чтобы следить за своей сетью.
Содержание:
- Вывод tcpdump
- Установка tcpdump
- Опции tcpdump
- Фильтры tcpdump:
- Фильтр выражений
- Фильтр портов
- Фильтр хостов
- Комбинирование фильтров
- Сохранение заголовков в файл
- Просмотр сведений о пакете
- Вывод
Вывод tcpdump
Утилита tcpdump позволяет проверять заголовки пакетов TCP/IP и выводить одну строку для каждого из пакетов. Она будет делать это до тех пор, пока не нажать Ctrl + C.
Давайте рассмотрим одну строку из примера вывода:
20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0
Каждая строка включает:
- Метка времени Unix (20: 58: 26.765637)
- протокол (IP)
- имя или IP-адрес исходного хоста и номер порта (10.0.0.50.80)
- имя хоста или IP-адрес назначения и номер порта (10.0.0.1.53181)
- Флаги TCP (Flags [F.]). Указывают на состояние соединения и могут содержать более одного значения:
- o S — SYN. Первый шаг в установлении соединения
- F — FIN. Прекращение соединения
- — ACK. Пакет подтверждения принят успешно
- P — PUSH. Указывает получателю обрабатывать пакеты вместо их буферизации
- R — RST. Связь прервалась
- Порядковый номер данных в пакете. (seq 1)
- Номер подтверждения. (ack 2)
- Размер окна (win 453). Количество байтов, доступных в приемном буфере. Далее следуют параметры TCP
- Длина полезной нагрузки данных. (length 0)
Установка tcpdump
В дистрибутивах на основе Debian tcpdump можно установить с помощью команды APT:
# apt install tcpdump -y
В дистрибутивах на основе RPM tcpdump можно установить с помощью YUM:
# yum install tcpdump -y
В RHEL 8 с использование DNF:
# dnf install tcpdump -y
Опции tcpdump
Запускать tcpdump нужно с правами root. Tcpdump включает в себя множество опций и фильтров. При запуске tcpdump без каких-либо параметров произойдет перехват всех пакетов, проходящих через интерфейс по умолчанию.
Вывести список доступных системе сетевых интерфейсов, в которых tcpdump может захватывать пакеты:
# tcpdump -D
или
# tcpdump --list-interfaces
1. eth0 2.nflog (Linux netfilter log (NFLOG) interface) 3.nfqueue (Linux netfilter queue (NFQUEUE) interface) 4.eth2 5.any (Pseudo-device that captures on all interfaces) 6.lo [Loopback]
Очень полезно для систем, в которых нет команды для вывода списка интерфейсов.
Для захвата пакетов, проходящих через определенный интерфейс, используйте -i с именем интерфейса. Если не указать имя, тогда tcpdump подберет первый обнаруженный сетевой интерфейс.
# tcpdump -i eth2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes 01:06:09.278817 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 1, length 64 01:06:09.279374 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 4761, seq 1, length 64 01:06:10.281142 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 2, length 64
- -v увеличивает количество отображаемой информации о пакетах
- -vv дает еще более подробную информацию
По умолчанию tcpdump преобразует IP-адреса в имена хостов, а также использует имена служб вместо номеров портов.
- -n Если DNS не работает или вы не хотите, чтобы tcpdump выполнял поиск имени.
# tcpdump –n
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100 04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0 04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36 04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0 04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100
- -c захватывает только набор строк, например, 5:
#tcpdump -c 5
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100 04:19:07.675497 IP 10. 0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0 04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36 04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0 04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100 5 packets captured
- -tttt для использования более удобных временных меток (по умолчанию используются временные метки Unix)
# tcpdump –tttt
2020-07-06 04:30:12.203638 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186734102:2186734138, ack 204107103, win 37232, length 36 2020-07-06 04:30:12.203910 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0 2020-07-06 04:30:12.204292 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 36:72, ack 1, win 37232, length 36 2020-07-06 04:30:12.204524 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0 2020-07-06 04:30:12. 204658 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 72:108, ack 1, win 37232, length 36
Фильтры tcpdump
Фильтр выражений
Фильтр выражений выбирает, какие заголовки пакетов будут отображаться. Если фильтры не применяются, отображаются все заголовки пакетов.
Самые распространенные фильтры :
- port
- host
- src
- dst
- tcp
- udp
- icmp
Фильтр портов
Фильт портов используется для просмотра пакетов, поступающих на определенный порт:
# tcpdump -i eth2 -c 5 port 80
23:54:24.978612 IP 10.0.0.1.53971 > 10.0.0.50.80: Flags [SEW], seq 53967733, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0 23:54:24.978650 IP 10.0.0.50.80 > 10.0.0.1.53971: Flags [S.E], seq 996967790, ack 53967734, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0 23:54:24. 978699 IP 10.0.0.1.53972 > 10.0.0.50.80: Flags [SEW], seq 226341105, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0 23:54:24.978711 IP 10.0.0.50.80 > 10.0.0.1.53972: Flags [S.E], seq 1363851389, ack 226341106, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0
Фильтр хостов
Для перехвата пакетов, приходящих или исходящих от определенного хоста. Например, IP-адрес 10.0.2.15:
# tcpdump host 10.0.2.15
03:48:06.087509 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 3862934963:3862934999, ack 65355639, win 37232, length 36 03:48:06.087806 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0 03:48:06.088087 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 36:72, ack 1, win 37232, length 36 03:48:06.088274 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0 03:48:06.088440 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P. ], seq 72:108, ack 1, win 37232, length 36
Для перехвата пакетов определенных типов протоколов. Например, icmp, на интерфейсе eth2:
# tcpdump -i eth2 icmp
04:03:47.408545 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 75, length 64 04:03:47.408999 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 75, length 64 04:03:48.408697 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 76, length 64 04:03:48.409208 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 76, length 64 04:03:49.411287 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 77, length 64
Комбинирование фильтров
Фильтры можно комбинировать с помощью операторов:
- AND
- OR
- NOT
Это позволит писать команды, которые могут более точно изолировать пакеты. Например, пакеты с определенного IP-адреса и для определенного порта:
# tcpdump -n -i eth2 src 10. 0.0.1 and dst port 80
00:18:17.155066 IP 10.0.0.1.54222 > 10.0.0.50.80: Flags [F.], seq 500773341, ack 2116767648, win 4117, options [nop,nop,TS val 257786173 ecr 5979014], length 0 00:18:17.155104 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [S], seq 904045691, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 257786173 ecr 0,sackOK,eol], length 0 00:18:17.157337 IP 10.0.0.1.54221 > 10.0.0.50.80: Flags [P.], seq 4282813257:4282813756, ack 1348066220, win 4111, options [nop,nop,TS val 257786174 ecr 5979015], length 499: HTTP: GET / HTTP/1.1 00:18:17.157366 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [.], ack 1306947508, win 4117, options [nop,nop,TS val 257786174 ecr 5983566], length 0
Если нужно перехватить все пакеты кроме ICMP, используем оператор NOT:
# tcpdump -i eth2 not icmp
Сохранение заголовков в файл
Вывод tcpdump может довольно быстро перемещаться по экрану. В таких случаях можно сохранить заголовки пакетов в файле с опцией -w. Вывод сохраняется в файлы с расширением .pcap.
Следующая команда сохраняет 10 строк вывода интерфейса eth2 в icmp.pcap.
# tcpdump -i eth2 -c 10 -w icmp.pcap
tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes 10 packets captured 10 packets received by filter 0 packets dropped by kernel
Прочитать этот файл можно с помощью опции -r
# tcpdump -i eth2 -c 10 -w icmp.pcap
reading from file icmp.pcap, link-type EN10MB (Ethernet) 05:33:20.852732 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 33, length 64 05:33:20.853245 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 33, length 64 05:33:21.852586 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 34, length 64 05:33:21.853104 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 34, length 64 05:33:22.852615 IP vagrant-ubuntu-trusty-64 > 10. 0.0.51: ICMP echo request, id 3261, seq 35, length 64
Просмотр сведений о пакете
Пока мы видели только заголовки пакетов, а для просмотра содержимого нужно использовать параметр -A. Вывод содержимого будет в формате ASCII.
С помощью опции -X можно отобразить вывод в шестнадцатеричном формате, правда, это не сильно помогает в тех случаях, когда соединение зашифровано.
# tcpdump -c10 -i eth2 -n -A port 80
23:35:53.109306 IP 10.0.0.1.53916 > 10.0.0.50.80: Flags [P.], seq 2366590408:2366590907, ack 175457677, win 4111, options [nop,nop,TS val 255253117 ecr 5344866], length 499: HTTP: GET / HTTP/1.1 E..'..@.@.%. ... ..2...P..M. uE............ .6.}.Q.bGET / HTTP/1.1 Host: 10.0.0.50 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0. 9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 If-Modified-Since: Tue, 04 Mar 2014 11:46:45 GMT
Вывод
Утилита tcpdump проста в настройке и освоении. Необходимо лишь немного разобраться с:
- выводом
- фильтрами
- опциями
После чего tcpdump станет отличным помощником в вопросах обеспечения безопасности вашей сети.
НОУ ИНТУИТ | Лекция | Анализаторы сетевых потоков
< Дополнительный материал || Лекция 14: 1234567891011
Аннотация: Устройство сети Интернет предполагает множество способов «подслушать» чужой трафик. В этой лекции рассказывается об инструментальных средствах, которые позволяют воспользоваться этими возможностями и обеспечить им достойное применение
Ключевые слова: Интернет, аналогия, LAN, коммутатор, Ethernet, сетевые компьютеры, порт, sniffer, Data Link layer, чувствительность данных, scp, sftp, перехват данных, COW, dump, stealth, windows 9x, SETUID, packet filter, packet sniffer, булевское выражение, пакетный фильтр, qualifier, DST, SLIP, RARP, маска сети, интерпретатор команд, сетевая маска, DDDS, перенаправление вывода, FQDN, разделение пакетов, NOP, hierarchy, Berkeley DB, фальсификация, post office protocol, internet message access protocol, CVS, режим отладки, аппаратный адрес, AOL, instant messenger, IRC, ICQ, MSN, SSL-сертификаты, степень доверия, exploit, ложная тревога, внешняя база данных, vulnerability, preprocessor, port scanning, дефрагментация, CSV, demarcation, ACID, структурный анализ
intuit.ru/2010/edi»>Вы когда-либо задумывались о величине трафика, который интернет пропускает в течение каждого дня? Большинство людей сравнивают трафик в интернете с трафиком на скоростной магистрали крупного города, но это — не слишком точная аналогия. В то время как по скоростным магистралям люди и объекты обычно перемещаются от источника к месту назначения, интернет скорее напоминает сотни тысяч людей, находящихся на переполненной арене и обменивающихся друг с другом сообщениями. В действительности, когда вы подключаетесь к хосту в интернете, ваши данные редко идут непосредственно от вашего компьютера к компьютеру-адресату. Данные фактически пересекают несколько «промежуточных» пунктов, таких как маршрутизаторы, шлюзы, мосты и брандмауэры. Все эти устройства обрабатывают ваше сообщение, но так как сообщение адресовано не им, то предполагается, что они просто пропускают его.Даже когда оба компьютера находятся в локальной сети (LAN), они не могут пропускать сообщения непосредственно друг другу. Например, если в локальной сети используется коммутатор, ваше сообщение должно быть послано непосредственно получателю и больше никому другому. Коммутаторы сетей Ethernet обладают достаточным интеллектом и определяют, MAC-адрес какого сетевого компьютера связан с каждым портом.
Но если в вашей сети используются хабы, то они не столь умны. Они не знают, какая машина связана с каким портом, поэтому они передают сообщение всем портам, надеясь, что истинный получатель сам о себе заявит и скажет: «О, это я». Другие порты, как предполагается, игнорируют сообщение, так как оно им не предназначено, но, тем не менее, они могут его слышать. Даже коммутаторы часто имеют, по крайней мере, один порт, сконфигурированный для получения копии каждого сообщения, которое ходит в округе (обычно, для административного контроля). Это означает, что возможности подслушивания или перехвата ваших сообщений другими людьми существуют в изобилии. В этой лекции рассказывается об инструментальных средствах, которые позволяют воспользоваться этими возможностями и обеспечить им достойное применение.
Обзор анализаторов сетевых потоков
Анализатор сетевых потоков ( Sniffer ) может слушать и записывать любые необработанные данные, которые проходят через или мимо физического (аппаратного) сетевого интерфейса. Они работают на очень низком уровне (то есть на уровне ядра или приложения уровня операционной системы), так, чтобы они могли связываться непосредственно с сетевым интерфейсом на понятном ему языке. Например, анализатор сетевого потока может приказать сетевому адаптеру (NIC) посылать ему копию каждого отдельного фрейма Ethernet, который прибывает на интерфейс независимо от того, чем этот фрейм является или куда он идет.
Поскольку анализатор сетевых потоков работает на канальном уровне (Data Link Layer) модели OSI, он не должен играть по правилам каких-либо протоколов более высокого уровня. Он обходит механизмы фильтрации (адреса, порты, сообщения и так далее), которые драйверы Ethernet и стек TCP/IP используют при интерпретации данных, приходящих «по проводу». Анализатор сетевых потоков захватывает из провода все. Он может хранить Ethernet-фреймы в двоичном формате и затем позже расшифровывать их, чтобы раскрыть информацию более высокого уровня, скрытую внутри.
Как и многие другие средства защиты, анализаторы сетевых потоков приобрели своего рода мистические свойства. Каждый о них слышал и осознает их мощь, но многие люди за пределами сообщества сетевой защиты думают, что анализаторы сетевых потоков относятся к черной магии, которая используется только хакерами, ворами и другими хулиганами. Анализаторы сетевых потоков в действительности представляют собой просто еще один инструмент (многие из них доступны для загрузки свободно — любому). Да, они могут использоваться для того, чтобы завладеть информацией и паролями, которые вам не принадлежат, но их можно также использовать для диагностики сетевых проблем или точного определения дефектной части IP-подключения.
ru/2010/edi»>Одна из причин, по которой анализаторы сетевых потоков стали не так опасны, как раньше, состоит в том, что теперь наиболее важные данные зашифрованы. Открытые, незашифрованные службы быстро исчезают из интернета. Люди, которые имели обыкновение использовать утилиту telnet для доступа к учетным записям командного интерпретатора shell при проверке своей электронной почты (то есть посылающие свои пароли открытым, нешифрованным текстом, который могут видеть все промежуточные маршрутизаторы, хабы и коммутаторы), теперь используют протокол Secure Shell (SSH), который шифрует каждую часть «telnet-подобного» сеанса. Люди, которые теперь заходят на Web-сайты, делают это по протоколу SSL (Secure Sockets Layer), который выполняет для Web-трафика то же, что SSH для telnet. Вместо посылки чувствительных данных (а также удостоверений для входа в систему) по FTP, пользователи используют SSL в таких программах, как Secure Copy (безопасное копирование) (scp) или Secure FTP (защищенный FTP) (sftp). Для других служб, которые не предлагают шифрование по умолчанию, могут использоваться виртуальные частные сети (VPN), чтобы установить поточечное шифрование между хостом клиента и удаленным шлюзом.Итог такой: анализаторы сетевых потоков существуют, и мы знаем, что люди собираются злоупотреблять ими. Это ничем не отличается от прослушивания чужого телефона, наблюдения за чьей-либо комнатой или простого подслушивания разговора. Народ сует свой нос в ваши дела на регулярной основе. Вы должны принимать это во внимание. Если вы все еще передаете важные данные (Web-серфинг и загрузку общедоступной информации обычно можно делать открытым текстом) по интернету не зашифрованными, значит, вы заслуживаете то, что имеете.
Беспокоясь о возможности злонамеренного использования анализаторов сетевых потоков, помните следующее.
- Чтобы представлять какую-либо угрозу для вашей сети, анализаторы сетевых потоков должны находиться в вашей локальной сети или на известной посреднической точке (типа главного маршрутизатора) в интернете.
- Сегодняшние стандарты шифрования делают чрезвычайно трудным перехват чего-либо, имеющего отношение к делу, если вы действительно используете шифрование.
Переключаемые сети еще более затрудняют (но не делают невозможным, благодаря таким инструментальным средствам, как dsniff ) внутренним пользователям перехват данных в вашей сети без обнаружения перехвата.
Даже в этом случае, вероятно, не стоит опасаться анализаторов сетевых потоков. Да, они действительно могут помочь хакерам украсть жизненно важную информацию, но существует много методов и инструментальных средств, предназначенных для противодействия этому. Считайте анализаторы сетевых потоков просто одним из инструментов, понятным и простым, и посмотрите, какую пользу могут дать этически и морально благонадежные применения анализаторов в нашей повседневной жизни.
Дальше >>
< Дополнительный материал || Лекция 14: 1234567891011
Руководство по tcpdump
Дата: 15. 09.2020. Автор: Игорь Б. Категории: Статьи по информационной безопасности
В этой статье подробно рассказывается о tcpdump. Это мощный инструмент командной строки для анализа сетевых пакетов. Tcpdump помогает устранять неполадки в сети, а также анализировать работу некоторых инструментов безопасности.
Введение
Tcpdump был первоначально разработан в 1988 году Van Jacobson, Sally Floyd, Vern Paxson и Steven McCanne. Они работали в исследовательской группе Lawrence Berkeley Laboratory Network.
Инструмент дает своим пользователям возможность отображать TCP / IP и другие пакеты, принимаемые и передаваемые по сети. Он работает на большинстве операционных систем на базе Linux. Инструмент использует библиотеку libpcap для захвата пакетов. Она является библиотекой на основе C/C++. Tcpdump также имеет версию для Windows. Она называется Windump. Этот инструмент использует winpcap для своей библиотеки.
Доступные функции
Человек может использовать следующий параметр для печати строк tcpdump и libpcap. Кроме того, он способен распечатать сообщение об использовании инструмента, в котором указаны все доступные параметры.
tcpdump -h tcpdump --help
Список интерфейсов
Интерфейс — это точка соприкосновения компьютера и сети. Человек может использовать следующий параметр для печати списка сетевых интерфейсов, доступных в системе. Он также способен обнаруживать интерфейсы, на которых tcpdump может захватывать пакеты. Каждому сетевому интерфейсу присваивается номер. Это число можно использовать с параметром «- i» для захвата пакетов на конкретном интерфейсе.
Может возникнуть ситуация, когда машина, с которой работает пользователь, не способна перечислить сетевые интерфейсы, на которых она функционирует. Это проблема совместимости, препятствующая выполнению некоторых конкретных команд (ifconfig-a).
tcpdump –list-interface tcpdump -D
Захват по умолчанию
Прежде чем перейти к расширенным опциям и параметрам этого инструмента захвата сетевого трафика, стоит осуществить захват с конфигурациями по умолчанию.
tcpdump
Захват трафика конкретного интерфейса
Пользователь будет захватывать трафик с помощью сети Еthernet, которая известна как «eth0». Этот тип интерфейса обычно соединяется с сетевым кабелем категории 5.
Для выбора этого интерфейса нужно использовать параметр «-i».
tcpdump -i eth0
Количество пакетов
Tcpdump обладает некоторыми удивительными функциями, которые пользователь может использовать, чтобы сделать свой анализ трафика более эффективным. Он способен получить доступ к некоторым из этих функций, используя различные параметры. Человек использует параметр «-c», который поможет ему захватить точное количество данных, которые нужны, и отобразить их. Так будет уточняться объем данных, которые захватил пользователь.
tcpdump -i eth0 -c10Verbose mode
Verbose mode предоставляет человеку информацию о сканировании трафика. Например, время жизни (TTL), идентификацию данных, общую длину и доступные опции для IP-пакетов. Он позволяет также проводить дополнительные проверки целостности пакетов, такие как проверка заголовков IP и ICMP.
Чтобы получить дополнительную информацию с помощью сканирования, нужно использовать параметр «-v».
TCPDump предоставляет нам множество параметров, которые cвязаны с этим режимом, например -v, -vv, — vvv, где каждый из них имеет свою уникальную функцию.
- параметр v — это традиционный режим;
- параметр -vv – это уже чуть больше, чем простой традиционный режим, дополнительные поля печатаются из ответных пакетов NFS (Network File System), а SMB-пакеты полностью декодируются;
- параметр -vvv способен обеспечить функционал tenet.
tcpdump -i eth0 -c 5 -v
Печать каждого пакета в формате ASCII
ASCII — это аббревиатура стандарта американского кода для обмена информацией. Это стандарт кодирования символов для связи по сети. Коды ASCII представляют собой текст на компьютерах и других устройствах. Большинство современных методов кодирования символов были основаны на кодах ASCII. Чтобы напечатать каждый пакет в коде ASCII, нужно использовать параметр «-a».
tcpdump -i eth0 -c 5 -A
Не стоит преобразовывать адрес
С помощью параметра tcpdump «-nn» человек может видеть фактический фоновый адрес без каких-либо фильтров. Эта функция помогает лучше понимать чистый трафик данных.
tcpdump -i eth0 -c 5 tcpdump -i eth0 -c 5 -nn
Фильтр портов
Фильтр портов помогает анализировать трафик данных конкретного порта. Таким образом, пользователь отслеживает порты назначения TCP / UDP или другие сетевые протоколы на основе этих портов.
tcpdump -i eth0 -c 5 -v port 80
Фильтр хостов
Этот фильтр помогает человеку проанализировать трафик данных конкретного хоста. Он также позволяет придерживаться определенного хоста, благодаря которому анализ становится еще лучше. Кроме того, можно применить несколько параметров, таких как «-v, -c, -а, -n», чтобы получить дополнительную информацию о хосте.
tcpdump host 104. 28.6.89 -c10 -A -n
Заголовок каждого пакета
Заголовок содержит все инструкции для отдельных пакетов о переносимых ими данных. Эти инструкции могут быть длиной пакета, рекламой, синхронизацией, кодом ASCII, шестнадцатеричными значениями. Человек способен использовать параметр «-х», чтобы увидеть эту информацию, хранящуюся в пакетах данных.
tcpdump -i eth0 -c 3 -X
Порядковый номер TCP
Все байты в TCP-соединениях имеют порядковый номер, который является случайно выбранным начальным порядковым номером (ISN). SYN-пакеты имеют один порядковый номер, поэтому данные будут начинаться с ISN+1. Порядковый номер — это номер байта данных в пакете TCP, который передается дальше. Параметр «-s» используется для просмотра этих сегментов данных захваченных пакетов.
tcpdump -i eth0 -nnXS
Фильтр пакетов
Еще одна функция, предоставляемая tcpdump, — это фильтрация пакетов. Это помогает видеть результаты пакетной обработки конкретного пакета данных в сканировании. Если человек хочет применить этот фильтр в его сканировании, нужно просто добавить нужный пакет.
tcpdump -i eth0 icmp -c 10
Пакеты данных
Для определения направления потока данных в трафике человек может использовать следующий параметр:
tcpdump -i eth0 icmp -c 5 -Q in
Для просмотра всех запросов, которые человек отправляет на сервер, можно использовать следующий параметр (- Q out):
tcpdump -i eth0 icmp -c 5 -Q out
Функция «Live number count»
Человек также может включить функцию подсчета живых номеров, чтобы увидеть, сколько пакетов было отсканировано или захвачено во время сканирования трафика данных. Параметр «-number» используется для подсчета количества пакетов, захваченных при сканировании в живом режиме. Пользователь сравнивает количество пакетов с количеством активных номеров, чтобы оценить точность анализа.
Чтение и запись файла
С помощью tcpdump человек может читать и записывать файл расширения pcap. Write (- w) позволяет записывать необработанные пакеты данных, которые пользователь отправляет в качестве выходных данных в стандартный файл расширения pcap. Где опция read (- r) помогает прочитать этот файл. Чтобы записать выходные данные в файл .pcap, следует сделать следующее:
tcpdump -i eth0 icmp -c 10 -w file.pcap
Чтобы прочитать этот файл, пользователю нужно ввести:
tcpdump -r file.pcap
Длина снимка
Длина моментального снимка / snaplen считается байтами данных из каждого пакета. По умолчанию этот параметр установлен на 262144 байта. С помощью tcpdump пользователь способен настроить этот предел в соответствии с его требованиями, чтобы лучше проанализировать результат. Параметр «-s» помогает сделать это.
tcpdump -i eth0 icmp -s10 -c2 tcpdump -i eth0 icmp -s25 -c2 tcpdump -i eth0 icmp -s40 -c2 tcpdump -i eth0 icmp -s45 -c2
Dump mode
Dump mode имеет несколько параметров, таких как -d, -dd, -ddd. Где -D параметр сбрасывает скомпилированный соответствующий код в читаемый вывод, -DD параметр сбрасывает код в виде фрагмента программы на языке C, параметр -DDD сбрасывает дампы кода в виде десятичного числа с подсчетом. Чтобы увидеть эти результаты в сканировании, нужно ввести следующее:
tcpdump -i eth0 -c 5 -d tcpdump -i eth0 -c 5 -dd tcpdump -i eth0 -c 5 -ddd
Заголовок канального уровня
Tcpdump предоставляет возможность продемонстрировать заголовки каждого пакета данных на уровне каналов. Человек использует параметр «-e», чтобы получить эту информацию в результате имеющегося трафика данных. Как правило, используя этот параметр, человек получает MAC-адрес для таких протоколов, как Ethernet и IEEE 802.11.
tcpdump -i eth0 -c5 tcpdump -i eth0 -c5 -e
Анализ синтаксиса и печать
Как все знают, разговор конкретного синтаксиса с абстрактным синтаксисом называется синтаксическим анализом. Разговор абстрактного синтаксиса с конкретным синтаксисом называется распаковкой или печатью. Теперь для разбора пакета данных пользователь может использовать параметр «-x», а для вывода абстрактного синтаксиса – параметр «-xx». В дополнение к печати заголовков каждого пакета данных, человек также может распечатать пакет в шестнадцатеричном формате вместе с его snaplen.
tcpdump -i eth0 -c 2 -x tcpdump -i eth0 -c 2 -xx
Если пользователь хочет, чтобы эта информация предоставлялась ему с помощью параметра «-x» вместе с ее ASCII-кодом, то нужно использовать как раз его, а если он желает получить результаты параметра «-xx» вместе с их ASCII-кодами, то его нужно применить. Чтобы использовать эти параметры в анализе данных, человеку следует ввести следующие команды:
tcpdump -i eth0 -c 2 -X tcpdump -i eth0 -c 2 -XX
Сканирование пользователя
Если пользователь запускает tcpdump как root, то перед открытием любого сохраненного файла для анализа он заметит, что файл изменяет ID пользователя на пользователя, а идентификаторы групп — на основную группу своих пользователей.
Tcpdump включает в себя параметр -Z, с помощью которого человек может справиться с этой проблемой, но ему нужно указать имя пользователя следующим образом:
tcpdump -i eth0 -c 2 -Z root tcpdump -i eth0 -c 2 -Z kali
Есть еще один способ сделать это с помощью параметра «–relinquish-privileges=».
Точность временных меток
Метка времени — это время, зарегистрированное в файле, журнале или уведомлении, которые могут записывать, когда данные добавляются, удаляются, изменяются или передаются. В tcpdump есть множество параметров, которые связаны со значениями временных меток. Среди них: -t, -tt, -ttt, -tttt, -ttttt, где каждый параметр имеет свою уникальную функцию и значение.
- параметр -t отключает печать метки времени на каждой строке дампа;
- параметр -tt ставит метку времени за несколько секунд;
- параметр -ttt способен включить печать разрешения за микросекунды или наносекунды в зависимости от точности временной метки между текущей и предыдущей строкой на строке дампа. Здесь микросекунда — это разрешение по умолчанию;
- параметр -tttt дает возможность печатать метку времени в виде часов, минут, секунд и долей секунды;
- параметр -ttttt очень похож на -ttt; он может установить временной промежуток между текущей и первой строкой на каждой линии дампа.
Чтобы применить эти функции в сканировании, нужно выполнить следующие команды:
tcpdump -i eth0 -c 2 tcpdump -i eth0 -c 2 -t tcpdump -i eth0 -c 2 -tt tcpdump -i eth0 -c 2 -ttt tcpdump -i eth0 -c 2 -tttt tcpdump -i eth0 -c 2 -ttttt
Форсирование пакетов
В tcpdump пользователь может принудительно сканировать трафик данных, чтобы просмотреть какой-то конкретный протокол. При использовании функции «force packet» человек способен интерпретировать указанный тип. С помощью параметра «-t» пользователь может увидеть в пакетах данных только нужные ему результаты протокола.
Основной синтаксис всех пакетов force останется таким же, как и другие параметры «-t», за которыми следует нужный протокол. Ниже приведены некоторые протоколы форсирования пакетов:
RADIUSОн подходит для удаленного доступа, включает в себя службы проверки подлинности пользователей. Это сетевой протокол, который имеет свой уникальный номер порта 1812 и обеспечивает централизованную аутентификацию наряду с авторизацией и управлением учетными записями для своих пользователей. Они подключаются и используют сетевые службы. Пользователь может использовать этот протокол для сканирования.
tcpdump -i eth0 -c5 -T radiusAODV
Протокол Adhoc On-demand Distance Vector — это протокол маршрутизации для мобильных и других беспроводных сетей. Этот протокол маршрутизации используется для получения низкой скорости передачи данных в беспроводных сетях. Чтобы увидеть эти результаты в сканировании, следует сделать следующее:
tcpdump -i eth0 -c5 -T aodvRPC
Remote procedure call – это протокол, который одна программа может использовать для запроса обслуживания для другой программы, расположенной на ином компьютере в сети, без необходимости разбираться в деталях соединения. Вызов процедуры также известен как вызов функции. Для получения этого протокола в сканировании следует использовать следующую команду:
tcpdump -i eth0 -c5 -T rpcCNFP
Протокол Cisco NetFlow — это сетевой протокол, разработанный компанией Сisco для сбора и мониторинга сетевого трафика, потока данных, генерируемых маршрутизаторами и коммутаторами с поддержкой NetFlow. Он экспортирует статистику трафика по мере ее записи, которая затем коллекционируется и сохраняется с помощью его сборщика. Чтобы получить этот протокол, следует выполнить следующее:
tcpdump -i eth0 -c5 -T rpcLMP
Протокол Link Management предназначен для облегчения настройки и управления оптическими сетевыми устройствами. Чтобы понять работу LMP в сети, нужно применить этот протокол в сканировании.
tcpdump -i eth0 -c5 -T lmpPGM
Pragmatic general multicast – это надежный транспортный протокол многоадресной сети. Он может обеспечить постоянную последовательность пакетов для нескольких получателей одновременно. Что еще больше делает его пригодным для передачи файлов нескольким приемникам. Чтобы понять его работу в трафике данных, следует выполнить:
tcpdump -i eth0 -c5 -T pgmRTP
Протокол Real-time application может кодировать мультимедийные потоки данных, такие как аудио или видео. Он делит их на пакеты и передает по IP-сети. Чтобы проанализировать этот протокол в трафике, нужно ввести данную команду:
tcpdump -i eth0 -c5 -T rtpRTCP
Протокол Real-time application control обладает всеми возможностями RTP наряду с дополнительными функциями. С помощью них человек может контролировать его работу в сетевой среде. Чтобы понять работу этого протокола в трафике данных, следует применить следующие команды:
tcpdump -i eth0 -c5 -T rtcpSNMP
Протокол Simple Network Management – это стандартный протокол Интернета для сбора и организации информации об управляемых устройствах в IP-сетях с целью изменения этой информации для корректировки поведения устройств. Чтобы увидеть его работу в трафике, нужно ввести эту команду:
tcpdump -i eth0 -c5 -T snmpTFTP
Протокол Trivial File Transfer — это простой протокол передачи файлов lockstep, который позволяет своим клиентам получить файл с удаленного хоста. Он используется на ранних стадиях загрузки узла из локальной сети. Чтобы понять его трафик, необходимо выполнить эту команду:
tcpdump -i eth0 -c5 -T tftpVAT
Visual Audio Tool был разработан Van Jacobson и Steven McCanne. Это электронный носитель, обрабатывающий как звуковые, так и видео файлы. Чтобы понять его пакеты данных в трафике, нужно ввести эти команды:
tcpdump -i eth0 -c5 -T vatWB
Эта программа позволяет своим пользователям рисовать и печатать сообщения на холсте. Все должно быть синхронизировано для других пользователей, которые находятся в той же сети. Новые пользователи также должны получить все, что уже было оставлено на доске, когда они подключаются. Чтобы понять ее пакеты данных, следует выполнить следующую команду:
tcpdump -i eth0 -c5 -T wbVXLAN
Virtual Xtensible Local Area Network – это технология в сфере сетевой виртуализации, с помощью которой человек пытается решить проблемы масштабируемости, связанные с большой областью облачных вычислений. Этот предлагаемый протокол инкапсуляции третьего уровня облегчит сетевым инженерам масштабирование облачных вычислений. Чтобы понять, что представляет его трафик, надо выполнить следующие команды:
tcpdump -i eth0 -c5 -T vxlan
Это всего лишь некоторые из протоколов, которые используются в параметре forced packets для получения фиксированного желаемого трафика данных после сканирования.
Promiscuous ModeВ сети Promiscuous Mode используется в качестве контроллера интерфейса, который заставит tcpdump передавать трафик, что он отправляется сразу на компьютер.
Чтобы настроить этот режим, следует выполнить данные команды:
ifconfig eth0 promisc ifconfig eth0
После включения Promiscuous Mode в сети надо захватить некоторые пакеты, применив эти команды:
tcpdump -i eth0 -c 10
Отключение
Promiscuous ModeВ предыдущей главе читатели узнали о Promiscuous Mode, который означает, что сетевая интерфейсная карта будет передавать все полученные данные в ОС для обработки. По сравнению с традиционной операцией, когда в ОС будут передаваться только данные, связанные с MAC-адресом сетевой карты. Как правило, Promiscuous Mode используется для снифинга трафика. Но если человек хочет переключиться в режим многоадресной рассылки, нужно использовать параметр «-no-promiscuous-mode», который поможет ему добиться желаемого.
tcpdump -i eth0 -c 5 --no-promiscuous-mode
Сведения о версии
Стоит начать с одной из самых простых команд, чтобы читатели могли понять и связать все практические действия. Человек может использовать данный параметр для печати строк tcpdump, libpcap и OpenSSL.
tcpdump --versionQuick Mode
Если скорость сети очень медленная, выполнение любой операции займет больше времени, чем обычно. Человек, который разработал tcpdump, подумал об этой проблеме и предоставил пользователям способ ускорить процесс с помощью параметра «-q». Там образом, будет печататься меньше информации о протоколах и пакетах данных, чтобы сэкономить время.
tcpdump -i eth0 -c 5 tcpdump -i eth0 -c 5 -q
Запросы HTTP
Как известно, HTTP-запросы — это информационное сообщение от клиента к серверу по протоколу передачи гипертекста (HTTP). Существуют различные методы для доставки этой информации. Эти способы чувствительны к регистру и всегда упоминаются в верхней его части. С помощью tcpdump пользователь может захватить эти запросы для анализа трафика, отправленного по указанному протоколу.
Метод, который мы можем исследовать с помощью tcpdump, состоит в следующем:
GET — это запрос, который используется для получения информации с сервера по заданному URL-адресу.
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
POST — это запрос, который используется для отправки данных на сервер. Например, информация о клиентах, загрузке файлов и использовании HTML-форм. Трафик по этому протоколу можно проанализировать с помощью следующей команды:
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
Request-URL – это единый идентификатор ресурса, который идентифицирует ресурс, к которому нужно применить запросы. Наиболее распространенная форма используется для идентификации ресурса на сервере. Если клиент хочет получить данные непосредственно с сервера, откуда они были взяты, то он создаст соединение с портом 80 хоста и отправит запрос. Эти запросы можно перехватить с помощью следующих команд:
tcpdump -v -n -l | egrep -i "POST /|GET /|Host:"Агент пользователя
С помощью TCPDump человек также может увидеть, какой трафик генерируется из какого приложения. Он способен найти пользовательские агенты в трафике данных с помощью следующей команды:
tcpdump -nn -A -s150 -l | grep "User-Agent:"
Диапазон портов
Некоторые фильтры портов помогают анализировать трафик на конкретном порту. Но в tcpdump пользователь устанавливает диапазон портов, через которые он может отслеживать назначение TCP/UDP или других сетевых протоколов.
tcpdump -i eth0 portrange 21-80
Назначение
Чтобы проверить поток данных в сетевом трафике к определенному месту назначения, следует использовать следующую команду:
tcpdump -i eth0 dst google. com
Источник
Чтобы проверить трафик данных, поступающий из определенного источника, можно ввести следующую команду:
tcpdump -i eth0 src google.com
Сеть
Чтобы найти пакеты, связанные с определенной сетью, пользователь может использовать следующую функцию для анализа трафика:
tcpdump net 192.168.0.1 -c5
Пакеты TCP
TCP-пакет — это формат, состоящий из таких полей, как исходный порт и поле порта назначения. С помощью этих полей пользователь может идентифицировать конечные точки соединений, а также захватить эти TCP-пакеты в различных форматах флагов, то есть SYN, RST и ACK.
SYN-флаг известен как тот, который синхронизирует порядковые номера для инициирования TCP-соединения. Пользователь может захватить этот конкретный пакет из трафика с помощью tcpdump.
tcpdump 'tcp[tcpflags] == tcp-syn'
RST-флаг известен как флаг сброса. Этот флаг передается от получателя к отправителю, если пакет отправляется определенному хосту, который его там ждет. Первый флаг используется, чтобы восстановить соединение конечных точек TCP. Пользователь может захватить этот флаг из трафика данных с помощью tcpdump.
tcpdump 'tcp[tcpflags] == tcp-rst'
ACK-флаг известен как флаг подтверждения. Этот флаг используется для подтверждения того, что пакет данных успешно получен. Пользователь может захватить эти флаги с помощью tcpdump для изучения трафика данных.
tcpdump 'tcp[tcpflags] == tcp-ack' -c5Tcpdump и Wireshark
Единственное различие между Wireshark и TCPDump заключается в том, что Wireshark — это графический интерфейс пользователя, а tcpdump — инструмент командной строки. Но с помощью нескольких источников пользователь использует команду tcpdump и просматривает результаты своего трафика данных в Wireshark, что, по мнению автора, является лучшим способом анализа трафика. Это можно сделать с помощью следующей команды:
ssh root@remotesystem 'tcpdump -c20 -nn -w - not port 22' | wireshark -k -i –
После выполнения этой команды человек немедленно откроет Wireshark и получит подробную информацию о сканировании. Нужно нажать на кнопку «OK», чтобы двигаться дальше.
После этого инструмент спросит, из какого сетевого интерфейса пользователь хочет захватить пакеты данных. В данном случае это будет eth0, поэтому человек выбирает именно этот сетевой интерфейс.
После окончания всех формальностей появится экран захвата данных в реальном времени.
Выполнив все эти шаги, пользователь может запустить команду tcpdump и записать ее результаты в Wireshark.
Важно! Информация исключительно в учебных целях. Пожалуйста, соблюдайте законодательство и не применяйте данную информацию в незаконных целях.
Понимание tcpdump/windump. Итак, у меня было это задание на tcpdump… | by Shwetabh Dixit
Итак, у меня было это задание на tcpdump, и когда я начал исследовать его, я обнаружил, что мне трудно понять, как именно он работает, что показывает вывод и чем он полезен. Это моя попытка дать себе и всем остальным некоторую ясность в этом процессе. Тогда давайте продолжим.
Итак, базовое определение tcpdump —
«tcpdump — обычный анализатор пакетов. Он позволяет отображать пакеты TCP/IP и другие пакеты, передаваемые по сети, к которой подключен компьютер.
Кроме того, это бесплатное программное обеспечение под лицензией BSD, и оно работает в операционных системах Unix, таких как Linux, macOS и т. д. Для этого используется libpcap.
Итак, до этого момента, когда я впервые прочитал это, у меня было очень мало информации о том, что такое tcpdump, поскольку я никогда раньше не слышал этого имени. Вы, люди, может быть умнее меня и могли бы понять это с первого раза. Но я собираюсь предположить, что вы этого не сделали, и разбить это так, как я это сделал, чтобы понять это.
Вычеркнутые термины:
- анализатор пакетов
- сетевой интерфейс
- libpcap
Попробуем разобраться в каждом из них, но не в таком порядке.
Сетевой интерфейс — это системный (программный и/или аппаратный) интерфейс или точка соединения между двумя элементами оборудования или уровнями протоколов в компьютерной сети. Для наших целей он в основном принимает форму NIC (контроллер сетевого интерфейса). Вы можете прочитать больше о NIC здесь —
Что такое сетевая карта (NIC)? — Определение из WhatIs.com
Плата сетевого интерфейса (NIC) — это аппаратный компонент, обычно печатная плата или микросхема, которая устанавливается на…
searchnetworking.techtarget.com
Анализатор пакетов компьютерная программа или часть компьютерного оборудования, которые могут перехватывать и регистрировать трафик, проходящий через цифровую сеть или часть сети.
Теперь, когда мы рассмотрели основы того, чего пытается достичь tcpdump и где он работает. Думаю, сейчас самое время погрузиться в libpcap.
- pcap (Процесс захвата пакетов) примерно означает получение копии пакетов от сети до того, как они будут обработаны операционной системой.
- libpcap — это библиотека процедур C/C++, которую мы будем использовать для захвата пакетов, когда они выходят из сетевой карты.
Но это все еще кажется немного расплывчатым, давайте посмотрим, сможем ли мы прояснить это с помощью следующих утверждений.
- Перехват пакетов означает сбор данных, передаваемых по сети. Каждый раз, когда сетевая карта получает кадр Ethernet, она проверяет, совпадает ли MAC-адрес назначения с собственным. Если это так, он генерирует запрос на прерывание. Подпрограмма, которая обрабатывает это прерывание, является драйвером сетевой карты.
- Он копирует данные из буфера карты в пространство ядра, затем проверяет поле ethertype заголовка Ethernet, чтобы определить тип пакета, и передает его соответствующему обработчику в стеке протоколов. Данные передаются вверх по уровням, пока не достигнут приложения пользовательского пространства, которое их использует.
- Когда мы перехватываем пакеты, сетевой драйвер также отправляет копию каждого полученного пакета фильтру пакетов.
Итак, теперь, когда мы развили понимание того, как работает процесс и что заставляет его работать. Было бы неплохо взглянуть на некоторые команды.
Итак, во-первых, нам нужно установить tcpdump или windump, как в моем случае.
tcpdump : https://www.hugeserver.com/kb/install-use-tcpdump-capture-packets/
Windump : https://uwnthesis.wordpress.com/2014/05/26/ windump-how-to-use-windump-tcpdump-on-windows-7-the-visual-guide/
Теперь давайте запачкаем руки —
Сначала нам нужно указать интерфейс, с которого мы хотим перехватывать трафик .
- tcpdump-D
Эта команда выводит список всех сетевых интерфейсов, имеющихся в вашей системе. Теперь нам нужно выбрать конкретный интерфейс и захватить трафик.
- Выбор интерфейса и количества пакетов
tcpdump -i {выбор интерфейса} — c {количество пакетов}
Указание счетчика указывает системе остановиться после сбора такого количества пакетов.
Указание счетчика и интерфейсаНо если мы собираемся использовать эти данные, нам нужно сохранить эти данные в файл для последующего использования, давайте посмотрим, как это можно сделать.
- Запись вывода в файл
- tcpdump -i {выбор интерфейса} -c {количество пакетов} -w{абсолютный путь к файлу}.pcap
расширение файла .pcap используется для хранить информацию. Его можно прочитать с помощью tcpdump или WireShark.
- Чтение файла —
— — — — — — — — — — — — — — — — — — — — — — — — — — — —
Теперь, какая польза захват этих данных, если мы этого не понимаем. Итак, давайте пойдем шаг за шагом и поймем, что получается на выходе.
- Первая отображаемая информация — это метка времени захвата пакета.
- Сразу после этого IP-адрес источника: порт > IP-адрес назначения: порт . Здесь вы видите, что IP-адрес моего рабочего стола был преобразован в его DNS-форму. Если вы этого не хотите, добавьте -n в список выражений
т.е. э. tcpdump -i eth0 -c 20 -n
3. После этого, если вы видите «S», , что указывает на флаг SYN, который означает запрос на установление сеанса, который является первой частью любого TCP-соединения (3-стороннее рукопожатие ).
4. Далее идут порядковые номера 3682678150:3682678150(0). Это
начальный порядковый номер TCP : конечный порядковый номер TCP (байты данных)
Начальный порядковый номер (ISN) выбирается как уникальный номер для обозначения первого байта данных. Конечный порядковый номер — это начальная последовательность плюс количество байтов данных, которые должны быть отправлены с этим TCP-сегментом. В этом случае было отправлено 0 байтов, следовательно, они оба одинаковы.
5. win 65535 : это размер приемного буфера в байтах. Остальное — различные флаги и информация об установлении соединения.
6. После того, как они подключены и флаг ack (подтверждение) установлен с обеих сторон, мы видим флаг P, который означает, что данные передаются.
Итак, мы подошли к концу нашей статьи. Но я оставлю вас с этим —
Это определяет все доступные вам параметры, чтобы понять, что делает каждый из них, вы можете обратиться к странице руководства tcpdump —
Страница руководства TCPDUMP
Tcpdump распечатывает описание содержимого пакетов на сетевом интерфейсе, соответствующих логическому выражению…
www. tcpdump.org
Не стесняйтесь обращаться ко мне при любых сомнениях. Я постараюсь изучить их. Я не эксперт, так что если есть какие-либо ошибки, пожалуйста, сообщите мне. Приятного чтения 🙂
Захват исходящих соединений, инициированных на вашем хосте с помощью tcpdump и WinDump в Linux и Windows — 4sysops
Если ваш сервер инициирует подключения к неизвестному хосту, это может быть признаком того, что ваш сервер был скомпрометирован. С помощью tcpdump и WinDump вы можете легко перехватывать исходящие TCP-пакеты в Linux и Windows.
- Автор
- Последние сообщения
Майкл Пьетрофорте
Майкл Пьетрофорте является основателем и главным редактором 4sysops. Он имеет более чем 35-летний опыт управления ИТ и системного администрирования.
Последние сообщения Michael Pietroforte (посмотреть все)
Содержание
- Установка tcpdump и WinDump
- Исходящие соединения
- Захват только исходящих соединений, инициированных хостом 9
квалификаторы типа хоста имеют значения имен хостов или числовых адресов. (Являются ли они IP-адресами, MAC-адресами или другими адресами, зависит от предшествующего им квалификатора протокола.)
Квалификаторы типа порта используют символические имена (из /etc/services) для портов или самих номеров портов.
квалификаторы типа сети используют сетевые адреса и сетевые маски, записанные либо только сетевыми октетами (например, 192.168), либо с сетью, за которой следует число сетевых байтов (192.168.0.0/16) или с сетью, за которой следует маска сети (192.168.0.0, маска 255.255.0.0).
квалификаторы типа proto используют символические имена (ip, tcp, udp) или номера протоколов, определенные в /etc/protocols.
Tcpdump часто устанавливается в Linux. Если нет, вы можете установить его на Ubuntu с помощью следующих команд:
sudo apt update sudo apt установить tcpdump
Если вы работаете с другим дистрибутивом Linux, вы должны использовать соответствующие команды установки.
В Windows вы можете работать с бесплатным инструментом WinDump. Прежде чем вы сможете использовать WinDump, вы должны установить WinPcap. Вы можете скачать обе программы здесь. После установки WinPcap вы можете скопировать WinDump в папку по вашему выбору и выполнить команду оттуда. WinDump не требует установки. 9
Всякий раз, когда у вас есть основания полагать, что хакеры установили вредоносное ПО на ваши серверы, вы должны проверить, устанавливает ли ваш сервер соединения со своими мастерами. Мы должны различать исходящий трафик в целом и исходящий трафик, который инициируется на вашем хосте.
В Linux вы можете использовать tcpdump для отображения всех исходящих соединений с помощью этой команды:
tcpdump -i any src host 10. 0.0.1
10.0.0.1 здесь IP-адрес вашего хоста. Параметр -i определяет сетевой интерфейс, на котором прослушивается tcpdump. Если вы не хотите прослушивать все сетевые интерфейсы, вы можете найти установленные интерфейсы на вашем сервере с помощью команды ifconfig. Это соответствующая команда WinDump: 9
Большая часть исходящего трафика — это ответ вашего сервера на запросы клиентов. Если многие клиенты подключаются к вашему серверу с внешних IP-адресов, вы будете поражены количеством отображаемых подключений. Если хакеры установят вредоносное программное обеспечение на ваш сервер, вполне вероятно, что вредоносное ПО попытается подключиться к своему хозяину; то есть он инициирует подключение к внешнему IP-адресу.
Для перехвата исходящих TCP-пакетов, инициированных на вашем сервере, вы должны понимать концепцию трехэтапного рукопожатия протокола TCP. Всякий раз, когда клиент пытается установить TCP-соединение, он устанавливает флаг SYN. Затем сервер отвечает пакетом SYN/ACK, а в конце трехэтапного рукопожатия клиент отвечает пакетом ACK.
Трёхстороннее рукопожатие TCP
Таким образом, чтобы захватывать только TCP-пакеты, инициированные на нашей машине, мы должны указать tcpdump отображать только те пакеты, для которых установлен флаг SYN. Мы также должны исключить пакеты с установленным флагом ACK, потому что в противном случае мы также получим ответы внешнего хоста:
tcpdump -i any src host 10.0.0.1 и "tcp[tcpflags] & (tcp-syn) != 0 " и "tcp[tcpflags] & (tcp-ack) == 0"
Отображение исходящего соединения, инициированного хостом 9
Если вы хотите узнать, какая программа установила соединение с определенным IP-адресом, вы можете использовать команду netstat с параметром -p. Используйте параметр -n для отображения только числовых значений и параметр -c для непрерывного отображения подключений каждую секунду.
нетстат-пнк
Отображение программы, которая устанавливает сетевое соединение в Linux
Если вы передаете вывод в grep, вы можете ограничить вывод для своего подозрительного IP-адреса.
Поскольку вредоносное ПО на вашем сервере может подключаться к своему хозяину только в определенное время, вы можете захотеть регистрировать подключения, инициированные вашим сервером. Для этого мы перенаправляем вывод с помощью «>»:
tcpdump -i any src host 10.0.0.1 и «tcp[tcpflags] & (tcp-syn) != 0» и «tcp[tcpflags] & (tcp- ack) == 0" &> outbound.log &
В оболочке bash «&» в конце команды гарантирует, что tcpdump работает в фоновом режиме и продолжает вести журнал после завершения сеанса. Это соответствующая команда для Windows:
Подпишитесь на рассылку 4sysops!
start /B windump src host 10.0.0.1 и "tcp[tcpflags] & (tcp-syn)!= 0" и "tcp[tcpflags] & (tcp-ack) == 0" > outbound.log
Tcpdump и WinDump | Anti-Hacker Tool Kit, Third Edition
< Day Day Up > |
сниффер для Unix. WinDump — аналог tcpdump для Windows. Его можно найти в http://windump.polito.it/ и имеет почти ту же функциональность, что и tcpdump. В то время как BUTTSniffer изначально задумывался как хакерский подключаемый модуль для прослушивания системы, которой вы уже владеете, tcpdump был создан исключительно для мониторинга сети, анализа и тестирования трафика, а также для перехвата пакетов.
Tcpdump/WinDump больше похож на анализатор сетевых пакетов, чем на сниффер. Его возможности фильтрации превосходят многие другие инструменты, но это не обязательно упрощает захват пакетных данных. Это позволяет вам получить много интересной низкоуровневой информации о пакетах, проходящих по вашей сети, и может помочь вам диагностировать все виды сетевых проблем.
Установка
Tcpdump и WinDump используют библиотеку pcap , набор процедур перехвата пакетов, написанный Национальной лабораторией Лоуренса в Беркли. Подпрограммы pcap предоставляют интерфейс и функциональные возможности для фильтрации пакетов на уровне ОС и разборки IP-пакетов в необработанные данные.
Установка Tcpdump (и Libpcap) в Unix
Сначала вам нужно загрузить и установить libpcap, если у вас его нет. Libpcap — это независимый от системы интерфейс к фильтрам пакетов на уровне ядра. Если вы не уверены, установлен ли у вас libpcap, попробуйте установить tcpdump; он сообщит вам, если libpcap не установлен в вашей системе. Вы также можете получить libpcap из http://www.tcpdump.org . Libpcap работает, только если ваша система использует механизм фильтрации пакетов на уровне ядра, который она может распознать. В Linux есть собственный встроенный «пакетный» протокол, который libpcap распознает и с которым работает, при условии, что ядро Linux было скомпилировано с соответствующими параметрами. Варианты BSD (Berkeley Software Distribution) и другие операционные системы Unix используют BPF (Berkeley Packet Filtering).
После того, как вы скачали libpcap и разархивировали его, запустите скрипт configure. Найдите строку с надписью «проверка типа захвата пакетов», чтобы узнать, какой механизм использует ваша система. Если libpcap не распознает ваш фильтр пакетов, вам придется обратиться к прилагаемой документации, чтобы определить, как решить эту проблему. В противном случае вы можете продолжить установку libpcap так же, как и любой другой исходный код Unix (создайте и сделайте установку). После установки libpcap аналогичным образом можно установить tcpdump.
Установка WinDump (и WinPcap) в Windows
Как и в случае с Unix, перед установкой WinDump (и WinPcap) в Windows необходимо установить библиотеку pcap. WinPcap и WinDump теперь работают с Windows 9 x , Me, NT, 200 x и XP. Пакет поставляется в виде одного исполняемого файла и может быть загружен с http://winpcap.polito.it/. WinPcap не имеет параметров установки и устанавливается примерно за пять секунд.
Теперь все, что вам нужно сделать, это отправиться по адресу http://windump.polito.it/ и загрузите файл windump.exe. Вы готовы идти.
Реализация
Поскольку WinDump — это просто порт Windows для tcpdump, использование tcpdump и WinDump почти взаимозаменяемо. На протяжении всей главы мы сосредоточимся на tcpdump, отмечая любые различия между WinDump и tcpdump по ходу дела. В общем, если дома подыгрываете, можно заменить WinDump на tcpdump.
Первое, что нужно иметь в виду, это то, что для tcpdump обычно требуется root-доступ . Его либо нужно запустить как корень или setuid корень. Этот уровень доступа необходим для того, чтобы tcpdump и libpcap имели такой низкоуровневый (то есть на уровне ядра) доступ к сетевым интерфейсам и сетевым данным. Это также не позволяет «Пользователю Джо» настроить анализатор пакетов для ненадлежащего использования. Некоторым системам Unix требуется больший или меньший доступ, чем другим — полную информацию см. на странице руководства или в файле README.
Примечание | Безопасность WinDump/WinPcap немного слабее, чем у tcpdump/libpcap. Когда WinDump запускается, он пытается загрузить DLL WinPcap, если она еще не запущена. Только кто-то с правами администратора может загрузить эту DLL. Однако после запуска WinPcap любой пользователь может использовать его с этого момента до тех пор, пока система не будет перезагружена или не будет остановлена служба Netgroup Packet Filter. |
Другая причина, по которой пользователям libpcap и WinPcap нужен низкоуровневый доступ, заключается в том, что по умолчанию эти снифферы переводят сетевой интерфейс, на котором они работают, в неразборчивый режим. Если вы помните наше обсуждение в начале главы, некоторые сетевые устройства, такие как концентраторы Ethernet, фактически будут транслировать пакет на все порты концентратора в поисках законного получателя, который поднимется и примет пакет. Другие хосты, подключенные к хабу, также получают этот пакет, но должны его игнорировать. Режим Promiscuous указывает интерфейсу быть любопытным и позволяет tcpdump видеть весь сетевой трафик на концентраторе, а не только трафик, направленный на хост или с него. То же самое происходит, если вы запускали tcpdump на маршрутизаторе или брандмауэре. Если интерфейс не находится в неразборчивом режиме, вы видите только трафик, направленный конкретно на маршрутизатор. Но если мы переведем интерфейс в неразборчивый режим, мы сможем перехватывать каждый проходящий пакет. Многие организации запускают анализаторы пакетов со своих основных маршрутизаторов в Интернет для целей мониторинга.
Теперь мы должны быть готовы запустить приложение. Если вы просто наберете tcpdump в командной строке, tcpdump попытается прослушать первый доступный сетевой интерфейс (или все интерфейсы, если это возможно) и выдаст все данные, которые он увидит. В зависимости от того, насколько загружена ваша система, или если она подключена к концентратору или порту монитора коммутатора, вы можете увидеть множество прокручиваемых текстов. Вы можете заметить, что tcpdump отображает только хосты, участвующие в сетевой транзакции, отметку времени и некоторые другие данные IP. Но где содержимое пакета? Очевидно, вам нужно больше узнать об этом инструменте, чтобы он рассказал вам немного больше.
Tcpdump — мощное средство, не имеющее удобного интерфейса. Подобно Netcat, nmap и другим чрезвычайно полезным инструментам командной строки, которые мы рассмотрели, tcpdump становится полезным только после того, как вы освоите параметры и синтаксис командной строки.
Синтаксис командной строки: указание фильтров
Tcpdump позволяет использовать логическое выражение для указания фильтра пакетов с помощью механизма Berkeley Packet Filter (BPF). Логическое выражение может состоять из нескольких выражений, объединенных операторами И, ИЛИ или НЕ. Типичный формат выражения
<характеристика пакета> <значение>
Квалификаторы типа Наиболее типичными характеристиками пакета (называемые квалификаторами ) являются квалификаторы типа: хост, сеть и порт. Например, командная строка
# tcpdump host 192. 168.1.100
сообщает нам, что мы хотим видеть только пакеты, поступающие или исходящие от 192.168.1.100. Если все, что нас интересует, это веб-трафик, мы можем попробовать это:
# tcpdump host 192.168.1.100 и порт 80
Это выражение позволяет нам иметь тот же уровень функциональности фильтрации, который мы имели с BUTTSniffer. Но у tcpdump есть еще несколько модификаторов, из которых вы можете выбирать. И здесь нам не нужно сначала исключать весь остальной трафик, чтобы сосредоточиться на конкретном хосте.
Квалификаторы направлений Tcpdump позволяет указать фильтры направлений. Например, если нас интересует только трафик, поступающий с адреса 192.168.1.100 и предназначенный для чьего-либо веб-порта, мы используем квалификаторы направления src и dst: 9.0003
# tcpdump src host 192.168.1.100 и dst port 80
Этот фильтр дает нам именно то, что мы ищем. В противном случае мы могли бы увидеть трафик, поступающий из других мест на веб-сервер 192. 168.1.100, когда нас это вообще не заботило.
Если вы не укажете квалификатор направления для квалификатора типа, tcpdump предполагает src или dst. Вторую рассмотренную нами команду можно было бы переписать так:
# tcpdump src или dst host 192.168.1.100 и src или dst порт 80
Примечание | Для протоколов двухточечной связи, таких как протоколы коммутируемого доступа SLIP и протокол двухточечной связи (PPP), tcpdump использует квалификаторы направления входящего и исходящего трафика. вместо. |
Квалификаторы протокола Tcpdump также имеет квалификаторы протокола, которые можно применить к вашему выражению. Например, эта строка
# tcpdump src host 192.168.1.100 и udp dst порт 53
даст нам исходящие запросы системы доменных имен (DNS) от 192.168.1.100. Обратите внимание на квалификатор протокола udp перед квалификатором порта dst. Другими квалификаторами протокола для квалификаторов типа порта являются tcp и icmp. Некоторые квалификаторы протокола используются в квалификаторах типа хоста, таких как ip, ip6, arp, и ether.
Эта команда дает нам все запросы arp в нашей локальной подсети:
# tcpdump arp net 192.168.1
Если мы знаем MAC-адрес определенного хоста и хотим фильтровать его, мы можем использовать
# tcpdump ether host 00:e0:29:38:b4:67
Если квалификаторы протокола не указаны, tcpdump предполагает ip, arp или rarp для квалификаторов типа хоста и tcp или udp для квалификаторов типа порта.
Другие квалификаторы Пока что синтаксис для одного выражения сопоставления пакетов выглядит следующим образом:
[квалификатор протокола] [квалификатор направления] <квалификатор типа> <значение>
Еще несколько необязательных квалификаторов может использоваться для указания дополнительных характеристик сопоставления пакетов, как показано в таблице 16-1.
Qualifier | Description | Examples |
---|---|---|
gateway | Display only packets that use router1 as a gateway. Значение, используемое с gateway, должно быть именем хоста, так как выражение должно преобразовывать имя хоста в IP-адрес (используя /etc/hosts или DNS), а также в адрес Ethernet (используя /etc/ethers). | tcpdump gateway router1 (Чтобы использовать прямые IP- и MAC-адреса, используйте tcpdump ether host |
широковещательный, многоадресный | широковещательный отображает только широковещательные пакеты (в данном случае пакеты с адресом назначения 192. 168.1.0 или 192.168.1.255). multicast отображает только многоадресные IP-пакеты. | tcpdump ip широковещательная сеть 192.168.1 |
proto | Этот полезный квалификатор позволяет вам указать подпротоколы, созданные для определенного протокола. Имена протоколов должны быть экранированы с помощью обратной косой черты, чтобы tcpdump не интерпретировал их как ключевые слова, но вы также можете использовать здесь номера протоколов. Некоторые популярные номера подпротокола IP: 1 (ICMP), 6 (TCP) и 17 (UDP). | tcpdump ip proto 17 (Выражение ip host 192.168.1.100 и tcp порт 80 можно записать как ether proto \\ip и host 192.168.1.100 и ip proto \\tcp и порт 80. Обратите внимание на модификатор протокола в каждом случае расширяется до <протокол> proto < sub — протокол >.) |
маска | Этот квалификатор типа сети может указывать квалификаторы маски подсети. Он используется редко, потому что вы можете указать маску сети в значении квалификатора типа сети. | TCPDUMP NET 192.168.1.0 Маска 255.255.255.0 (или альтернативно TCPDUMP NET 192.168.1.0/24) |
, LEDSE, MTER, 92878892889288. | tcpdump больше 80 и | |
Выражения содержимого пакетов | Для опытных пользователей. Вы можете сопоставлять пакеты на основе их содержимого. Возьмите имя протокола (например, ether, ip или tcp), за которым следует смещение в байтах и размер желаемого значения заголовка в скобках, за которым следует логический оператор и другое выражение. Обратите внимание, что большинство выражений необходимо заключать в кавычки, потому что используемая оболочка, вероятно, попытается интерпретировать их до того, как это сделает tcpdump. | tcpdump ‘udp[4:2] = 24’ Обратившись к Приложению A, вы заметите, что байт 4 заголовка UDP относится к «длине» пакета. Вы также заметите, что значение «length» имеет длину 16 бит или 2 байта. Таким образом, приведенное выше выражение смотрит на значение в двух байтах 4 и 5 («длина») и соответствует только пакетам со значением 24. |
Значения по используемому определителю. В общем случае значением будет либо символьное имя, либо соответствующее число:
Примечание | Поскольку в Windows нет каталога /etc, WinDump использует файлы хостов и служб, которые установлены в корневом каталоге Windows (например, C:\Windows\) для систем Windows 9x и C: \Windows\System32\Drivers\Etc для текущих систем Windows. |
Флаги командной строки: форматирование вывода и параметры переключения
Теперь давайте перейдем к описанию более важных флагов и параметров, описанных в Таблице 16-2.
Опция | Объяснение |
---|---|
1028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 9028 7. | |
-c < num> | Анализирует, пока мы не получим < num> пакетов, а затем завершаем работу. |
-C < размер_файла > | Если вы используете –w для записи захваченных пакетов в файл, вы можете использовать –C для ограничения размера этого файла. Например, tcpdump –w Capture.dat –C 20 запишет первые 20 миллионов байт данных в Capture.dat, следующие 20 миллионов байтов в Capture.dat.2, и так далее. |
-d, -dd, -ddd | Берет фильтр, указанный вами в командной строке, и вместо прослушивания выводит код сопоставления пакетов для этого фильтра в скомпилированном ассемблере, фрагмент программы C , или десятичное представление соответственно. Используется в основном для отладки и редко полезен начинающим и опытным пользователям. |
-e | Отображает заголовок уровня ссылки. Например, если вы находитесь в сети Ethernet, вы можете отображать заголовки Ethernet ваших пакетов. Полезно, если вас интересуют сетевые подробности более низкого уровня для конкретной части трафика (например, определение MAC-адреса другой машины). |
-E | Попытка расшифровать прослушанные пакеты IPSEC с помощью алгоритма шифрования secret 90 secret 29290 ESP и алгоритма ESP . Это работает только в том случае, если tcpdump скомпилирован с криптографией и не рекомендуется в производственных средах, поскольку предоставление секрета ESP в командной строке обычно является плохой идеей. |
-F < файл> | Задает выражение фильтра из файла, а не из командной строки. |
-i | Прослушивает определенный интерфейс. В Unix вы можете использовать ifconfig для просмотра доступных сетевых интерфейсов. В Windows вы можете использовать команду windump –D, чтобы найти номер интерфейса, соответствующий интересующему вас сетевому интерфейсу. |
-л | В стандартном выводе tcpdump используется буферизация строк, так что вы можете листать вывод. Без этой опции перенаправление вывода будет препятствовать записи любого вывода до тех пор, пока tcpdump не завершит работу. |
-n | Не разрешает IP-адреса в имена хостов. |
-N | Подавляет печать FQDN (полного доменного имени) хоста — используйте только имя хоста. |
-O | Подавляет оптимизатор кода сопоставления пакетов. Вы можете использовать это, если окажется, что фильтр пакетов, который вы передаете tcpdump, пропускает пакеты или включает пакеты, которые следует отфильтровать. |
-p | Указывает tcpdump не переводить сетевой интерфейс в неразборчивый режим. Полезно, если вы заинтересованы в прослушивании только локального трафика (то есть трафика входящего и исходящего компьютера, который вы используете). |
-q | Указывает tcpdump не печатать столько информации о заголовке пакета. Вы теряете множество мельчайших подробностей, но по-прежнему видите отметку времени и участвующих хостов. |
-r < файл> | Tcpdump может записывать свои выходные данные в двоичный файл (см. -w). Это говорит tcpdump прочитать этот файл и отобразить его вывод. Поскольку tcpdump захватывает необработанные данные на основе фильтра пакетов, указанного в командной строке, вы можете использовать –r для повторного чтения данных захвата пакетов и использования флагов командной строки для форматирования вывода постфактум (-n, -l, -e, и -X) для отображения вывода различными способами. |
-s < байт> | Указывает, сколько байтов на пакет tcpdump должен попытаться «снарфить». Значение по умолчанию — 68. Слишком большое значение может привести к тому, что tcpdump пропустит пакеты. |
-S | Указывает tcpdump печатать абсолютные порядковые номера TCP. По умолчанию используются относительные порядковые номера, чтобы вы могли видеть, на сколько байтов изменяется порядковый номер между пакетами во время соединения TCP. Использование абсолютных чисел означает, что вам придется заниматься математикой самостоятельно. |
-t, -tt, -ttt | Сообщает tcpdump вообще не печатать метку времени, печатать неформатированную метку времени (количество секунд с начала эпохи, 1 января 1970 г.) или печатать изменение времени (в микросекундах) между выходными строками соответственно. |
-T < тип> | Tcpdump может интерпретировать некоторые другие IP-протоколы и отображать выходные данные в соответствующем формате, такие как DHCP, DNS, NBT и ARP. Указывает tcpdump интерпретировать выбранные пакеты как определенный тип протокола, например RPC или SNMP. |
-v, -vv, -vvv | Управляет уровнем детализации tcpdump. Чем больше vs у вас есть, тем больше информации вы получите и тем больше интерпретаций сделает tcpdump. |
-w < файл> | Не переводите данные захвата пакетов в удобочитаемый формат — записывайте их в двоичный файл с именем < файл >. Полезно, если вы записали данные и хотите использовать tcpdump или другой инструмент, такой как Ethereal, чтобы просмотреть их позже различными способами (см. -r). Поскольку он не переводит данные в удобочитаемый формат, это делает tcpdump более эффективным и снижает вероятность пропуска пакетов. Полезно в системе с чрезвычайно большим объемом трафика. |
-x | Отображает пакет в шестнадцатеричном формате. Ознакомьтесь с выводом этой команды и книгой по TCP/IP, если вы хотите узнать больше о заголовках TCP и подобных вещах. Это расширенная функция, которая может помочь вам обнаружить пакеты, в которых могут быть данные, скрытые в параметрах IP, или другие искажения пакетов. |
-X | Аналогично шестнадцатеричному варианту, но он также отображает содержимое пакета в ASCII, позволяя нам видеть любые данные в виде открытого текста, содержащиеся в пакете. Именно здесь вы можете узнать имена пользователей, пароли и другую интересную информацию, циркулирующую в Сети. |
Вывод Tcpdump
В справочной странице tcpdump раздел вывода, вероятно, является одним из самых больших разделов. Поскольку tcpdump пытается по-разному интерпретировать некоторые протоколы, фактические выходные данные tcpdump также будут различаться в зависимости от параметров, которые вы ему передаете, и типа пакетов, которые вы фильтруете. Мы не можем охватить здесь все, но мы рассмотрим некоторые основные выходные данные tcpdump и поговорим о том, что это значит.
Вот вывод tcpdump без параметров:
20:11:28.527191 eth0 B somehost.netbios-ns > 192.168.1.255.netbios-ns: NBT UDP ПАКЕТ (137): ЗАПРОС; ЗАПРОС; BROADCAST 20:11:28.531361 eth0 > arp who-has 192.168.1.1 tell originix (0:e0:29:38:b4:67) 20:11:28.531939 eth0 < ответ arp 192.168.1.1 is-at 0:4:5a :e3:44:a3 (0:e0:29:38:b4:67) 20:11:28.531994 eth0 > originix.1024 > ns01.domain: 49930+ PTR? 255.1.168.192.in-addr.arpa. (44) 20:11:28.630838 eth0 < ns01.domain > originix.1024: 49930 NXDomain* 0/1/0 (116) (DF) 20:11:28.632600 eth0 > originix.1024 > ns01.domain: 49931+ ПТР? 1.1.168.192.in-addr.arpa. (42) 20:11:28.655958 eth0 < ns01. domain > originix.1024: 49931 NXDomain 0/1/0 (114) (DF) 20:11:28.657685 eth0 > originix.1024 > ns01.domain: 49932+ PTR? 150.1.1.10.in-addr.arpa. (41) 20:11:28.668566 eth0 < ns01.domain > originix.1024: 49932 1/2/2 PTR ns01. (162) (DF) 20:11:29.277025 eth0 B somehost.netbios-ns > 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; ЗАПРОС; BROADCAST
Давайте сначала сосредоточимся на одной строке. Первое значение — это метка времени для пакета. Обратите внимание, что формат по умолчанию не включает дату. Следующий бит информации — это интерфейс, на котором был собран этот пакет (eth0). После интерфейса мы видим <, > или B. Это указывает на то, был ли пакет входящий , исходящий или широковещательный . Затем мы видим имена хостов или IP-адреса, за которыми следует точка и имя или номер порта. Знак «больше» (>) указывает, что исходный хост и порт всегда будут слева, а конечный хост и порт всегда будут справа.
Первый пакет распознается как пакет NetBIOS через TCP (NBT). Поскольку tcpdump может интерпретировать часть информации о пакете, он сообщает вам, что «какой-то хост» выполнял широковещательный запрос NetBIOS, вероятно, пытаясь найти имя хоста для IP-адреса в сети.
Второй пакет выглядит как запрос протокола разрешения адресов (ARP). ARP сопоставляет IP-адреса с MAC-адресами Ethernet и наоборот. Originix отправляет запрос ARP, запрашивая MAC-адрес 192.168.1.1 (предположительно, его шлюз). В следующей строке шлюз отвечает своим MAC-адресом. Теперь два адаптера Ethernet могут взаимодействовать друг с другом на уровне канала передачи данных. Это необходимый шаг перед любой IP-коммуникацией.
Четвертая и последующие строки содержат то, что похоже на DNS-трафик. Originix делает запрос к ns01 через «доменный» порт 53. Поскольку tcpdump также может интерпретировать пакеты DNS, он пытается предоставить информацию о фактическом содержимом пакета, включая тип запроса и запрашиваемый адрес. Сначала кажется, что он выполняет обратный поиск по широковещательному адресу (192. 168.1.255), затем он пытается выполнить обратный поиск на 192.168.1.1 и, наконец, пытается разрешить 10.1.1.150. Он не работает на первых двух, получая сообщение «NXDomain» или «несуществующий домен» от DNS-сервера. Но 10.1.1.150 успешно разрешается в ns01, который является самим сервером имен.
Это была выборка некоторых пакетов, которые tcpdump может интерпретировать изначально. Другие пакеты, такие как обычный трафик telnet или SSH, просто отображают информацию о пакетах и ничего более.
20:28:48.375504 eth0 < somehost.2765 > originix.ssh: P 13024:13068(44) ack 42597 win 64695 (DF) 20:28:48.375574 eth0 > originix.ssh > somehost.2765: P 42597:42877( 280) ack 13068 win 32120 (DF) 20:28:48.377010 eth0 < somehost.2765 > originix.ssh: P 13068:13200(132) ack 42877 win 64415 (DF) 20:28:48.377081 eth0 > originix.ssh > somehost .2765: P 42877:43157(280) ack 13200 win 32120 (DF)
Здесь мы поймали середину сеанса SSH между originix и somehost. Мы видим, что флаг push P установлен. Мы также можем видеть размер пакетов, так как он отображает относительный порядковый номер TCP, за которым следует следующий ожидаемый порядковый номер и размер пакета (13024:13068(44)). Обратите внимание, что во второй строке написано ack 13068. Похоже, что он подтверждает получение предыдущего пакета, подтверждая, что следующий ожидаемый порядковый номер — 13068. В третьей строке это именно то, что нам посылает какой-то хост. Размер окна TCP (наибольший объем данных, который он может обработать) объявляется хостом в каждом пакете, и в этом примере установлен бит «не фрагментировать», чтобы пакет не был разбит. Наблюдение за TCP-трафиком таким образом может быть чрезвычайно полезным для понимания того, как работает протокол.
Вы можете многое узнать о внутренней работе TCP, запустив tcpdump и наблюдая за тем, что происходит при запуске сеанса telnet. Проверьте это:
20:30:58.635657 eth0 < somehost.2910 > originix.telnet: S 213111209:213111209(0) win 65535(DF) 20:30:58. 636019 eth0 > originix.telnet > somehost.2910: S 1513461939:1513461939(0) ack 213111210 win 32120 (DF) 20:30:58.636659 eth0 originix.telnet: . 1:1(0) ответ 1 победа 65535 (DF) 20:30:58.639213 eth0 < somehost.2910 > originix.telnet: P 1:4(3) ack 1 win 65535 (DF)
Вот что показывает нам tcpdump, когда видит telnet-соединение. Обратите внимание, как первые две строки отличаются от пакетов, которые мы просматривали в сеансе SSH. Этот пакет устанавливает соединение. Мы можем это сказать, потому что установлен флаг S (SYN). Мы также видим, что порядковые номера в первых двух строках намного больше. Это связано с тем, что tcpdump использует фактические порядковые номера TCP (32-битные значения в диапазоне от 0 до 429).4967295) во время начальной части соединения TCP. Для остальной части соединения по умолчанию используются относительные порядковые номера, чтобы было легче увидеть изменения, когда пакеты идут вперед и назад. Мы также видим некоторые параметры TCP, согласованные во время трехэтапного рукопожатия (mss1460,nop,nop,sackOK). После трехэтапного рукопожатия и согласования опций какой-то хост начинает отправлять данные (объемом 3 байта).
Используя BUTTSniffer, мы смогли увидеть процесс входа в систему из сеанса telnet. Мы можем сделать это с помощью tcpdump, используя параметр -X для отображения содержимого пакета в ASCII. Однако, поскольку эта опция отображает заголовки пакетов, а также данные, трудно найти то, что мы ищем. Сеанс telnet особенно сложно перехватить с помощью tcpdump, потому что пакет отправляется для каждого введенного нами символа. Собрать их вручную может быть сложно. Но любой клиент, который хранит информацию о пользователе и пароле в памяти, а затем отправляет их все сразу в пакете (например, веб-транзакция через HTTP или вход в систему FTP), все еще может быть легко перехвачен таким образом.
Давайте попробуем обнюхать сеанс FTP с помощью команды tcpdump -X dst port 21. Поскольку FTP использует команды USER и PASS для отправки имени пользователя и паролей, мы должны искать выходные данные, содержащие эти команды:
20:51:06. 697724 somehost .2937 > originix.ftp: P 0:10(10) ack 84 win 65452 (DF) 0x0000 4500 0032 5bd4 4000 8006 1ad8 c0a8 0165 E..2[[email protected] 0x0010 c0a8 0164 0b79 0015 0cc6 3325 a621 9a45 ...d.y....3%.!.E 0x0020 5018 ffac 68a7 0000 5553 4552 2062 6f62 P...h...USER.bob 0x0030 0d0a .. 20:51:06.893543 какой-то хост.2937 > originix.ftp: . ack 116 win 65420 (DF) 0x0000 4500 0028 5fd4 4000 8006 16e2 c0a8 0165 E..([email protected] 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...dy....3/ .!.e 0x0020 5010 ff8c a023 0000 0000 0000 0000 P....#........ 20:51:10.828077 somehost.2937 > originix.ftp: P 10:23(13) ack 116 win 65420 (DF) 0x0000 4500 0035 64d4 4000 8006 11d5 c0a8 0165 [email protected] 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5018 ff8c fe75 0000 5041 5353 2062 6f62 P....u..PASS.bob 0x0030 3132 330d 0a 123..
Отфильтровав только трафик, предназначенный для порта 21, и используя параметр -X, мы можем легко обнаружить информацию для входа на FTP. Вот снова Боб, авторизующийся на FTP-сервере в originix с паролем bob123 .
Расширенные примеры
В таблице 16-1 мы кратко упомянули выражения содержимого пакета. Это чрезвычайно мощная часть инструмента tcpdump, но она требует знания заголовков протоколов и двоичной математики. Мы покажем вам несколько продвинутых примеров, чтобы вы могли начать. Если вам нужно сослаться на структуру заголовка конкретного протокола, диаграммы заголовков Ethernet, ARP, ICMP, IP, TCP и UDP находятся в Приложении A этой книги.
В таблице 16-1 пример содержимого пакета, который мы привели, включал проверку длины UDP-пакета, записанного в его заголовке. Длина или размер пакета может сказать нам, сколько данных содержит пакет. Если вы помните из главы 4, некоторые сканеры UDP отправляют 0- или 1-байтовые UDP-пакеты как часть своего сканирования. Мы можем использовать tcpdump для поиска таких пакетов. Пакет UDP всегда будет иметь длину не менее 8 байтов, так как заголовок всегда имеет длину 8 байтов. Итак, мы хотим искать UDP-пакеты длиной либо 8, либо 9байт.
# tcpdump 'udp[4:2]=8 или udp[4:2]=9'
Эта команда покажет нам все пакеты UDP с 0 или 1 байтом данных. Что означает udp[4:2]? Цифры в скобках указывают на то, что нас интересует значение 2 байтов, начиная со смещения байта 4. Если вы посмотрите на диаграмму заголовка UDP в Приложении A, вы увидите, что смещение 0x00 (байт 0) является началом исходный порт UDP, а исходный порт заполняет 16 бит (или 2 байта, байты 0 и 1). Смещение 0x02 (байт 2) — это начало порта назначения UDP, а порт назначения также занимает 16 бит (байты 2 и 3). Смещение 0x04 (байт 4) — это начало длины UDP — характеристика, которую мы хотим. Он также заполняет 16 бит или 2 байта (байты 4 и 5). Указав смещение начального байта, за которым следует двоеточие и количество байтов для проверки, мы можем извлечь значение из заголовка и использовать математические операции для сравнения его с желаемым значением.
Давайте посмотрим на другой пример. Если бы нас интересовало только отслеживание первоначальных попыток TCP-соединения с определенного хоста (192. 168.1.100), как бы мы это сделали? Итак, мы знаем, что все TCP-пакеты, с которых начинается соединение, имеют установленный флаг SYN. Итак, как нам настроить выражение содержимого пакета, которое показывает нам только пакеты с установленным флагом SYN?
# tcpdump 'tcp[13] & 2 = 2 и хост 192.168.1.100'
Этот пример требует немного двоичной математики. На этот раз мы исследуем смещение 0x0d (байт 13) заголовка TCP. Если вы посмотрите внимательно, то увидите, что байт 13 состоит из 2 зарезервированных битов и 6 флаговых битов. Нас интересует только один конкретный бит: бит SYN. Как узнать, установлен ли этот бит?
Во-первых, если у вас нет опыта работы с двоичными числами, мы дадим вам все, что вам нужно знать для нашего примера (хотя мы рекомендуем вам изучить тему самостоятельно для лучшего понимания). В таблице 16-3 показаны первые восемь двоичных чисел и их десятичные эквиваленты.
Двоичное представление | Соответствующее десятичное число | ||
---|---|---|---|
000 | 0 | ||
001 | 1 | ||
010 | 2 | ||
011 | 3 | ||
100 | 4 | ||
101 | 9 | 9110 | 6 |
111 | 7 |
. Если вы используете восемь двоичных цифр или 8 бит (1 байт), вы можете представить первые 256 десятичных чисел. Число 6 может быть представлено 3 битами (110), но также может быть представлено 8 битами (00000110).
Давайте рассмотрим каждый из 8 битов в байте 13. Как бы выглядели эти биты, если бы был установлен только флаг SYN? Поскольку флаг SYN является вторым младшим битом, он будет выглядеть как 00000010. Если мы проигнорируем начальные нули и обратимся к Таблице 16-3, мы увидим, что десятичное значение этого байта равно 2. Таким образом, если только SYN флаг установлен, байт 13 должен иметь десятичное значение 2.
Мы могли бы использовать простое сравнение равенства (=) между tcp[13] и числом 2 , но что, если установлен какой-то другой флаг? Что делать, если установлен один из двух зарезервированных битов на самом старшем конце байта 13? Было бы неплохо видеть пакеты SYN/ACK, а также пакеты SYN, чтобы мы знали, на какие соединения действительно ответили? Если установлены оба флага SYN и ACK, байт 13 будет выглядеть как 00010010, что дает ему десятичное значение 18. Сравнение на равенство не будет перехватывать пакеты SYN/ACK.
Нам нужен бинарный оператор И (&). Оператор AND сравнивает каждый отдельный бит в двух значениях. Если оба бита установлены (имеют значение 1), для этого бита возвращается 1 (1 и 1 = 1). Любая другая комбинация битов (0 и 0, 1 и 0 или 0 и 1) вернет 0 для этого бита. Другими словами, операция И вернет 1 для бита, только если она установлена как в левом , так и в правом значениях.
Допустим, для байта 13 установлен только флаг SYN (00000010). Если мы И tcp[13] с номером 2, он расширяется до этого:
00000010 & 00000010 = 00000010
Поскольку два байта одинаковы, результат сравнения даст 00000010 или значение 2 . Что, если в байте 13 установлены оба флага SYN и ACK (00010010)? Если мы И tcp[13] с номером 2 , он расширяется до
00010010 & 00000010 = 00000010
Это сравнение также дает 00000010, потому что бит ACK3 установлен, хотя бит ACK3 равен] справа не установлен, поэтому AND возвращает 0 для этого конкретного бита. Что, если бы в байте 13 был установлен только бит ACK? Если мы И tcp[13] с номером 2 , оно расширяется до следующего:
00010000 & 00000010 = 00000000
Здесь ни один из установленных битов не совпадает, поэтому сравнение дает все нули.
Что мы обнаружили? Если мы И tcp[13] с номером 2 и tcp[13] имеет установленный бит SYN, сравнение всегда будет возвращать 00000010 (или число 2 ). Если бит SYN не установлен, сравнение всегда будет возвращать 0. Таким образом, мы можем использовать любое из следующих двух выражений содержимого пакета для поиска пакетов TCP в или из 192.168.1.100 с установленным флагом SYN:
# tcpdump 'tcp[13] & 2 = 2 и хост 192.168.1.100'
или
# tcpdump 'tcp[13] & 2 != 0 и хост 86.00.1 192.1 '
Что, если мы хотим видеть и начало , и конец соединения? Мы могли бы немного изменить наше выражение. В этом сценарии мы будем искать пакеты с установленным флагом SYN или FIN. Если бы были установлены оба флага (что не должно происходить естественным образом), значение байта 13 было бы 00000011 или 3. Если мы используем выражение
# tcpdump 'tcp[13] & 3 != 0 и хост 192.168.1.100'
мы сможем видеть пакеты с установленными флагами SYN или FIN. Однако выражение
# tcpdump 'tcp[13] & 3 = 3 и хост 192.168.1.100'
не сработает. Почему? Потому что, как мы упоминали, флаги SYN и FIN никогда не должны быть установлены в одном и том же пакете и . Единственный способ, которым операция И между байтом 13 и числом 3 может когда-либо вернуть значение 3 , это если и бита были установлены в байте 13. Первое выражение работает, потому что мы только проверяем, что значение сравнения не равно нулю. Если установлен только бит SYN, сравнение И вернет 2 . Если установлен только бит FIN, сравнение И вернет 1 . Если ни один бит не установлен, сравнение И вернет 0 . Следовательно, первое выражение дает нам то, что мы хотим.