Одминский блог
Tcpdump чрезвычайно удобный сетевой анализатор, очень помогающий в работе как сетевым администраторам, так и безопасникам. Естественно что для получения максимальной информации при работе с tcpdump, просто необходимо иметь представления о стеке протоколов TCP/IP. Для удобства можно использовать более удобные и интеллектуальные программы, например Wareshark, но часто возникают ситуации когда на тестируемую машину не представляется возможным установить дополнительные сервисы, и тогда tcpdump просто незаменим, не будит же админ, ради анализа пакетов, ставить на unix’овый сервак X-Windows тем более что в большинстве unix’овых систем, утилита tcpdump идет по умолчанию.
Понимание протокола TCP/IP дает широкое пространство для использование анализатора и устранения неисправностей и неполадок в работе сети, за счет разбора пакетов. Поскольку оптимальное использование данной утилиты требует хорошего понимания сетевых протоколов и их работы, то получается забавная ситуация, в которой инженеру в любом случае необходимо знать и понимать механизмы передачи данных в сети. т.ч. tcpdump полезна во все отношениях: как устранения неисправностей, так и самообразования.
Ниже приводятся несколько опций, которые помогут наиболее полно и подробно использовать эту утилиту, тем более что все эти опочки и ключики довольно легко забываются, и данные примеры весьма полезны, для освежевания памяти.
Первый используемый ключик -n который запрещает попытки преобразования адресов в доменные имена, тем самым выдавая нам чистые IP адреса с портами.
Второй это -X который задает для каждого пакета вывод как hex (шестнадцатеричная система) так и ASCII содержимого пакета.
И последняя опция это -S которая заменяет вывод относительной TCP нумерации, на абсолютную. Смысл в том, что при относительной нумерации некоторые проблемы могут скрыться от вашего внимания.
Нужно понимать, что основное преимущество tcpdump перед другими утилитами заключается в том, что в ней возможен подробный и ручной разбор пакетов. Также нужно помнить что по умолчанию tcpdump использует только первые 68 байт пакета, т.ч. если необходимо видеть больше, то следует использовать ключ -s number , где number количество байт которые следует захватить. В случае задания number 0 , произойдет полный захват пакета, поэтому лучше использовать значение 1514, что даст полный захват стандартного, для сетей Ethernet, пакета.
Список наиболее часто используемых ключей:
-c : задается проверка размера файла захвата перед каждой очередной записью захваченного пакета, если размер больше, то файл сохраняется и запись идет в новый файл
-e : выводится ethernet заголовок (канальный уровень) в каждой строке дампа
-i any : прослушивание всех интерфейсов, на случай если вам необходим весь трафик.
-n : запрещает преобразование адресов в доменные или символьные имена
-nn : запрещает преобразование адресов и портов в доменные или символьные имена
-q : Красткий вывод информации, за счет уменьшения вывода информации о протоколе.
-X : выводит как hex так и ASCII содержимое пакета
-v, -vv, -vvv : задает вывод дополнительной информации о захваченных пакетах, что дает возможность более широкого анализа.
Несколько примеров для использования:
# Стандартный вывод пакетов
tcpdump -nS
# Расширенный стандартный вывод
tcpdump -nnvvS
# Глубокий разбор пакета
tcpdump -nnvvXS
# Наиболее подробная информация о трафике
tcpdump -nnvvXSs 1514
Выражения позволяют производить более целевое сканирование и задавать типы трафика. Умение использовать выражения делает tcpdump весьма продуктивным инструментом, в рукам сисадмина. Существует три основных типа выражений: type, dir, and proto.
Опции выражжения type бывают host, net и port.
Для выражения направления задаваемого dir существующие опции src, dst, src or dst, и src and dst.
Несколько стандартных выражений:
host // анализ трафика на основе IP адреса ( также работает с символьными именами, если не задано -n)
tcpdump host 1.2.3.4
src, dst // анализ трафика только для определенного назначения или передатчика
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6
net // захват трафика принадлежащего определенной сети
tcpdump net 1.2.3.0/24
proto // работает с tcp, udp, и icmp. Нужно помнить что proto не упоминается
tcpdump icmp
port // анализ трафика с определенного порта (входящего или исходящего)
tcpdump port 3389
src, dst port // фильтр базируется на входящем или исходящем порту
tcpdump src port 1025
tcpdump dst port 3389
Но наиболее сильным инструментом являются операнды, позволяющие задавать условия для выражений и опций, для более подробного вычленения информации об анализируемом трафике.
AND
and or &&
OR
or or ||
EXCEPT
not or !
TCP трафик с ресурса 10.15.123.33 с портом назвачения 3379:
# tcpdump -nnvvS tcp and src 10.15.123.33 and dst port 3379
Трафик переходящий из сети 192.168 с назначением на сети 10 или 172.16:
# tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
Non-ICMP трафик с точкой назначения 192.168.0.2 и из сети 172.16:
# tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net 172.16.0.0/16 and not icmp
Трафик с хостов Eros or Ares , но не идущий на стандартный SSH порт (для данного выражения требуется разрешение имен):
# tcpdump -vv src eros or ares and not dst port 22
Как видно из приведенных примеров, мы можем строить любые выражения, для любых целей. Также, используя сложный синтаксис, из анализа мы можем исключать любой тип трафика.
Также следует помнить о том, что мы можем строить запросы, включающие группы и пулы опций, заданных в одном запросе. Но для того чтобы утилита tcpdump обращала на них внимание их нужно помещать в скобки, беря выражение в одиночные кавычки:
Трафик идущий с хоста 10.0.2.4 на порты назначения 3379 или 22:
# tcpdump ‘src 10.0.2.4 and (dst port 3379 or 22)’
Также возможно производить фильтрацию на основе TCP флагов, например для вычленения SYN или RST пакетов:
Анализировать все URG пакеты:
# tcpdump ‘tcp[13] 32 != 0′
Анализировать все ACK пакеты:
# tcpdump ‘tcp[13] 16 != 0′
Анализировать все PSH пакеты:
# tcpdump ‘tcp[13] 8 != 0′
Анализировать все RST пакеты:
# tcpdump ‘tcp[13] 4 != 0′
Анализировать все SYN пакеты:
# tcpdump ‘tcp[13] 2 != 0′
Анализировать все FIN пакеты:
# tcpdump ‘tcp[13] 1 != 0′
Анализировать все SYN-ACK пакеты:
# tcpdump ‘tcp[13] = 18′
Нужно помнить что фильтр обрабатывает данный запрос следующим образом, проверяет 13 байт заголовка TCP пакета и заданный байт флага, на соответствие условию, например:
tcpdump ‘tcp[13] & 2 != 0′ – просмотр и сравнение 13 и 2 байтов заголовка, на условие что данные не равны 0, т.е. заданы 1.
Анализ специализированного трафика:
Анализировать весь IPv6 трафик:
# tcpdump ip6
Анализировать весь трафик с имеющимися флагами SYN и RST:
# tcpdump ‘tcp[13] = 6′
Анализировать весь трафик с имеющимся “evil bit”:
# tcpdump ‘ip[6] & 128 != 0′
Естественно что приведенные примеры не могут охватить всю полноту использования столь мощного инструмента как tcpdump, поэтому как обычно, лучшим другом сисадмина был и остается:
# man man
надеюсь что данная статья сможет несколько облегчить непростой опыт общения с этой замечательной программой
Что это за программа tcpdump
Welcome!
This is the home web site of tcpdump, a powerful command-line packet analyzer; and libpcap, a portable C/C++ library for network traffic capture.
Here you can find the latest stable version of tcpdump and libpcap, as well as current development versions, a complete documentation, and information about how to report bugs or contribute patches.
Documentation
The man pages and other documentation within releases and current development versions usually contain the most up to date information. Below you can find online versions of some of these documents, as well as tutorials and in-depth papers written by various authors.
tcpdump
- The most useful for tcpdump users: tcpdump(1) and pcap-filter(7) man pages.
- Other documents: README, installation notes and change log.
- Let’s learn tcpdump! by Julia Evans.
- Tcpdump for dummies by Alexander Sandler.
- A tcpdump tutorial with examples by Daniel Miessler.
- tcpdump cheat sheet by Jeremy Stretch.
- tcpdump advanced filters by Sebastien Wains.
libpcap
- pcap(3PCAP) and rpcapd(8) man pages.
- Other documents: README, installation notes and change log.
- Programming with pcap by Tim Carstens.
- The BSD Packet Filter: A New Architecture for User-level Packet Capture by Steven McCanne and Van Jacobson (Usenix Winter 1993). [PDF version]
- libpcap: An Architecture and Optimization Methodology for Packet Capture by Steve McCanne, CTO Riverbed Technology (Sharkfest’11).
- The Sniffer’s Guide to Raw Traffic by Martìn Casado.
- Aprendiendo a programar con libpcap (in Spanish), by Alejandro Lopez Monge.
- Programming with Libpcap – Sniffing the network from our own application by Luis MartinGarcia (Hakin9 Magazine, issue 2/2008). [code samples]
- Develop a Packet Sniffer with Libpcap by Vic Hargrave.
- Using libpcap in C by John Daniel Leon.
- What we talk about when we talk about pcap expressions by Nik Sultana.
- BPF and tcpdump by Andreas Karis.
Latest Releases
tcpdump
Version: 4.99.4
Release Date: April 7, 2023
Download: tcpdump-4.99.4.tar.gz (change log) (PGP signature and key)
This tcpdump release fixes an out-of-bounds write vulnerability (CVE-2023-1801) present in the previous release (4.99.3) in the SMB printer, which is not compiled by default. It also makes various minor improvements. This release requires libpcap 1.10.0 or later to pass all test cases.
libpcap
Version: 1.10.4
Release Date: April 7, 2023
Download: libpcap-1.10.4.tar.gz (change log) (PGP signature and key)
This libpcap release makes minor improvements to the build system, documentation and code style.
Current Development Versions
The current development versions are freely accessible through the GitHub Git hosting site (tcpdump, libpcap). You can clone these repositories with the following commands:
git clone https://github.com/the-tcpdump-group/tcpdump git clone https://github.com/the-tcpdump-group/libpcap
A read-only git mirror of all project repositories is available here in case anyone needs it. After cloning the git repositories you can configure and compile the source via either GNU Autoconf or CMake. There is various continuous integration involved in the development process.
Mailing List
tcpdump-workers This list is focused on development, it also receives announcements. Subscribe by sending an e-mail to [email protected] with the phrase “subscribe tcpdump-workers” as body and subject. A list archive, dating back to 2002-10-01, can be found here, and an archive dating back to 1999-10-18 can be found here. Posts to this list must originate from the subscriber’s address.
Patches, Bug Reports and Feature Requests
Please use GitHub as follows:
- Read the guidelines for contributing (tcpdump, libpcap).
- Submit bug reports and feature requests using the issue tracker (tcpdump, libpcap).
- Submit patches by forking the repository (tcpdump, libpcap) and opening a pull request.
How to Contribute
tcpdump and libpcap are open source software and anyone can make contributions. You can help by:
- downloading and testing libpcap and tcpdump on your platform
- contributing code
- proofreading the documentation and the man pages
- providing .pcap files for protocols or protocol features that tcpdump supports, but does not test yet
- helping to improve the continuous integration scripts and infrastructure
If you want to contribute, please subscribe to the tcpdump-workers mailing list. It’s a good idea to discuss bugfixes and new feature additions in advance, because the changes may have bigger implications than you think and your patch may not get accepted.
License
tcpdump and libpcap are under a 3-clause BSD license. While the current authors have no objection to converting to a 2-clause BSD license, the number of contributors that would need to agree makes this change unpracticable.
Contents
- Documentation
- Latest Releases
- Current Development Versions
- Mailing List
- Patches, Bug Reports and Feature Requests
- How to Contribute
- License
This web site is © 1999–2023 The Tcpdump Group (more information).
Sysadminium
Консольная утилита tcpdump предназначена для исследования сетевого трафика на linux серверах. Как работать с tcpdump на Linux? Рассмотрим в этой статье.
Оглавление скрыть
Установка и начало использования
Установить эту утилиту в debian или ubuntu можно так:
$ sudo apt install tcpdump
Использовать данное приложение может только администратор. Поэтому для работы используем sudo или работаем под пользователем root.
Первым делом можем посмотреть список доступных интерфейсов используя опцию -D:
$ sudo tcpdump -D 1.ens18 [Up, Running] 2.any (Pseudo-device that captures on all interfaces) [Up, Running] 3.lo [Up, Running, Loopback] 4.docker0 [Up] 5.nflog (Linux netfilter log (NFLOG) interface) 6.nfqueue (Linux netfilter queue (NFQUEUE) interface) 7.usbmon1 (USB bus number 1)
Рассмотрим эти интерфейсы:
- ens18 — обычный сетевой интерфейс;
- lo — локальный сетевой интерфейс;
- any — псевдоинтерфейс обозначающий все интерфейсы;
- docker0 — у меня установлен в системе docker и этот интерфейс относится к нему;
- nflog, nfqueue, usbmon1 — не относятся к сети, и в этой статье рассматриваться не будут.
Захват пакетов и вывод информации
Чтобы посмотреть все проходящие пакеты через выбранный интерфейс можно воспользоваться опцией -i . Но так как пакетов будет много, дополнительно укажем опцию -c , чтобы захватить только определённое количество пакетов:
$ sudo tcpdump -i ens18 -c 10 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on ens18, link-type EN10MB (Ethernet), capture size 262144 bytes 17:34:28.863132 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 1492170785:1492170901, ack 2057276671, win 501, length 116 17:34:28.863171 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 116:152, ack 1, win 501, length 36 17:34:28.863206 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 152:268, ack 1, win 501, length 116 17:34:28.863233 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 268:304, ack 1, win 501, length 36 17:34:28.863294 IP 172.30.81.7.57376 > 172.30.95.116.ssh: Flags [.], ack 152, win 49179, length 0 17:34:28.863306 IP 172.30.81.7.57376 > 172.30.95.116.ssh: Flags [.], ack 268, win 49179, length 0 17:34:28.865617 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 520:668, ack 1, win 501, length 148 17:34:28.865696 IP 172.30.81.7.57376 > 172.30.95.116.ssh: Flags [.], ack 668, win 49183, length 0 17:34:28.865792 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 888:1036, ack 1, win 501, length 148 17:34:28.865888 IP 172.30.95.116.ssh > 172.30.81.7.57376: Flags [P.], seq 1072:1204, ack 1, win 501, length 132 10 packets captured 42 packets received by filter 28 packets dropped by kernel
Теперь рассмотрим полученную информацию, которая состоит из заголовков каждого пакета выводимые построчно. Строка состоит из следующих полей:
- время;
- протокол;
- ip источника и его порт;
- ip назначения и его порт;
- флаги;
- seq — номер первого байта сегмента. Данные, передающиеся по TCP делятся на сегменты, а в заголовке указывается порядковый номер первого байта в этом сегменте;
- ack — номер подтверждения, если присутствует. Получатель после приёма сегмента или нескольких сегментов посылает номер подтверждения;
- win — размер окна приема. Получатель указывает размер окна, больше которого отправитель не может отправить сегмент;
- options — опции, если присутствуют;
- length — длина полезной нагрузки данных.
Эта утилита может показывать не только заголовки, но и содержимое пакетов, но об этом позже.
Фильтры
Чтобы не захватывать все пакеты, нужно использовать фильтры. Например можно захватить пакеты только от определённого ip адреса, номера порта или протокола. Вот список самых распространённых фильтров:
Например захватим 10 пакетов связанных с www.incentivespro.com.
$ sudo tcpdump -i ens18 -c 10 host yandex.ru
Совмещение различных фильтров
Фильтры можно совмещать, например захватим только icmp пакеты связанные с ip адресом 172.30.81.7:
$ sudo tcpdump -i ens18 -c 5 host 172.30.81.7 and icmp
Совмещать фильтры можно следующими операторами:
- and — для захвата пакета должны сработать оба фильтра;
- or — для захвата пакета должен сработать любой из фильтров;
- not — исключить из захвата эти пакеты.
В примере выше мы использовали — and.
Опции отвечающие за формат и количество выводимой информации
Теперь разберёмся с наиболее используемыми опциями, которые отвечают за формат вывода:
- -i — прослушивать конкретный интерфейс;
- -n — отображать ip адреса вместо имен;
- -nn — отображать ip адреса и номера портов вместо имени и названия протоколов;
- -q — минимальное количество информации о пакете;
- -t — не отображать метку времени в каждой строке;
- -tttt — задает вывод временных меток в такой форме: 2021-03-03 16:07:29.578942;
- -X — показывать содержимое пакета в шестнадцатеричной кодировке и в ASCII;
- -XX — то же, что и -X, но также показывает ethernet заголовки;
- -v, -vv, -vvv — увеличить количество получаемой информации;
- -c — получить определённое число пакетов и завершить работу.
Примеры команд
Смотрим все пакеты на всех интерфейсах или на каком-то одном:
# tcpdump -i any # tcpdump -i eth0
Ловим пакеты у которых адрес:
- источника или назначения равен 192.168.0.100;
- источника равен 192.168.0.100;
- назначения равен 192.168.0.100;
- источника или назначения входит в подсеть 192.168.0.0/24
# tcpdump host 192.168.0.100 # tcpdump src 192.168.0.100 # tcpdump dst 192.168.0.100 # tcpdump net 192.168.0.0/24
Ловим пакеты у которых порт:
- источника или назначения равен 8000;
- источника равен 8000;
- назначения равен 8000;
- входит в диапазон портов 8000-9000;
# tcpdump port 8000 # tcpdump src port 8080 # tcpdump dst port 8080 # tcpdump portrange 8000-9000
Ловим пакеты определенного протокола:
# tcpdump icmp # tcpdump ip # tcpdump ip6 # tcpdump tcp # tcpdump udp
Ловим tcp пакеты у которых порт входит в группу портов:
tcpdump tcp and portrange 0-1000
Тоже самое, но смотрим содержимое пакетов:
# tcpdump -X tcp and portrange 0-1000
Пишем результат в файл и считываем из файла:
# tcpdump port 8000 -w capture_file # tcpdump -r capture_file
Итог
Опции, фильтры и комбинации фильтров утилиты tcpdump позволяют исследовать работу сети. Это может пригодиться при поиске проблемы, при анализе безопасности сети, а также если вы изучаете какой-нибудь протокол и хотите на практике понаблюдать за его работой.
Имя статьи
Утилита tcpdump для анализа сети
Консольная утилита tcpdump предназначена для исследования сетевого трафика на linux серверах. Как работать с tcpdump на Linux? Рассмотрим в этой статье
При подготовке материала использовались источники:
http://odminblog.ru/usage-of-tcpdump/
https://www.tcpdump.org/