Tcpdump is a powerful command-line packet analyzer that allows you to capture and analyze network traffic. It’s a fundamental tool for network troubleshooting, security auditing, and protocol analysis on Linux and other Unix-like systems. Here are some common tcpdump examples to get you started:
Basic Usage:
- Capture all traffic on the default interface (often Eth0 or Wlan0):
· sudo tcpdump
This will display all network traffic flowing through your default network interface. It can be overwhelming, so you’ll usually want to filter the traffic. Press Ctrl+C to stop the capture.
- Capture traffic on a specific interface:
· sudo tcpdump — i eth0 # Capture traffic on the eth0 interface
Replace eth0 with the name of the interface you want to monitor (use ifconfig — a or ip link show to list available interfaces).
Фильтрация Трафика:
Настоящая сила tcpdump заключается в его способности фильтровать трафик по различным критериям.
- Фильтр по хосту (IP-адресу):
· sudo tcpdump host 192.168.1.100
Это позволит перехватывать весь трафик, поступающий на IP-адрес или исходящий от него 192.168.1.100.
- Фильтр по исходному хосту:
· sudo tcpdump src host 192.168.1.100
Это позволит перехватывать трафик, исходящий от IP-адреса 192.168.1.100.
- Фильтр по целевому хосту:
· sudo tcpdump dst host 192.168.1.100
Это позволит перехватывать трафик, предназначенный для IP-адреса 192.168.1.100.
- Фильтр по сети:
· sudo tcpdump net 192.168.1.0/24
Это позволит перехватывать трафик в сеть 192.168.1.0/24 (все IP-адреса в диапазоне) или из неё.
- Фильтровать по порту:
· sudo tcpdump port 80 # Capture traffic on port 80 (HTTP)
Это позволит перехватить весь трафик, поступающий на порт 80 или из него.
- Фильтр по порту источника:
· sudo tcpdump src port 1024-65535 # Capture traffic originating from ephemeral ports (1024-65535)
- Фильтр по порту назначения:
· sudo tcpdump dst port 443 # Capture traffic destined for port 443 (HTTPS)
- Фильтровать по протоколу:
· sudo tcpdump icmp # Capture ICMP traffic (ping)
· sudo tcpdump tcp # Capture TCP traffic
· sudo tcpdump udp # Capture UDP traffic
- Комбинируйте фильтры, используя And, Or и Not:
· sudo tcpdump host 192.168.1.100 and port 80 # Capture traffic to/from 192.168.1.100 on port 80
· sudo tcpdump host 192.168.1.100 or port 53 # Capture traffic to/from 192.168.1.100 OR on port 53 (DNS)
· sudo tcpdump not port 22 # Capture all traffic except SSH (port 22)
Сохранение данных захвата в файл:
- Сохраните захваченный трафик в файл (формат pcap):
· sudo tcpdump — i eth0 — w capture. pcap # Capture to capture. pcap file
Это позволяет сохранять захваченные пакеты в файл с именем capture. pcap. Затем вы можете проанализировать этот файл с помощью tcpdump или других инструментов для анализа пакетов, таких как Wireshark. Не забудьте остановить захват с помощью Ctrl+C.
- Чтение файла pcap:
· tcpdump — r capture. pcap
Расширенные параметры:
- -v, -vv, -vvv: увеличьте детализацию для более детального вывода.
- sudo tcpdump — vvv — i eth0 port 80 Предоставляет очень подробную информацию о HTTP-пакетах.
-x: Выведите данные пакета в шестнадцатеричном формате.
· sudo tcpdump — x — i eth0 port 80
- -X: Выводит данные пакета в шестнадцатеричном формате и в формате ASCII. Очень полезно для изучения содержимого HTTP-запросов и ответов.
· sudo tcpdump — X — i eth0 port 80
- -s snaplen: Укажите длину снимка (количество байтов, которые нужно захватить из каждого пакета). По умолчанию часто используется 68 или 96 байт, которых может быть недостаточно для захвата всего пакета. Используйте -s 0 для захвата всего пакета (будьте готовы к снижению производительности и нехватке места для хранения).
· sudo tcpdump — i eth0 — s 0 — w capture. pcap # Capture the entire packet
- -c count: захватывать только определенное количество пакетов.
· sudo tcpdump — i eth0 — c 10 — w capture. pcap # Capture 10 packets
- -n: Не разрешайте имена хостов или номера портов (быстрее, показывает необработанные IP-адреса и номера портов).
· sudo tcpdump — n — i eth0 host 192.168.1.100
- -q: Будьте менее многословны (спокойны).
Примеры с общими протоколами:
- Захват DNS-трафика:
· sudo tcpdump — i eth0 port 53
- Захват SSH-трафика:
· sudo tcpdump — i eth0 port 22
- Захват HTTP-запросов GET:
· sudo tcpdump — i eth0 — X — s 0 ‘tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420’ # GET
(Этот фильтр ищет строку «GET» в начале HTTP-запроса. Это сложный фильтр, но он может быть полезен для выделения HTTP-запросов GET).
- Захват HTTP-запросов POST:
· sudo tcpdump — i eth0 — X — s 0 ‘tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354’ # POST
- Захват определенного HTTP-пользовательского агента:
· sudo tcpdump — i eth0 — X — s 0 ‘tcp[20:2] > 0 and tcp[20:2] < 1500’ | grep — A 2 "User-Agent: Mozilla"
Важные соображения:
- Разрешения: для перехвата сетевого трафика обычно требуются права суперпользователя (с помощью sudo). Производительность: сбор всего трафика может быть ресурсозатратным, особенно в загруженных сетях. Используйте фильтры, чтобы сузить круг интересующего вас трафика. Конфиденциальность: будьте внимательны к данным, которые вы собираете. Сетевой трафик может содержать конфиденциальную информацию, такую как пароли, имена пользователей и номера кредитных карт. Собирайте только тот трафик, для анализа которого у вас есть законные основания, и принимайте меры для защиты собранных данных. Wireshark: для более глубокого анализа рассмотрите возможность использования Wireshark — графического анализатора пакетов, который может считывать файлы pcap, созданные tcpdump. Wireshark предоставляет удобный интерфейс для изучения пакетов, фильтрации трафика и анализа протоколов.
Эти примеры должны стать для вас хорошей отправной точкой для использования tcpdump. Поэкспериментируйте с различными фильтрами и опциями, чтобы фиксировать именно тот трафик, который вам нужно проанализировать. Не забудьте обратиться к странице tcpdump руководства (man tcpdump) для получения более подробной информации.