linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Команды/cmd-tcpdump

kb/commands ── Команды ── advanced

tcpdump - захват пакетов

tcpdump читает пакеты с интерфейса по BPF-фильтру. Поддерживает запись pcap для последующего анализа в Wireshark.

view as markdownaka: pcap, packet-capture

Базовый синтаксис

tcpdump [-OPTIONS] [BPF-FILTER]

Минимально работающие команды:

bash
sudo tcpdump -i eth0                # снять всё на eth0
sudo tcpdump -i any                 # все интерфейсы
sudo tcpdump -i lo -nn -c 10        # 10 пакетов на loopback, без DNS-резолвинга

Главные флаги

  • -i IFACE - интерфейс (any для всех)
  • -n - не резолвить адреса в имена
  • -nn - не резолвить и порты в имена сервисов (80 вместо http)
  • -c N - снять N пакетов и выйти
  • -w FILE.pcap - записать в файл (читается Wireshark'ом)
  • -r FILE.pcap - прочитать из файла
  • -s SNAP - snaplen (сколько байт от пакета сохранять; 0 = весь)
  • -e - показать L2-header (MAC-адреса)
  • -X - hex dump payload'а
  • -A - ASCII payload (HTTP requests читаются прямо)
  • -vvv - максимум details

BPF фильтры

Самое мощное в tcpdump - фильтр на чистом BPF:

bash
tcpdump -i any 'host 8.8.8.8'
tcpdump -i eth0 'port 443'
tcpdump -i any 'tcp port 80 and host example.com'
tcpdump -i any 'icmp'
tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'   # только SYN
tcpdump -i any 'net 10.0.0.0/8'
tcpdump -i any 'not arp'

Главные ключевые слова:

  • host, src, dst - IP-адрес
  • port, src port, dst port - порт
  • tcp, udp, icmp, arp - протокол
  • net - подсеть
  • and, or, not - логика

Скобочки нужно экранировать или брать в '...':

bash
tcpdump -i any '(port 80 or port 443) and host google.com'

Запись в pcap

bash
sudo tcpdump -i any -w capture.pcap 'tcp port 443'
# ... сделать что-то ...
Ctrl+C
ls -lh capture.pcap                 # размер pcap
tcpdump -r capture.pcap -nn | head  # прочитать обратно

Pcap-файл открывается в Wireshark - там graphical-парсер всех протоколов с цветной подсветкой полей.

TCP handshake глазами

Например посмотреть tcp-handshake на loopback:

bash
sudo tcpdump -i lo -nn 'tcp port 8080' -c 6
# Flags [S],     seq 1000              ← SYN
# Flags [S.],    seq 5000, ack 1001    ← SYN-ACK
# Flags [.],     ack 5001              ← ACK
# Flags [P.],    seq 1001:1041, ack 5001  ← данные с PUSH

Полезные оптимизации

  • -s 96 - снять только заголовки (если интересен только flow), очень экономит размер pcap'а
  • -G 60 -W 24 -w cap_%H%M.pcap - ротация: 60 секунд × 24 файла = час непрерывной записи без переполнения

§ команды

bash
sudo tcpdump -i any -nn 'tcp port 80' -c 20

20 первых HTTP-пакетов на любом интерфейсе

bash
sudo tcpdump -i any -w trace.pcap 'host 1.2.3.4'

Записать в pcap всё связанное с хостом 1.2.3.4 (Ctrl+C чтобы остановить)

bash
sudo tcpdump -i any -nn 'icmp'

Только ICMP - посмотреть пинги (см. [[icmp]])

bash
sudo tcpdump -nei eth0 -c 5 'arp'

ARP-пакеты с L2-header'ом (-e) - кто кого ищет

bash
sudo tcpdump -i any -A 'tcp port 80' -c 5

ASCII-payload - на HTTP видишь GET и Host header прямо в выводе

§ см. также

  • ethernet-frameEthernet frameEthernet-frame - единица передачи на L2: dst-MAC, src-MAC, ethertype, payload (обычно IP-пакет), FCS-checksum. Стандартный MTU = 1500 байт.
  • tcp-handshakeTCP three-way handshakeTCP-соединение открывается тремя пакетами: SYN от клиента, SYN-ACK от сервера, ACK от клиента. После - соединение Established, можно слать данные.
  • icmpICMPICMP - служебный протокол поверх IP для control-сообщений: echo (ping), destination-unreachable, time-exceeded (используется traceroute), MTU discovery. Не для данных.

§ упоминается в уроках

  • ›advanced-03-tc-netem
  • ›advanced-05-bandwidth-iperf
  • ›intermediate-02-tcp-handshake
  • ›intermediate-07-debugging-with-proc
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки