Калі вам неабходна прааналізаваць або перахапіць сеткавыя пакеты ў Linux, то лепш за ўсё для гэтага выкарыстоўваць кансольную ўтыліту tcpdump. Але праблема ўзнікае ў даволі складаным яе кіраванні. Радавому карыстачу падасца, што працаваць з утылітай нязручна, але гэта толькі на першы погляд. У артыкуле будзе расказана, як уладкованая tcpdump, які сінтаксіс яна мае, як ёй карыстацца, а таксама будуць прыведзены шматлікія прыклады яе выкарыстання.
Чытайце таксама: Кіраўніцтва па наладзе інтэрнэт-злучэння ў Ubuntu, Debian, Ubuntu Server
ўстаноўка
Большасць распрацоўшчыкаў аперацыйных сістэм на базе Linux ўключаюць ўтыліту tcpdump ў спіс прадусталяваных, але калі па нейкай прычыне яна ў вашым дыстрыбутыве адсутнічае, яе можна заўсёды спампаваць і ўсталяваць праз "Тэрмінал". Калі ў вас АС заснавана на Debian, а гэта Ubuntu, Linux Mint, Kali Linux і ім падобныя, трэба выканаць гэтую каманду:
sudo apt install tcpdump
Пры ўсталёўцы вам трэба ўвесці пароль. Звярніце ўвагу, што пры наборы ён не адлюстроўваецца, таксама для пацверджання ўстаноўкі трэба ўвесці сімвал "Д" і націснуць Enter.
Калі ў вас Red Hat, Fedora або CentOS, то каманда для ўстаноўкі будзе мець наступны выгляд:
sudo yam install tcpdump
Пасля таго як утыліта будзе ўстаноўлена, ёй адразу ж можна карыстацца. Пра гэта і пра многае іншае будзе расказана далей па тэксце.
Чытайце таксама: Кіраўніцтва па ўстаноўцы PHP ў Ubuntu Server
сінтаксіс
Як і любая іншая каманда, tcpdump мае свой сінтаксіс. Ведаючы яго, вы зможаце задаваць ўсе неабходныя параметры, якія будуць улічвацца пры выкананні каманды. Сінтаксіс мае наступны выгляд:
tcpdump опцыі -i інтэрфейс фільтры
Пры выкарыстанні каманды вам абавязкова неабходна паказваць інтэрфейс для адсочвання. Фільтры і опцыі - гэта не абавязковыя зменныя, але яны дазваляюць выканаць больш гнуткую наладу.
опцыі
Хоць опцыю і не абавязкова паказваць, пералічыць даступныя ўсё ж трэба. У табліцы прадэманстраваны не ўвесь іх спіс, а толькі найбольш папулярныя, але іх з лішкам хопіць, каб вырашыць большасць пастаўленых задач.
опцыя | вызначэнне |
---|---|
-A | Дазваляе адсартаваць пакеты з фарматам ASCII |
-l | Дадае функцыю пракруткі |
-i | Пасля ўводу трэба пазначыць сеткавай інтэрфейс, які будзе адсочвацца. Каб пачаць адсочваць усе інтэрфейсы, ўпішыце пасля опцыі слова "any" |
-c | Завяршае працэс адсочвання пасля праверкі паказанай колькасці пакетаў |
-w | Генеруе тэкставы файл са справаздачай праверкі |
-e | Паказвае ўзровень інтэрнэт-злучэння пакета дадзеных |
-L | Выводзіць толькі тыя пратаколы, якія падтрымлівае ўказаны сеткавай інтэрфейс |
-C | Стварае іншы файл падчас запісу пакета, калі яе памер больш зададзенага |
-r | Адкрывае файл для чытання, які быў створаны з дапамогай опцыі -w |
-j | Для запісу пакетаў будзе выкарыстоўвацца фармат TimeStamp |
-J | Дазваляе праглядзець усе даступныя фарматы TimeStamp |
-G | Служыць для стварэння файлу з логамі. Опцыя патрабуе таксама ўказанні часовага значэння, пасля заканчэння якога будзе стварацца новы лог |
-v, -vv, -vvv | У залежнасці ад колькасці знакаў у опцыі, выснова каманды будзе станавіцца больш падрабязна (павелічэнне прама прапарцыйна колькасці знакаў) |
-f | У выснове паказвае імя дамена адрасоў IP |
-F | Дазваляе счытваць інфармацыю не з сеткавага інтэрфейсу, а з паказанага файла |
-D | Дэманструе ўсе сеткавыя інтэрфейсы, якія можна выкарыстоўваць |
-n | Дэактывуе адлюстраванне даменных імёнаў |
-Z | Задае карыстальніка, пад уліковым запісам якога будуць створаны ўсе файлы |
-K | Пропуск аналізу кантрольных сум |
-q | Дэманстрацыя кароткай інфармацыі |
-H | Дазваляе выявіць загалоўкі 802.11s |
-I | Выкарыстоўваецца пры захопе пакетаў у рэжыме манітора |
Разабраўшы опцыі, крыху ніжэй мы пяройдзем непасрэдна да іх прымянення. А пакуль што будуць разгледжаны фільтры.
фільтры
Як гаварылася ў самым пачатку артыкула, вы можаце дадаваць у сінтаксіс tcpdump фільтры. Цяпер будуць разгледжаны найбольш папулярныя з іх:
фільтр | вызначэнне |
---|---|
host | Служыць для ўказанні імя хаста |
net | Паказвае IP падсеткі і сеткі |
ip | Служыць для ўказанні адрасы пратаколу |
src | Выводзіць пакеты, якія былі адпраўленыя з названага адрасы |
dst | Выводзіць пакеты, якія былі атрыманы паказаным адрасам |
arp, udp, tcp | Фільтраванне па адным з пратаколаў |
port | Адлюстроўвае інфармацыю, якая адносіцца да пэўнага порту |
and, or | Служыць для аб'яднання некалькіх фільтраў у камандзе |
less, greater | Выснова пакетаў менш ці больш названага памеру |
Усе вышэйпералічаныя фільтры можна камбінаваць паміж сабой, такім чынам, у выдачы каманды вы будзеце назіраць толькі тую інфармацыю, якую жадаеце ўбачыць. Каб больш дэталёва разабрацца ў выкарыстанні вышэйпералічаных фільтраў, варта прывесці прыклады.
Чытайце таксама: Часта выкарыстоўваюцца каманды ў "тэрмінале" Linux
прыклады выкарыстання
Цяпер будуць прыведзены часта выкарыстоўваюцца варыянты сінтаксісу каманды tcpdump. Усе іх пералічыць не атрымаецца, бо іх варыяцый можа быць бясконцае мноства.
Прагляд спісу інтэрфейсаў
Рэкамендуецца кожнаму карыстальніку першапачаткова праверыць спіс усіх яго сеткавых інтэрфейсаў, якія можна адсачыць. З вышэйпрыведзенай табліцы мы ведаем, што для гэтага трэба выкарыстоўваць опцыю -D, Таму ў тэрмінале запусціце наступную каманду:
sudo tcpdump -D
прыклад:
Як вы можаце заўважыць, у прыкладзе ёсць восем інтэрфейсаў, якія можна прагледзець з дапамогай каманды tcpdump. У артыкуле будуць прыводзіцца прыклады з ppp0, Вы ж можаце выкарыстоўваць любы іншы.
Звычайны захоп трафіку
Калі трэба адсачыць адзін сеткавы інтэрфейс, то зрабіць гэта вы можаце з дапамогай опцыі -i. Не забудзьцеся пасля яе ўводу ўказаць назву інтэрфейсу. Вось прыклад выканання такой каманды:
sudo tcpdump -i ppp0
Звярніце ўвагу: перад самай камандай трэба ўпісаць "sudo", так як яна патрабуе правы суперпользователя.
прыклад:
Заўвага: пасля націску Enter ў "тэрмінале" бесперапынку будуць адлюстроўвацца перахопленыя пакеты. Каб спыніць іх паток, трэба націснуць камбінацыю клавіш Ctrl + C.
Калі вы выконваеце каманду без дадатковых опцый і фільтраў, то ўбачыце наступны фармат адлюстравання отслеженных пакетаў:
22: 18: 52.597573 IP vrrp-topf2.p.mail.ru.https> 10.0.6.67.35482: Flags [P.], seq 1: 595, ack 1118, win 6494, options [nop, nop, TS val 257060077 ecr 697597623], length 594
Дзе колерам выдзелена:
- сінім - час атрымання пакета;
- аранжавым - версія пратакола;
- зялёным - адрас адпраўніка;
- фіялетавым - адрас атрымальніка;
- шэрым - дадатковая інфармацыя аб tcp;
- чырвоным - памер пакета (адлюстроўваецца ў байтах).
Гэты сінтаксіс мае магчымасць высновы ў акне "Тэрмінала" без выкарыстання дадатковых опцый.
Захоп трафіку з опцыяй -v
Як вядома з табліцы, опцыя -v дазваляе павялічыць колькасць інфармацыі. Разбяром на прыкладзе. Праверым той жа інтэрфейс:
sudo tcpdump -v -i ppp0
прыклад:
Тут можна заўважыць, што з'явілася наступная радок у выснове:
IP (tos 0x0, ttl 58, id 30675, offset 0, flags [DF], proto TCP (6), length 52
Дзе колерам выдзелена:
- аранжавым - версія пратакола;
- сінім - працягласць жыцця пратакола;
- зялёным - даўжыня загалоўка поля;
- фіялетавым - версія пакета tcp;
- чырвоным - памер пакета.
Таксама ў сінтаксіс каманды вы можаце прапісаць опцыю -vv або -vvv, Што дазволіць яшчэ больш павялічыць аб'ём выводнай інфармацыі на экран.
Опцыя -w і -r
У табліцы опцый згадвалася аб магчымасці захоўваць усе выводзяцца дадзеныя ў асобны файл, каб пазней іх можна было праглядзець. За гэта адказвае опцыя -w. Карыстацца ёй даволі проста, усяго толькі пакажыце яе ў камандзе, а затым ўпішыце назва будучага файла з пашырэннем ".Pcap". Разгледзім усе на прыкладзе:
sudo tcpdump -i ppp0 -w file.pcap
прыклад:
Звярніце ўвагу: падчас запісу логаў у файл на экране "Тэрмінала" не адлюстроўваецца ніякай тэкст.
Калі вы захочаце праглядзець запісаны выснову, неабходна выкарыстоўваць опцыю -r, Пасля якой напісаць назву раней запісанага файла. Ужываецца яна без іншых опцый і фільтраў:
sudo tcpdump -r file.pcap
прыклад:
Абедзве гэтыя опцыі выдатна падыдуць ў тых выпадках, калі неабходна захаваць вялікія аб'ёмы тэксту для наступнага разбору.
Фільтраванне па IP
З табліцы фільтраў мы ведаем, што dst дазваляе вывесці на экран кансолі толькі тыя пакеты, якія былі атрыманы адрасам, што паказаны ў сінтаксісе каманды. Такім чынам вельмі зручна праглядаць пакеты, атрыманыя вашым кампутарам. Для гэтага ў камандзе трэба ўсяго толькі пазначыць свой IP-адрас:
sudo tcpdump -i ppp0 ip dst 10.0.6.67
прыклад:
Як можна заўважыць, акрамя dst, У камандзе мы прапісалі таксама фільтр ip. Іншымі словамі, мы сказалі кампутара, каб пры адборы пакетаў ён звяртаў увагу на іх IP адрас, а не на іншыя параметры.
Па IP можна адфільтраваць і адпраўляюцца пакеты. У прыкладзе прывядзем зноў наш IP. То бок зараз мы адсачыць, якія пакеты адпраўляюцца з нашага кампутара на іншыя адрасы. Для гэтага трэба выканаць наступную каманду:
sudo tcpdump -i ppp0 ip src 10.0.6.67
прыклад:
Як можна заўважыць, у сінтаксісе каманды мы змянілі фільтр dst на src, Тым самым сказаўшы машыне, каб яна шукала адпраўніка па IP.
Фільтраванне па HOST
Па аналогіі з IP у камандзе мы можам паказаць фільтр host, Каб адсеяць пакеты з цікавяць хастом. Гэта значыць, у сінтаксісе замест IP-адрасы адпраўніка / атрымальніка трэба будзе паказваць яго хост. Выглядае гэта наступным чынам:
sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com
прыклад:
На малюнку можна ўбачыць, што ў "Тэрмінале" адлюстроўваюцца толькі тыя пакеты, якія былі адпраўленыя з нашага IP на хост google.com. Як можна зразумець, замест хаста google, можна ўпісаць любы іншы.
Як і ў выпадку з фільтраваннем па IP, у сінтаксісе dst можна замяніць на src, Каб убачыць пакеты, якія адпраўляюцца на ваш кампутар:
sudo tcpdump -i ppp0 src host google-public-dns-a.google.com
Звярніце ўвагу: фільтр host павінен стаяць пасля dst або src, інакш каманда выдасць памылку. У выпадку з фільтраваннем па IP, наадварот, dst і src стаяць перад фільтрам ip.
Прымяненне фільтра and і or
Калі ў вас з'яўляецца неабходнасць выкарыстоўваць адразу некалькі фільтраў у адной камандзе, то для гэтага трэба ўжываць фільтр and або or (Залежыць ад выпадку). Паказваючы фільтры ў сінтаксісе і падзяляючы іх гэтымі аператарам, вы «прымусіце» працаваць іх як адзін. На прыкладзе гэта выглядае наступным чынам:
sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254
прыклад:
З сінтаксісу каманды відаць, што мы хочам вывесці на экран "Тэрмінала" усе пакеты, якія былі адпраўленыя на адрас 95.47.144.254 і пакеты, атрыманыя гэтым жа адрасам. Таксама вы можаце змяняць некаторыя зменныя ў гэтым выразе. Напрыклад, замест IP ўказаць HOST або замяніць непасрэдна самі адрасы.
Фільтр port і portrange
фільтр port выдатна падыдзе ў тых выпадках, калі трэба атрымаць інфармацыю пра пакеты з пэўным портам. Так, калі вам трэба ўбачыць толькі адказы ці запыты DNS, трэба паказаць порт 53:
sudo tcpdump -vv -i ppp0 port 53
прыклад:
Калі вы жадаеце праглядзець пакеты http, трэба ўвесці порт 80:
sudo tcpdump -vv -i ppp0 port 80
прыклад:
Апроч іншага, ёсць магчымасць адсачыць адразу дыяпазон партоў. Для гэтага ўжываецца фільтр portrange:
sudo tcpdump portrange 50-80
Як можна заўважыць, у звязку з фільтрам portrange не абавязкова ўказваць дадатковыя опцыі. Досыць усяго толькі задаць дыяпазон.
Фільтраванне па пратаколах
Вы таксама можаце вывесці на экран толькі той трафік, які адпавядае якому-небудзь пратаколе. Для гэтага трэба выкарыстоўваць у якасці фільтра найменне гэтага самага пратаколу. Разбяром на прыкладзе udp:
sudo tcpdump -vvv -i ppp0 udp
прыклад:
Як можна ўбачыць на малюнку, пасля выканання каманды ў "Тэрмінале" адлюстраваліся толькі пакеты з пратаколам udp. Адпаведна, вы можаце ажыццявіць фільтраванне і па іншых, напрыклад, arp:
sudo tcpdump -vvv -i ppp0 arp
або tcp:
sudo tcpdump -vvv -i ppp0 tcp
фільтр net
аператар net дапамагае адфільтраваць пакеты, беручы за аснову абазначэнне іх сеткі. Карыстацца ім так жа проста, як і астатнімі - трэба ў сінтаксісе пазначыць атрыбут net, Пасля чаго ўпісаць адрас сеткі. Вось прыклад такой каманды:
sudo tcpdump -i ppp0 net 192.168.1.1
прыклад:
Фільтраванне па памеры пакета
Мы не разгледзелі яшчэ два цікавых фільтра: less і greater. З табліцы з фільтрамі мы ведаем, што яны служаць для высновы пакетаў дадзеных больш (less) Або менш (greater) Памеру, пазначанага пасля ўводу атрыбуту.
Дапусцім мы хочам сачыць толькі за пакетамі, якія не перавышаюць адзнаку ў 50 біт, тады каманда будзе мець наступны выгляд:
sudo tcpdump -i ppp0 less 50
прыклад:
Зараз давайце адлюстраваць у "Тэрмінале" пакеты, памер якіх больш за 50 біт:
sudo tcpdump -i ppp0 greater 50
прыклад:
Як можна заўважыць, прымяняюцца яны аднолькава, розніца толькі ў назве фільтра.
заключэнне
Па заканчэнні артыкула можна зрабіць выснову, што каманда tcpdump - гэта выдатны інструмент, з дапамогай якога можна адсачыць любы перадаваны па інтэрнэце пакет дадзеных. Але для гэтага недастаткова проста ўвесці саму каманду ў "Тэрмінал". Дамагчыся жаданага выніку атрымаецца толькі ў выпадку, калі выкарыстоўваць разнастайныя опцыі і фільтры, а таксама іх камбінацыі.