Първоначално тя е написана през 1988 г. от четирима работници на Мрежовата изследователска група в лабораторията „Лорънс Бъркли“ в Калифорния. Той е организиран единадесет години по-късно от Майкъл Ричардсън и Бил Фенър през 1999 г., които създават сайта на tcpdump. Tcpdump работи на всички Unix-подобни операционни системи. Версията на Tcpdump за Windows се нарича WinDump и използва WinPcap, алтернативата на windows за libpcap.
Използвайте щракването, за да инсталирате tcpdump:
$ sudo snap инсталирайте tcpdumpИзползвайте вашия мениджър на пакети, за да инсталирате tcpdump:
$ sudo apt-get install tcpdump (Debian / Ubuntu)$ sudo dnf инсталиране на tcpdump (CentOS / RHEL 6 и 7)
$ sudo yum инсталиране на tcpdump (Fedora / CentOS / RHEL 8)
Нека да видим различни употреби и резултати, докато изследваме tcpdump!
UDP
Tcpdump може да изхвърля и UDP пакети. Ще използваме инструмент netcat (nc), за да изпратим UDP пакет и след това да го изхвърлим.
$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337В дадената по-горе команда изпращаме UDP пакет, състоящ се от низа „Tcpdumper“ към UDP порта 1337 чрез localhost. Tcpdump улавя пакета, изпратен през UDP порт 1337, и ще го покаже.
Сега ще изхвърлим този пакет с помощта на tcpdump.
$ sudo tcpdump -i lo udp порт 1337 -vvv -XТази команда ще улови и покаже заснетите данни от пакетите в ASCII, както и шестнадесетична форма.
tcpdump: слушане на lo, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, отместване 0, флагове [DF], прото UDP (17), дължина 37)
localhost.54574> localhost.1337: [лош udp cksum 0xfe24 -> 0xeac6!] UDP, дължина 9
0x0000: 4500 0025 7f8a 4000 4011 bd3b 7f00 0001 E ...% ... @.@…;…
0x0010: 7f00 0001 d52e 0539 0011 fe24 7463 7064… 9… $ tcpd
0x0020: 756d 7065 72 umper
Както виждаме, пакетът е изпратен до порт 1337 и дължината е 9 като низ tcpdumper е 9 байта. Също така можем да видим, че пакетът е показан в шестнадесетичен формат.
DHCP
Tcpdump може също да извършва разследвания на DHCP пакети по мрежата. DHCP използва UDP порт № 67 или 68, така че ще определим и ограничим tcpdump само за DHCP пакети. Да приемем, че използваме wifi мрежов интерфейс.
Командата, използвана тук, ще бъде:
tcpdump: слушане на wlan0, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта
03:52:04.004356 00: 11: 22: 33: 44: 55: 00: 11: 22: 33: 44: 66, етертип IPv4 (0x0800), дължина 342: (tos 0x0, ttl 64, id 39781, отместване 0, флагове [DF ], прото UDP (17), дължина 328)
192.168.10.21.68> 192.168.10.1.67: [udp sum ok] BOOTP / DHCP, Заявка от 00: 11: 22: 33: 44: 55, дължина 300, xid 0xfeab2d67, Знамена [няма] (0x0000)
Клиент-IP 192.168.10.16
Клиент-Ethernet-адрес 00: 11: 22: 33: 44: 55
Vendor-rfc1048 Разширения
Вълшебна бисквитка 0x63825363
DHCP-съобщение (53), дължина 1: Освобождаване
Идентификатор на сървъра (54), дължина 4: 192.168.10.1
Име на хост (12), дължина 6: "папагал"
END (255), дължина 0
PAD (0), дължина 0, възниква 42
DNS
DNS, известна още като Domain Name System, потвърждава, че ви предоставя това, което търсите, като съпоставя името на домейна с адреса на домейна. За да проверите комуникацията на DNS на вашето устройство през интернет, можете да използвате tcpdump по следния начин. DNS използва UDP порт 53 за комуникация.
$ sudo tcpdump -i wlan0 udp порт 53tcpdump: слушане на wlan0, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, отместване 0, флагове [DF], прото UDP (17), дължина 72)
192.168.10.16.45899> един.един.един.един.домейн: [udp sum ok] 20852+ A? моцила.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, отместване 0, флагове [DF], прото UDP (17), дължина 104)
един.един.един.един.домейн> 192.168.10.16.45899: [udp sum ok] 20852 q: A? моцила.cloudflare-dns.com. 2/0/0 мозила.cloudflare-dns.com. [24s] A 104.16.249.249, мозила.cloudflare-dns.com. [24s] A 104.16.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, отместване 0, флагове [DF], прото UDP (17), дължина 66)
192.168.10.16.34043> един.един.един.един.домейн: [udp sum ok] 40757+ PTR? 1.1.1.1.в-адрес.арпа. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, отместване 0, флагове [DF], прото UDP (17), дължина 95)
един.един.един.един.домейн> 192.168.10.16.34043: [udp sum ok] 40757 q: PTR? 1.1.1.1.в-адрес.арпа. 1/0/0 1.1.1.1.в-адрес.арпа. [26m53s] PTR един.един.един.един. (67)
ARP
Протоколът за разрешаване на адреси се използва за откриване на адреса на връзката, например MAC адрес. Той е свързан с даден адрес на интернет слой, обикновено IPv4 адрес.
Използваме tcpdump за улавяне и четене на данните, пренасяни в arp пакетите. Командата е толкова проста, колкото:
$ sudo tcpdump -i wlan0 arp -vvvtcpdump: слушане на wlan0, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Заявка кой има 192.168.10.1 кажи 192.168.10.2, дължина 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), Заявка кой има 192.168.10.21 кажи 192.168.10.1, дължина 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), отговор 192.168.10.21 е-at 00: 11: 22: 33: 44: 55 (oui Unknown), дължина 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Заявка кой има 192.168.10.1 кажи 192.168.10.2, дължина 28
ICMP
ICMP, известен също като Internet Control Message Protocol, е поддържащ протокол в пакета за интернет протоколи. ICMP се използва като информационен протокол.
За да видим всички ICMP пакети на интерфейс, можем да използваме тази команда:
$ sudo tcpdump icmp -vvvtcpdump: слушане на wlan0, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, отместване 0, флагове [DF], прото ICMP (1), дължина 84)
192.168.10.16> 192.168.10.1: ICMP ехо заявка, id 47363, sq 1, дължина 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, отместване 0, флагове [няма], прото ICMP (1), дължина 84)
192.168.10.1> 192.168.10.16: ICMP ехо отговор, id 47363, sq 1, дължина 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, отместване 0, флагове [DF], прото ICMP (1), дължина 84)
192.168.10.16> 192.168.10.1: ICMP ехо заявка, id 47363, sq 2, дължина 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, отместване 0, флагове [няма], прото ICMP (1), дължина 84)
192.168.10.1> 192.168.10.16: ICMP ехо отговор, id 47363, sq 2, дължина 64
NTP
NTP е мрежов протокол, създаден специално за синхронизиране на времето в мрежа от машини. За да уловите трафика по ntp:
$ sudo tcpdump dst порт 12304:31:05.547856 IP (tos 0x0, ttl 64, id 34474, отместване 0, флагове [DF], прото UDP (17), дължина 76)
192.168.10.16.ntp> time-b-wwv.нист.gov.ntp: [udp sum ok] NTPv4, клиент, дължина 48
Индикатор за скок: часовник несинхронизиран (192), слой 0 (неуточнен), анкета 3 (8 секунди), прецизност -6
Забавяне на корен: 1.000000, коренна дисперсия: 1.000000, Идентификационен номер: (без спецификация)
Клеймо за справка: 0.000000000
Клеймо на оригинатора: 0.000000000
Получаване на клеймо за време: 0.000000000
Клеймо за време на предаване: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Оригинатор - Получаване на клеймо за време: 0.000000000
Оригинатор - Клеймо за време на предаване: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, отместване 0, флагове [няма], прото UDP (17), дължина 76)
време-b-wwv.нист.gov.ntp> 192.168.10.16.ntp: [udp sum ok] NTPv3, сървър, дължина 48
Индикатор за скок: (0), Stratum 1 (първична референция), анкета 13 (8192s), точност -29
Root Delay: 0.000244, коренна дисперсия: 0.000488, Идентификационен номер: NIST
Референтен клеймо: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Клеймо на оригинатора: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Получаване на клеймо за време: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Клеймо за време на предаване: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Инициатор - Получаване на клеймо за време: +9.480896026
Оригинатор - Клеймо за време на предаване: +9.480897141
SMTP
SMTP или Simple Mail Transfer Protocol се използва главно за имейли. Tcpdump може да използва това, за да извлече полезна информация за имейл. Например, за да извлечете получатели / податели на имейли:
$ sudo tcpdump -n -l порт 25 | grep -i 'ПОЩА ОТ \ | RCPT ДО'IPv6
IPv6 е „следващото поколение“ на IP, предоставяйки широк спектър от IP адреси. IPv6 помага за постигане на дългосрочно здраве на Интернет.
За да уловите IPv6 трафик, използвайте ip6 филтъра, указващ протоколите TCP и UDP, използвайки proto 6 и proto-17.
$ sudo tcpdump -n -i всеки ip6 -vvvtcpdump: тип връзка за данни LINUX_SLL2
tcpdump: прослушване на какъвто и да е, LINUX_SLL2 тип Linux (Linux приготвен v2), дължина на моментна снимка 262144 байта
04:34:31.847359 lo В IP6 (flowlabel 0xc7cb6, hlim 64, UDP (17) next-header дължина на полезния товар: 40) :: 1.49395> :: 1.49395: [лош udp cksum 0x003b -> 0x3587!] UDP, дължина 32
04:34:31.859082 lo В IP6 (flowlabel 0xc7cb6, hlim 64, UDP (17) next-header дължина на полезния товар: 32) :: 1.49395> :: 1.49395: [лош udp cksum 0x0033 -> 0xeaef!] UDP, дължина 24
04:34:31.860361 lo В IP6 (Flowlabel 0xc7cb6, hlim 64, UDP (17) next-header дължина на полезния товар: 40) :: 1.49395> :: 1.49395: [лош udp cksum 0x003b -> 0x7267!] UDP, дължина 32
04:34:31.871100 lo В IP6 (flowlabel 0xc7cb6, hlim 64, UDP (17) next-header дължина на полезния товар: 944) :: 1.49395> :: 1.49395: [лош udp cksum 0x03c3 -> 0xf890!] UDP, дължина 936
Уловени 4 пакета
12 пакета, получени чрез филтър
0 пакета, изпуснати от ядрото
'-C 4' осигурява брой пакети само до 4 пакета. Можем да посочим броя на пакетите до n и да уловим n пакета.
HTTP
Протоколът за прехвърляне на хипертекст се използва за прехвърляне на данни от уеб сървър в браузър за преглед на уеб страници. HTTP използва комуникация с TCP форма. По-точно се използва TCP порт 80.
За да отпечатате всички IPv4 HTTP пакети към и от порт 80:
tcpdump: слушане на wlan0, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта03:36:00.602104 IP (tos 0x0, ttl 64, id 722, отместване 0, флагове [DF], прото TCP (6), дължина 60)
192.168.10.21.33586> 192.168.10.1.http: Flags [S], cksum 0xa22b (правилно), sq 2736960993, win 64240, опции [mss 1460, sackOK, TS val 389882294 ecr 0, nop, wscale 10], дължина 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), дължина 60)
192.168.10.1.http> 192.168.10.21.33586: Знамена [S.], cksum 0x2dcc (правилно), sq 4089727666, ack 2736960994, win 14480, опции [mss 1460, sackOK, TS val 30996070 ecr 389882294, nop, wscale 3], дължина 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, отместване 0, флагове [DF], прото TCP (6), дължина 52)
192.168.10.21.33586> 192.168.10.1.http: Знамена [.], cksum 0x94e2 (правилно), sq 1, ack 1, win 63, опции [nop, nop, TS val 389882297 ecr 30996070], дължина 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, отместване 0, флагове [DF], прото TCP (6), дължина 481)
HTTP заявки ..
192.168.10.21.33586> 192.168.10.1.http: Знамена [P.], cksum 0x9e5d (правилно), sq 1: 430, ack 1, win 63, опции [nop, nop, TS val 389882297 ecr 30996070], дължина 429: HTTP, дължина: 429GET / HTTP / 1.1
Водещ: 192.168.10.1
Потребителски агент: Mozilla / 5.0 (Windows NT 10.0; rv: 78.0) Gecko / 20100101 Firefox / 78.0
Приемам: text / html, application / xhtml + xml, application / xml; q = 0.9, image / webp, * / *; q = 0.8
Accept-Language: en-US, en; q = 0.5
Приемане-кодиране: gzip, дефлация
DNT: 1
Връзка: поддържайте жив
„Бисквитка“: _TESTCOOKIESUPPORT = 1; SID = c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Заявки за надграждане-несигурни: 1
И отговорите също се улавят
192.168.10.1.http> 192.168.10.21.33586: Знамена [P.], cksum 0x84f8 (правилно), sq 1: 523, ack 430, win 1944, опции [nop, nop, TS val 30996179 ecr 389882297], дължина 522: HTTP, дължина: 522HTTP / 1.1 200 ОК
Сървър: уеб сървър на ZTE 1.0 ZTE corp 2015.
Диапазони за приемане: байтове
Връзка: близо
Опции за X-Frame: SAMEORIGIN
Контрол на кеша: no-cache, no-store
Дължина на съдържанието: 138098
Set-Cookie: _TESTCOOKIESUPPORT = 1; ПЪТ = /; HttpOnly
Тип съдържание: text / html; charset = utf-8
X-Content-Type-Options: nosniff
Политика за сигурност на съдържанието: фрейм-предци 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' данни :;
X-XSS-Защита: 1; режим = блок
Set-Cookie: SID =; изтича = четвъртък, 01-януари-1970 00:00:00 GMT; път = /; HttpOnly
TCP
За да улови пакети само с TCP, тази команда ще направи всичко добро:
$ sudo tcpdump -i wlan0 tcptcpdump: слушане на wlan0, тип връзка EN10MB (Ethernet), дължина на моментна снимка 262144 байта
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, отместване 0, флагове [няма], прото TCP (6), дължина 104)
tl-in-f189.1е100.нето.https> 192.168.10.16.50272: Знамена [P.], cksum 0xc924 (правилно), sq 1377740065: 1377740117, ack 1546363399, win 300, опции [nop, nop, TS val 13149401 ecr 3051434098], дължина 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, отместване 0, флагове [DF], прото TCP (6), дължина 52)
192.168.10.16.50272> tl-in-f189.1е100.нето.https: Знамена [.], cksum 0xf898 (правилно), sq 1, ack 52, win 63, опции [nop, nop, TS val 3051461952 ecr 13149401], дължина 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, отместване 0, флагове [DF], прото TCP (6), дължина 88)
192.168.10.16.50272> tl-in-f189.1е100.нето.https: Знамена [P.], cksum 0x2531 (правилно), sq 1:37, ack 52, win 63, опции [nop, nop, TS val 3051463260 ecr 13149401], дължина 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, отместване 0, флагове [DF], прото TCP (6), дължина 88)
192.168.10.16.50434> hkg12s18-in-f14.1е100.нето.https: Знамена [P.], cksum 0xb21e (правилно), sq 328391782: 328391818, ack 3599854191, win 63, опции [nop, nop, TS val 3656137742 ecr 2564108387], дължина 36
Уловени 4 пакета
4 пакета, получени чрез филтър
0 пакета, изпуснати от ядрото
Обикновено улавянето на TCP пакети води до много трафик; можете да посочите подробно вашите изисквания, като добавите филтри към улавянето, като например:
Порт
Указва порта за наблюдение
Източник IP
За да видите пакети от определен източник
IP адрес на дестинация
За да видите пакети до определена дестинация
Запазване на заснемане на пакети във файлове
За да запазим улавянето на пакети за извършване на анализ по-късно, можем да използваме опцията -w на tcpdump, която изисква параметър на име на файл. Тези файлове се записват във файлов формат pcap (улавяне на пакети), който може да се използва за запазване или изпращане на пакетни улавяния.
Например:
$ sudo tcpdumpМожем да добавяме филтри дали искаме да уловим TCP, UDP или ICMP пакети и т.н.
Четене на заснемане на пакети от файлове
За съжаление не можете да прочетете записания файл чрез обичайни команди за четене на файлове като cat и т.н. Резултатът е всичко, освен глупости и е трудно да се каже какво има във файла. '-r' се използва за четене на пакетите, записани в .pcap файл, съхраняван по-рано от '-w' или друг софтуер, съхраняващ pcaps:
$ sudo tcpdump -rТова отпечатва данните, събрани от заловени пакети на терминалния екран, в четлив формат.
Tcpdump измамна таблица
Tcpdump може да се използва с други команди на Linux като grep, sed и т.н., за извличане на полезна информация. Ето някои полезни комбинации и ключови думи, обединени в употреба с tcpdump, за да получите ценна информация.
Извличане на HTTP потребителски агенти:
$ sudo tcpdump -n | grep "Потребителски агент:"Заявените URL адреси чрез HTTP могат да бъдат наблюдавани с помощта на tcpdump като:
$ sudo tcpdump -v -n | egrep -i "POST / | GET / | Хост:"Можете също Извличане на HTTP пароли в POST заявки
$ sudo tcpdump -nn -l | egrep -i "POST / | pwd = | passwd = | парола = | Хост:"Сървърните или клиентските бисквитки могат да бъдат извлечени с помощта на:
$ sudo tcpdump -n | egrep -i 'Set-Cookie | Хост: | Cookie:'Заснемете DNS заявки и отговори, като използвате:
$ sudo tcpdump -i wlp58s0 -s0 порт 53Отпечатайте всички пароли с обикновен текст:
$ sudo tcpdump порт http или порт ftp или порт smtp или порт imap или порт pop3 или порт telnet -l -A | egrep -i -B5 'pass = | pwd = | log = | login = | user = | user | username = | pw = | passw = | passwd = | password = | pass: | user: | потребителско име: | парола: | вход: | преминете 'Общи филтри за Tcpdump
- -A Показва пакети във формат ASCII.
- -° С Брой пакети за улавяне.
- -броя Отпечатайте броя на пакетите само при четене на заснет файл.
- -д Отпечатайте MAC адреси и заглавки на ниво връзка.
- -h или -помощ Отпечатва информация за версията и използването.
- -версия Показвайте само информацията за версията.
- -i Посочете мрежовия интерфейс, който да заснемете.
- -К Предотвратяване на опити за проверка на контролни суми на всеки пакет. Добавя скорост.
- -м
Посочете модул, който да използвате. - -н Не конвертирайте адреси (т.е.д., адреси на хоста, номера на портове и т.н.) към имена.
- -номер Отпечатайте незадължителен номер на пакет в началото на всеки ред.
- -стр Забранете интерфейса да премине в безразборен режим.
- -Въпрос: Изберете посока за пакетите, които ще бъдат заловени. Изпращане или получаване.
- -q Тих / бърз изход. Отпечатва по-малко информация. Изходите са по-кратки.
- -r
Използва се за четене на пакети от pcap . - -T Не отпечатвайте клеймо за време на всеки ред за изхвърляне.
- -v Отпечатва повече информация относно изхода.
- -w
Напишете суровите пакети в файл. - -х Отпечатва ASCII изход.
- -х Отпечатва ASCII с шестнадесетичен.
- -списък-интерфейси Показва всички налични мрежови интерфейси, където пакетите могат да бъдат уловени от tcpdump.
Спиране
Tcpdump е много широко използван инструмент, използван в изследванията и приложенията на Сигурност / Мрежа. Единственият недостатък на tcpdump е „Без графичен интерфейс“, но е твърде добър, за да не бъде включен в първите класации. Както пише Даниел Мислер, „Протоколните анализатори като Wireshark са страхотни, но ако искате наистина да овладеете пакетното fu, първо трябва да станете едно с tcpdump.”