tcpdump Дамп сетевого трафика Тип файла: команда usage: tcpdump [-B size ] [-c count ] [-C file_size ] [-E algo:secret ] [-F file ] [-G seconds ] [-i interface ] [-j tstamptype ] [-M secret ] [--number ] [-Q in | out | inout ] [-r file ] [-s snaplen ] [--time-stamp-precision precision ] [--immediate-mode ] [-T type ] [--version ] [-V file ] [-w file ] [-W filecount ] [-y datalinktype ] [-z postrotate-command ] [-Z user ] [expression ] Man Linux: [ Ссылка 1 ] [ Ссылка 2 ] Комментарии Команда Tcpdump — это известный инструмент анализа сетевых пакетов, который используется для отображения TCP\IP и других сетевых пакетов, передаваемых по сети, подключенной к системе, на которой установлен tcpdump. Tcpdump использует библиотеку libpcap для захвата сетевых пакетов и доступен практически для всех версий Linux/Unix. Tcpdump — один из лучших инструментов сетевого анализа для специалистов по информационной безопасности. Tcpdump предназначен для всех, для хакеров и людей, которые плохо разбираются в TCP/IP. ПАРАМЕТРЫ Ниже приведены некоторые параметры tcpdump (с полезными примерами), которые помогут вам в работе с этим инструментом. Их очень легко забыть и/или спутать с фильтрами других типов, например эфирными. Первым из них является -n, который запрашивает, чтобы имена не разрешались, что приводит к самим IP-адресам. Второй — -X, который отображает как шестнадцатеричное, так и ascii-содержимое пакета. Последним является -S, который изменяет отображение порядковых номеров на абсолютные, а не на относительные. Показать содержимое пакета как в шестнадцатеричном, так и в ascii-формате. tcpdump -X .... То же, что и -X, но также показывает заголовок Ethernet. tcpdump -XX Показать список доступных интерфейсов tcpdump -D Линейно-читаемый вывод (для просмотра при сохранении или отправки другим командам) tcpdump -l Будьте менее многословны (более тихие) в своем выводе. tcpdump -q Дайте удобочитаемую отметку времени на выходе. tcpdump -t : Дайте максимально удобочитаемую отметку времени на выходе. tcpdump -тттт : Слушайте на интерфейсе eth0. tcpdump -i eth0 Подробный вывод (чем больше v, тем больше вывод). tcpdump -vv Получите только x пакетов, а затем остановитесь. tcpdump -c Определите длину снимка (размер) захвата в байтах. Используйте -s0, чтобы получить все, если вы намеренно не захватываете меньше. tcpdump -s Вывести абсолютные порядковые номера. tcpdump -S Получите также заголовок Ethernet. tcpdump -е Расшифруйте трафик IPSEC, предоставив ключ шифрования. tcpdump -Е ОСНОВНОЕ ИСПОЛЬЗОВАНИЕ Показать доступные интерфейсы tcpdump -D tcpdump --список интерфейсов Давайте начнем с базовой команды, которая даст нам HTTPS-трафик: tcpdump -nnSX порт 443 Найти трафик по IP хост tcpdump 1.1.1.1 Фильтрация по источнику и/или месту назначения tcpdump источник 1.1.1.1 tcpdump дст 1.0.0.1 Поиск пакетов по сети tcpdump сеть 1.2.3.0/24 Низкий выход: tcpdump-nnvvS Средний выход: tcpdump -nnvvXS Тяжелый выход: tcpdump-nnvvXSs 1514 Творческий подход Выражения очень хороши, но настоящее волшебство tcpdump заключается в возможности творчески их комбинировать, чтобы изолировать именно то, что вы ищете. Комбинировать можно тремя способами: И и или && ИЛИ или или || КРОМЕ не или ! Пример использования: Трафик с 192.168.1.1 И предназначенный для портов 3389 или 22 tcpdump 'src 192.168.1.1 и (dst порт 3389 или 22)' Передовой Покажите мне все пакеты 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' Показать весь трафик с установленными флагами SYN и RST: (это никогда не должно происходить) tcpdump 'tcp[13] = 6' Показать весь трафик с установленным «злым битом»: tcpdump 'ip[6] & 128!= 0' Показать весь трафик IPv6: tcpdump ip6 Печатать перехваченные пакеты в ASCII tcpdump -A -i eth0 Отображение захваченных пакетов в HEX и ASCII tcpdump -XX -i eth0 Захват и сохранение пакетов в файле tcpdump -w 0001.pcap -i eth0 Чтение файла захваченных пакетов tcpdump -r 0001.pcap Захват пакетов IP-адреса tcpdump -n -i eth0 Захватывать только пакеты TCP. tcpdump -i eth0 tcp Захватить пакет из определенного порта tcpdump -i eth0 порт 22 Захват пакетов с исходного IP tcpdump -i eth0 источник 192.168.0.2 Захват пакетов с IP-адреса назначения tcpdump -i eth0 dst 50.116.66.139 Захватите любую упаковку, прибывающую из х.х.х.х. tcpdump -n хост src x.x.x.x Захватите любой пакет, приходящий или идущий в x.x.x.x tcpdump -n хост x.x.x.x Захватить любой пакет, идущий в x.x.x.x tcpdump -n dst хост x.x.x.x Захватите любую упаковку, прибывающую из х.х.х.х. tcpdump -n хост src x.x.x.x Захват любого пакета, идущего в сеть x.x.x.0/24 tcpdump -n dst net x.x.x.0/24 Захват любого пакета, приходящего из сети x.x.x.0/24 tcpdump -n src net x.x.x.0/24 Захватить любой пакет с портом назначения x tcpdump -n порт dst x Захватить любой пакет, приходящий с порта x tcpdump -n порт источника x Захват любых пакетов от или до диапазона портов от x до y tcpdump -n dst(или src) portrange x-y Захватить любой диапазон портов tcp или udp от x до y tcpdump -n tcp(или udp) dst(или src) portrange x-y Захватывать любые пакеты с dst ip x.x.x.x и портом y tcpdump -n "хост dst x.x.x.x и порт dst y" Захватывать любые пакеты с dst ip x.x.x.x и dst портами x, z tcpdump -n "хост dst x.x.x.x и (порт dst x или порт dst z)" Захват ICMP, ARP tcpdump -v icmp(или arp) Захват пакетов на интерфейсе eth0 и создание дампа в файл cap.txt tcpdump -i eth0 -w cap.txt Получить содержимое пакета с шестнадцатеричным выводом tcpdump -c 1 -X icmp Показать трафик, относящийся к определенному порту tcpdump порт 3389 tcpdump src порт 1025 Показать трафик одного протокола tcpdump icmp Найти трафик по IP хост tcpdump 1.1.1.1 Фильтрация по источнику и/или месту назначения tcpdump источник 1.1.1.1 tcpdump дст 1.0.0.1 Поиск пакетов по сети tcpdump сеть 1.2.3.0/24 Получить содержимое пакета с шестнадцатеричным выводом tcpdump -c 1 -X icmp Показать трафик, относящийся к определенному порту tcpdump порт 3389 tcpdump src порт 1025 Показать трафик одного протокола tcpdump icmp Показать только трафик IP6 tcpdump ip6 Найдите трафик, используя диапазоны портов порт tcpdump 21-23 Поиск трафика по размеру пакета tcpdump меньше 32 tcpdump больше 64 tcpdump <= 128 tcpdump => 128 Чтение/запись снимков в файл (pcap) tcpdump порт 80 -w файл_захвата tcpdump -r файл_захвата Все дело в комбинациях Представление необработанных выходных данных tcpdump -ttnnvvS Вот несколько примеров комбинированных команд. С определенного IP и предназначенного для определенного порта tcpdump -nnvvS src 10.5.2.3 и порт dst 3389 Из одной сети в другую tcpdump -nvX src net 192.168.0.0/16 и dst net 10.0.0.0/8 или 172.16.0.0/16 Не ICMP-трафик, идущий на определенный IP-адрес tcpdump dst 192.168.0.2 и сеть src, а не icmp Трафик с хоста, который не находится на определенном порту tcpdump -vv src mars, а не dst порт 22 Изолируйте флаги TCP RST. tcpdump 'tcp[13] & 4!=0' tcpdump 'tcp[tcpflags] == tcp-rst' Изолируйте флаги TCP SYN. tcpdump 'tcp[13] & 2!=0' tcpdump 'tcp[tcpflags] == tcp-syn' Изолируйте пакеты с установленными флагами SYN и ACK. tcpdump 'tcp[13]=18' Изолируйте флаги TCP URG. tcpdump 'tcp[13] & 32!=0' tcpdump 'tcp[tcpflags] == tcp-urg' Изолируйте флаги TCP ACK. tcpdump 'tcp[13] & 16!=0' tcpdump 'tcp[tcpflags] == tcp-ack' Изолируйте флаги TCP PSH. tcpdump 'tcp[13] & 8!=0' tcpdump 'tcp[tcpflags] == tcp-psh' Изолируйте флаги TCP FIN. tcpdump 'tcp[13] & 1!=0' tcpdump 'tcp[tcpflags] == tcp-fin' Команды, которые я использую почти каждый день И SYN, и набор RST tcpdump 'tcp[13] = 6' Найти пользовательские агенты HTTP tcpdump -vvAls0 | grep 'Агент пользователя:' tcpdump -nn -A -s1500 -l | grep "Агент пользователя:" Используя egrep и несколько совпадений, мы можем получить пользовательский агент и хост (или любой другой заголовок) из запроса. tcpdump -nn -A -s1500 -l | egrep -i 'Агент пользователя: | Хост:' Захватывать только пакеты HTTP GET и POST только те пакеты, которые соответствуют GET. tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354' Извлечь URL-адрес HTTP-запроса tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:" Извлечение HTTP-паролей в POST-запросах tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:" Захват файлов cookie с сервера и с клиента tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Хост:|Cookie:' Захватить все пакеты ICMP tcpdump -n icmp Показать пакеты ICMP, которые не являются ECHO/REPLY (стандартный ping) tcpdump 'icmp[icmptype] != icmp-echo и icmp[icmptype] != icmp-echoreply' Захват электронной почты SMTP / POP3 tcpdump -nn -l порт 25 | grep -i 'ПОЧТА ОТ\|RCPT КОМУ' Устранение неполадок с запросом и ответом NTP tcpdump dst порт 123 Захват учетных данных и команд FTP tcpdump -nn -v порт ftp или ftp-данные Повернуть файлы захвата tcpdump -w /tmp/capture-%H.pcap -G 3600 -C 200 Захват IPv6-трафика tcpdump -nn ip6 прототип 6 IPv6 с UDP и чтением ранее сохраненного файла захвата. tcpdump -nr ipv6-test.pcap ip6 прототип 17 Обнаружение сканирования портов в сетевом трафике tcpdump -nn ПРИМЕР ИСПОЛЬЗОВАНИЯ Пример фильтра, показывающий тестирование скрипта Nmap NSE На цели: nmap -p 80 --script=http-enum.nse целевой IP-адрес На сервере: tcpdump -nn порт 80 | grep "ПОЛУЧИТЬ /" ПОЛУЧИТЬ /w3perl/HTTP/1.1 ПОЛУЧИТЬ /w-агора/ HTTP/1.1 ПОЛУЧИТЬ /way-board/ HTTP/1.1 ПОЛУЧИТЬ /web800fo/HTTP/1.1 ПОЛУЧИТЬ /веб-доступ/ HTTP/1.1 ПОЛУЧИТЬ /webadmin/ HTTP/1.1 ПОЛУЧИТЬ /вебадмин/ HTTP/1.1 Захват начальных и конечных пакетов каждого нелокального хоста tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin)!= 0, а не src и dst net localnet' Захват DNS-запроса и ответа Фильтрация DNS с помощью Tcpdump tcpdump -i wlp58s0 -s0 порт 53 Захват пакетов данных HTTP tcpdump 'tcp порт 80 и (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' Лучшие хосты по пакетам tcpdump -nnn -t -c 200 | вырезать -f 1,2,3,4 -d '.' | сортировать | уникальный -c | сортировать - номер | голова -n 20 Захватите все пароли открытым текстом tcpdump порт http или порт ftp или порт smtp или порт imap или порт pop3 или порт telnet -l -A | egrep -i -B5 'pass=|pwd=|log= |login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user: |username:|password:|login: |пройти |пользователь ' tcpdump порт http или порт ftp или порт smtp или порт imap или порт pop3 или порт telnet -lA | egrep -i -B5 'pass=|pwd= |log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:| username:|password:|login: |пройти |пользователь ' Пример DHCP tcpdump -v -n порт 67 или 68 GET-запросы в открытом виде tcpdump -vvAls0 | grep 'ПОЛУЧИТЬ' Найти заголовки хоста HTTP tcpdump -vvAls0 | grep 'Хост:' Найти файлы cookie HTTP tcpdump -vvAls0 | grep 'Set-Cookie|Хост:|Cookie:' Найдите соединения SSH tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D' Найти DNS-трафик tcpdump -vvAs0 порт 53 Найти FTP-трафик tcpdump -vvAs0 порт ftp или ftp-данные Найти NTP-трафик tcpdump -vvAs0 порт 123 Захват электронной почты SMTP / POP3 tcpdump -nn -l порт 25 | grep -i 'ПОЧТА ОТ\|RCPT КОМУ' Режим линейной буферизации tcpdump -i eth0 -s0 -l порт 80 | grep 'Сервер:' Найти трафик со злым битом tcpdump 'ip[6] & 128!= 0' Фильтрация по протоколу (ICMP) и полям, специфичным для протокола (тип ICMP) Tcpdump: фильтровать пакеты с флагами TCP tcpdump -n icmp и 'icmp[0] != 8 и icmp[0] != 0' Эту же команду можно использовать с предварительно определенным смещением поля заголовка (icmptype) и значениями поля типа ICMP (icmp-echo и icmp-echoreply): tcpdump -n icmp и icmp[icmptype] != icmp-echo и icmp[icmptype] != icmp-echoreply Фильтр по полю TOS tcpdump -v -n ip и ip[1]!=0 Фильтр по полю TTL tcpdump -v ip и 'ip[8]<2' Фильтровать по флагам TCP (SYN/ACK) tcpdump -n tcp и порт 80 и 'tcp[tcpflags] & tcp-syn == tcp-syn' В приведенном выше примере перехватываются все пакеты с установленным флагом TCP SYN. Также могут быть установлены другие флаги (например, ACK). Пакеты, для которых установлены только флаги TCP SYN, могут быть перехвачены. tcpdump tcp и порт 80 и 'tcp[tcpflags] == tcp-syn' Перехватывать TCP-пакеты SYN/ACK (как правило, ответы от серверов): tcpdump -n tcp и 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)' tcpdump -n tcp и 'tcp[tcpflags] & tcp-syn == tcp-syn' и 'tcp[tcpflags] & tcp-ack == tcp-ack' Перехватывать ARP-пакеты tcpdump -vv -e -nn эфирный протокол 0x0806 Фильтр по длине IP-пакета tcpdump -l icmp и '(ip[2:2]>50)' -w - |tcpdump -r - -v ip и '(ip[2:2]<60)' Примечание: из-за ошибки в tcpdump следующая команда не перехватывает пакеты должным образом: tcpdump -v -n icmp и '(ip[2:2]>50)' и '(ip[2:2]<60)' Фильтровать инкапсулированное содержимое (ICMP в PPPoE) tcpdump -v -n icmp Тише tcpdump -q -i eth0 tcpdump -t -i eth0 tcpdump -A -n -q -i eth0 'порт 80' tcpdump -A -n -q -t -i eth0 'порт 80' Печатать только полезные пакеты из HTTP-трафика tcpdump -A -s 0 -q -t -i eth0 'порт 80 и ( ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12:2]&0xf0 )>>2)) != 0)' Дамп SIP-трафика tcpdump -nq -s 0 -A -vvv порт 5060 и хост 1.2.3.4 Проверка содержимого пакета tcpdump -i любой -c10 -nn -A порт 80 Проверка содержимого пакета sudo tcpdump -i любой -c10 -nn -A порт 80 |