Трафик на приложението Wireshark. Wireshark: Анализ на трафика за Linux и Windows. Основни характеристики на Wireshark

Wireshark: как да използвате?

Здравейте приятели! В тази статия ще се опитам да обясня и да ви разкажа за най-необходимите неща, които трябва да знаете, когато използвате Wireshark на Linuxи показват анализ на три вида мрежов трафик. Този урок е приложим и за Wireshark да работи под Windows.

Ако сте нов в информационната сигурност и много добре разбирате какво е снифер (трафик анализатор), съветвам ви да прочетете статията и едва след това да прочетете тази статия за това как да използвате Wireshark.

Много популярен и изключително сръчен анализатор на мрежови протоколиДжералд Комбс разработи Wireshark през юни 2006 г., когато Комбс преименува мрежовия инструмент Ethereal, който също създаде, защото смени работата си и вече не може да използва старото име. Днес повечето хора използват Wireshark, а Ethereal е история.

Wireshark: най-добрият снифър

Може би се питате как Wireshark се различава от другите мрежови анализатори – освен че са безплатни – и защо просто не започнем да популяризираме tcpdump за улавяне на пакети?

Основното предимство на Wireshark е, че е графично приложение. Събирането на данни и проверката на мрежовия трафик в потребителския интерфейс е много удобно, тъй като ви позволява да работите със сложни мрежови данни.

Как да използвам Wireshark?

За начинаещ да разбере Wireshark, той трябва да разбере мрежовия трафик. Ако е така, целта на тази статия е да ви научи на основите на TCP/IP, за да можете да направите правилните изводи от мрежовия трафик, който анализирате.


TCP пакет и формат на IP пакет.

Ако използвате Wireshark като обикновен потребител, няма да можете да използвате мрежовите интерфейси за събиране на данни поради разрешенията за Unix файлове по подразбиране, налични в мрежовите интерфейси. По-удобно е да стартирате Wireshark като root (sudo wireshark), когато събирате данни и като обикновен потребител за анализ на данни.

Като алтернатива можете да събирате мрежови данни, като използвате помощната програма на командния ред tcpdump като root и след това да ги анализирате с помощта на Wireshark. Моля, имайте предвид, че събирането на данни с Wireshark в силно натоварена мрежа може да забави вашия компютър или по-лошо, да ви попречи да събирате необходимите данни, тъй като Wireshark изисква повече системни ресурси от инструмента на командния ред. В такива случаи най-интелигентното решение за събиране на данни за мрежовия трафик е да използвате tcpdump.

Улавяне на мрежови данни с Wireshark

Най-лесният начин да започнете да улавяте мрежови пакетни данни е да изберете интерфейса, който искате след стартиране на Wireshark, и щракнете върху Старт. Wireshark ще показва мрежови данни на вашия екран въз основа на вашия мрежов трафик. Моля, обърнете внимание: може да бъде избран повече от един интерфейс. Ако не знаете нищо за TCP, IP или други протоколи, резултатът може да бъде труден за четене и разбиране.

За да спрете заснемането на данни, изберете Capture> Stop от менюто. Като алтернатива можете да щракнете върху четвъртата икона отляво с червен квадрат (това е съкращение от „Спри заснемането на данни на живо“) в главната лента с инструменти (обърнете внимание, че точното й местоположение зависи от версията на Wireshark, която имате). Този бутон може да бъде натиснат само по време на събиране на мрежови данни.

Когато използвате описания метод на заснемане, не можете да промените опциите за заснемане по подразбиране, конфигурирани в Wireshark. Можете да видите и промените опциите за заснемане, като изберете Capture> Options от менюто. Тук можете да изберете мрежовия(и) интерфейс(и), да видите своя IP адрес, да приложите филтри за събиране на данни, да превключите мрежовата си карта, за да получавате всички мрежови пакети, и да запишете събраните данни в един или повече файлове. Можете дори да му кажете да спре да улавя пакети, когато достигне определен брой мрежови пакети, или определено време, или определено количество данни (в байтове).

По подразбиране Wireshark не запазва събраните данни, но винаги можете да ги запазите по-късно. Смята се, че е най-добре първо да запазите и след това да прегледате мрежовите пакети, освен ако нямате специална причина да направите друго.

Wireshark ви позволява да четете и анализирате вече събрани мрежови данни от голямо разнообразие от файлови формати, включително tcpdump, libpcap, Sun's snoop, HP nettl, K12 текстови файлове и др. Накратко, Wireshark може да чете почти всеки формат на събрани мрежови данни. По същия начин Wireshark ви позволява да запазвате събраните данни в различни формати. Можете дори да използвате Wireshark, за да конвертирате файл от един формат в друг.

Можете също да експортирате съществуващ файл като обикновен текстов файл от менюто Файл. Тази опция е предназначена основно за ръчна обработка на мрежови данни или въвеждането им в друга програма.

Предоставена е опция за отпечатване на вашите пакети. Никога не съм го използвал в реалния живот, но за образователни цели може да бъде много полезно да отпечатате пакетите и пълното им съдържание.

Дисплейни филтри на Wireshark

Ако при заснемане на мрежови данни се прилагат филтри за улавяне, тогава Wireshark не разглежда мрежовия трафик, който не съответства на филтъра; докато филтрите за показване се прилагат след заснемане на данни и „скриват“ мрежовия трафик, без да го премахват. Винаги можете да изключите филтъра за показване и да получите обратно скритите си данни.

По принцип филтрите за показване се считат за по-полезни и гъвкави от филтрите за събиране на данни, защото едва ли знаете предварително каква информация ще съберете или решите да изучавате. Въпреки това, използването на филтри при заснемане на данни ви спестява време и дисково пространство, което е основната причина за използването на филтри.

Wireshark подчертава синтактично правилния филтър със светлозелен фон. Ако синтаксисът съдържа грешки, фонът става розов.

Филтрите за показване поддържат оператори за сравнение и булеви оператори. Показване на филтъра http.response.code


Три пакета (SYN, SYN + ACK и ACK) трипосочна TCP връзка

404 && ip.addr == 192.168.1.1 показва трафик, който или отива от IP адреса 192.168.1.1, или отива към IP адреса 192.168.1.1, който също има 404 (Не е намерен) HTTP код за отговор в него. Филтърът! Boo1p &&! Ip &&! Aggr изключва BOOTP, IP и ARP трафик от резултата. Филтър eth.addr == 01: 23: 45: 67: 89: ab && tcp.port == 25 показва трафика, отиващ от или към мрежовото устройство с MAC адрес 01: 23: 45: 67: 89: ab, което използва TCP порт номер 25 за входящи и изходящи връзки.

Не забравяйте, че филтрите на дисплея не решават проблеми по магически начин. Това са изключително полезни инструменти, когато се използват правилно, но все пак трябва сами да интерпретирате резултатите, да намерите проблема и да помислите за подходящото решение.

Продължение на статията на следващата страница. За да отидете на следващата страница, кликнете върху бутон 2, който се намира под бутоните на социалните мрежи.

Въведение

Когато се изследват мрежовите взаимодействия на ниво отделни пакети, дейтаграми, сегменти и съобщения на ниво приложение, често е необходимо да се решат проблемите с филтрирането на трафика. Същността на прилагането на филтри е да се намерят и откроят групи, както и отделни предавателни единици, които представляват интерес за по-нататъшен анализ. Тази функционалност е изключително полезна в инструменти, предназначени да прихващат и изучават мрежовия трафик (снифери) и помага на системен администратор или специалист по информационна сигурност да намери част от полезна информация в интензивните информационни потоци на съвременните мрежи.

Мултиплатформата с отворен код, разгледана в тази статия Анализатор на протоколи Wiresharkвключва две филтърни подсистеми: прихващане на трафик (филтри за улавяне) и дисплей (филтри за показване). Както знаете, първата подсистема се основава на езика на правилата на библиотеката Pcap (Packet Capture). "Почистването" на трафика по време на неговото събиране, по-специално, намалява броя на прихванатите пакети, като по този начин спестява място в паметта или на твърдия диск. Що се отнася до филтрите на дисплея, те, тъй като са вградена функция на Wireshark, са предназначени да "персонализират" вече прихванатия трафик в графичния интерфейс на програмата.


Относно езиците за филтриране

Възможността за прихващане на трафик за целите на наблюдение и отстраняване на грешки присъства в мрежовия стек на всяка операционна система. Извършва се с помощта на така наречения пакетен филтър, който е част от ядрото на системата и получава получени/изпратени пакети от драйвера на мрежовата карта. Най-известните пакетни филтри за Unix-подобни операционни системи са BPF (Berkeley Packet Filter) и LSF (Linux Socket Filter).

И така, извадка от трафик според посочените критерии в БНФреализиран под формата на специален примитивен машинен език, ориентиран към регистри, за който пакетният филтър всъщност действа като интерпретатор. Програмите на този език могат да извличат фрагменти от пакети, да сравняват получените данни с дадени стойности, да проверяват отделни битове, да извършват аритметични операции и след това да приемат или отхвърлят пакети в зависимост от резултатите от всички тези тестове. Подходът на "ниско ниво" е полезен за програмисти, разработващи библиотеки с мрежови функции и различни помощни програми.

Обикновените потребители са склонни да използват езици за филтриране на "високо ниво". Типичен език на приложението, използван в снифера за описание на правилата за трафик, позволява да се конструират примитиви за изрази въз основа на отделни полета на съобщения от различни протоколи. В този случай като критерий може да действа съотношението на стойността на полето към определена стойност (равно, по-голямо, по-малко), съвпадението на стойността с шаблона или просто наличието на полето в съобщението. Примитивите могат да бъдат комбинирани в сложен израз с помощта на логически функции ("и", "или", "не" и т.н.).

В света с отворен код де факто стандартът за филтърен език е синтаксисът, използван в библиотеката Pcap. Той е основата не само за Wireshark, но и за други помощни програми с отворен код, като например конзолния снифер tcpdump, добре познат в света на Unix. Всъщност Pcap и tcpdump са съвместен проект. Популярната система за откриване на проникване Snort също използва формата Pcap за дефиниране на правила за филтриране на трафика в режим на улавяне на пакети.


Основи на PCap филтъра

Така, филтърът включва един или повече примитиви... Примитивът обикновено се състои от обект (номер или име) и един или повече спецификатори, които определят протокола (ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp, udp), посока (src, dst , всякакви и др.) и типа на обекта (хост, мрежа, порт и т.н.). Например, за да прихванете пакети, в които изходящият IP адрес е 192.168.56.102, трябва да използвате филтър като този:

Ip src хост 192.168.56.102

Или да записвате ARP трафик, включващ хостове в мрежата 192.168.56.0:

Arp net 192.168.56

Често използваните квалификатори са представени в таблица (означени са незадължителните компоненти -, алтернатива - |, обекти -< >). Пълен списък може да бъде намерен в документацията на Pcap (на Linux, достъпна в ръководството за потребителя с командата man pcap-filter).

За да се комбинират няколко примитиви в един израз, се използват логически функции: „и“ (означава се с ключовата дума и или &&), „или“ (или или ||), „не“ (не или!). Например, за прихващане на трафик на SSH протокола за хост 192.168.56.102 е подходяща следната конструкция:

Tcp порт 22 и хост 192.168.56.102

Използвайте скоби за много сложни изрази. Например:

Net 192.168.56.0/24 и (tcp порт 21 или tcp порт 22)

Неограничени PCap филтри

За тези, които са свикнали да живеят според собствените си правила, библиотеката Pcap предоставя произволен достъп до съдържанието на мрежовите пакети, използвайки пълната мощност на филтъра за пакети на OS. Това се прави с помощта на доста прост синтаксис:

Proto [exp: size]

където прото параметърът е един от протоколите, поддържани от Wireshark; exp е отместването в байтове от началото на слоя, посочен в proto, а size е броят на байтовете за извличане.

Като се има предвид, че в примитивите е възможно да се използват операции за сравнение в нотацията на езика за програмиране C (>, =,

Примерът обаче има само методологично значение, тъй като този протокол лесно се филтрира от стандартното правило icmp.

Но избирането на HTTP заявки, направени по метода GET от трафик в движение, не е толкова лесна задача за Pcap. И предложеното в документацията решение твърди, че е оригинално:

Порт 80 и tcp [((tcp & 0xf0) >> 2): 4] = 0x47455420

Този филтър проверява за байтовете "G", "E", "T" и "" (шестнадесетични стойности 47, 45, 54 и 20) непосредствено след TCP заглавката, чиято дължина се изчислява чрез израза " tcp & 0xf0) >> 2".

Както можете да видите от последния пример, в допълнение към операциите за сравнение, бинарните оператори C (+, -, *, /, &, |,>) също са достъпни за потребителя директно в примитивите.


Относно филтрите на дисплея

Ако говорим за разликите филтри на дисплеяот Pcap филтри, а след това в допълнение към формата за писане на спецификатори (протоколните полета изглеждат като. equal, le - по-малко или равно) и двоични оператори (and, or, xor, not), както и поддръжка на поднизове.

Извличането на поднизове в полета е подобно на извличането на произволни байтове от пакет в Pcap филтри, но има по-гъвкав синтаксис. Например, израз като този ще провери първите 4 байта от полето на оригиналния MAC адрес на Ethernet рамка (еквивалент):

Eth.src [: 4] == 00: 1d: 72: 01

Разбира се, разликата между филтрите е, че Pcap правилата се използват при прихващане на трафик; в графичния интерфейс, те се конфигурират в диалоговия прозорец "Опции за заснемане" (между другото, възможно е да се запомнят често използвани изрази). Филтрите за показване работят с пакети, разположени в списъка на главния прозорец на програмата:

Вградената подсистема за филтриране на Wireshark е много по-удобна за използване. По-специално, няма нужда да се запомнят подробностите за формата на съобщението (отмествания, размери на полета и т.н.). Необходимото поле за съобщение за този протокол може лесно да бъде намерено в прозореца Изразяване на филтъра и можете също да изберете условие и предварително дефинирана стойност от списъка за това поле или да посочите свое собствено. За всеки от многото протоколи, поддържани от Wireshark, можете да конфигурирате филтър за показване по този прост начин.

Почти академичен пример за определяне кога се определя препълване на буфер на TCP сегменти с помощта на следното правило за картографиране е много показателен:

Tcp.window_size == 0 && tcp.flags.reset! = 1

Заключение

Анализаторът на протокола Wireshark има мощна система за филтриране на пакети, позволява да се създават сложни правила с помощта на логически функции и двоични оператори. Филтрите за време за заснемане са стандартни и ще бъдат познати на потребителите, които са използвали Pcap-базирани мрежови помощни програми като tcpdump. Правилата за показване на пакети са лесни за научаване и използване, благодарение на възможностите на графичния интерфейс на въпросната програма. Като цяло, функционалността на системата за филтриране на Wireshark ви позволява да се възползвате доста ефективно от филтъра за пакети на ниско ниво.

Просто огромен брой различни филтри. И има огромно количество документация за тези филтри, която не е толкова лесна за разбиране. Събрах най-интересните и най-често използвани филтри на Wireshark за мен. За начинаещи потребители това може да бъде малко ръководство за филтрите на Wireshark, отправна точка за изследване. Също тук в коментарите ви каня да споделите общи филтри, които често използвате, както и интересни находки - ще ги добавя към този списък.

Не забравяйте, че Wireshark има филтри за показване и филтри за улавяне. Тук разглеждам филтрите за показване, които се въвеждат в главния прозорец на програмата в горното поле точно под менюто и иконите на основните функции.

За да разберете напълно значението на филтрите и какво точно показват, трябва да разберете как работи мрежата. За да се запознаете с принципите на мрежата и протоколите, се препоръчва да се проучи цикълът за работата на компютърните мрежи, първата статия от цикъла "" (останалата част от процеса на подготовка).

Някои от филтрите тук са написани в общи думи, а някои са дадени като конкретни примери. Не забравяйте, че във всеки случай можете да замените данните си, например, да промените номера на порта на каквото ви интересува, както и да направите същото с IP адреса, MAC адреса, стойността на времето и т.н.

Wireshark филтърни оператори

Филтрите могат да имат различни значения, като низ, шестнадесетичен или число.

Ако се търси неточно съвпадение (по-подходящо за нечислови стойности), използвайте съдържа... Например, за да покажете TCP пакети, съдържащи низа за хакерство, имате нужда от следния филтър:

Tcp съдържа хакерски софтуер

Операторите се използват за намиране на точни стойности. Нека ги разгледаме:

Както можете да видите, има два варианта на писане, например, ако искаме да посочим, че стойността на филтъра е равна на нещо, тогава можем да използваме == или екв.

Доста сложни конструкции могат да бъдат изградени от филтри, използващи логически операнди, но, очевидно, ако един и същ филтър се използва два пъти с оператори за сравнение, например, както тук, в опит да се филтрира не по един порт, а по диапазон от портове:

Tcp.port> = 8000 && tcp.port<=8180

след това стойността на филтъра (в този случай tcp.port) се презаписва от последната стойност, така че в резултат вместо очакваното поведение получаваме резултата от работата само на последната част, в този случай е

Tcp.port<=8180

Запомнете този бъг!

Когато се използва с == (равно) тази грешка липсва.

Булеви оператори на филтъра на Wireshark

Логическите оператори ви позволяват да създавате подробни филтри, като използвате множество условия наведнъж. Препоръчително е да използвате допълнително скоби, тъй като в противен случай може да не получите стойността, която очаквате.

Оператор Описание
и / && Логическо И, данните се извеждат, ако съвпадат и с двете части на филтъра. Например филтър ip.src == 192.168.1.1 и tcpще покаже само пакети, които идват от 192.168.1.1 и които са свързани с TCP протокола. Ще бъдат показани само данни, които отговарят на двете условия.
или / || Логическо ИЛИ, достатъчно е само едно условие да е вярно; ако и двете са верни, тогава това също отговаря. Например филтър tcp.port == 80 или tcp.port == 8080ще покаже TCP пакети, които са свързани (източник или дестинация) с порт 80 или 8080.
не /! Boolean НЕ се използва, когато искаме да изключим определени пакети. Тоест ще бъдат показани всички пакети, с изключение на тези, които отговарят на условието след НЕ. Например филтър ! dnsще покаже всички пакети с изключение на DNS.

Примери за комбинации:

Показване на HTTP или DNS трафик:

Http или dns

Покажете всякакъв трафик, с изключение ARP, ICMP и DNS:

! (arp или icmp или dns)

Интерфейсен филтър

Показване на пакети само изпратени или получени на wlan0 интерфейс:

Frame.interface_name == "wlan0"

Трафик на протокол за връзка за данни

За да покажете ARP трафик:

Показване на ARP кадри, изпратени от устройство с MAC адрес 00: c0: ca: 96: cf: cb:

Arp.src.hw_mac == 00: c0: ca: 96: cf: cb

Показване на ARP рамки, изпратени от устройството с IP адрес 192.168.50.90:

Arp.src.proto_ipv4 == 192.168.50.90

Показване на рамки на ARP протокол, изпратени до устройство с MAC адрес 00: 00: 00: 00: 00: 00 (Този адрес се използва, когато протоколът се опитва да открие целевия MAC адрес. Друг популярен адрес, който може да ви обърка, е ff: ff: ff: ff: ff: ff, този адрес се излъчва, тоест съобщенията с този адрес са предназначени за всички устройства в локалната мрежа):

Arp.dst.hw_mac == 00: 00: 00: 00: 00: 00

Показване на ARP рамки, изпратени до устройството с IP адрес 192.168.50.1:

Arp.dst.proto_ipv4 == 192.168.50.1

Показване на Ethernet трафик:

Показване на кадри (като цяло всички рамки, а не само ARP, както беше в предишните примери), изпратени от устройство с MAC адрес 00: c0: ca: 96: cf: cb:

Eth.src == 00: c0: ca: 96: cf: cb

Показване на кадри, изпратени до устройство с MAC адрес 78: cd: 8e: a6: 73: be:

Eth.dst == 78: cd: 8e: a6: 73: be

Трафик на протокола за шлюз

Филтриране на IPv4 протокол

Показване на IP трафик (това включва TCP, UDP, както и протоколите на приложния слой DNS, HTTP - тоест почти всичко, с изключение на протоколите на слоя на връзката, които не използват IP адреси за предаване на данни (в Ethernet локалните мрежи те използват MAC- адреси)):

По-конкретно, това се отнася до IPv4 трафик, който обикновено се нарича просто IP (интернет протокол).

Показване на трафика, свързан с конкретен IP адрес (напишете го вместо x.x.x.x). Ще бъдат показани пакети, в които този IP адрес е източник на данни ИЛИ дестинация:

Ip.addr == x.x.x.x

Показване на трафика, свързан с дадените два IP адреса. Според единствената възможна логика единият от тези адреси ще бъде източникът, а другият ще бъде адресът за доставка.

Ip.addr == x.x.x.x && ip.addr == y.y.y.y

Показване на трафик, произхождащ от хост с IP адрес 138.201.81.199:

Ip.src == 138.201.81.199

Показване на трафика, предназначен за хост с IP адрес 138.201.81.199:

Ip.dst == 138.201.81.199

Моля, имайте предвид, че IP протоколът работи с IP адреси, но не работи с портове. Портовете са част от протоколите TCP и UDP. IP протоколът е отговорен само за маршрутизирането на трафика между хостовете.

Филтриране на подмрежи и IP диапазони в Wireshark

Можете да посочите подмрежа вместо един IP адрес:

Ip.addr == 192.168.1.0/24

Филтриране на трафика, изпратен от конкретен IP диапазон. Ако трябва да филтрирате трафик, произхождащ от подмрежа, използвайте филтър от формата:

Ip.src == 192.168.1.0/24

Филтриране на трафик, предназначен да бъде изпратен до определен IP диапазон. Ако трябва да филтрирате трафик, чиято дестинация е подмрежа, използвайте филтър от формата:

Ip.dst == 192.168.1.0/24

Филтриране на IPv6 протокол

Показване на IPv6 трафик (интернет протокол версия 6):

Филтриране по IPv6 адрес. За да филтрирате по IPv6 адрес, използвайте филтъра:

Ipv6.addr == 2604: a880: 800: c1 :: 2ae: d001

Филтриране на IPv6 подмрежи и диапазони в Wireshark

Можете да посочите подмрежа за филтриране вместо един IPv6 адрес:

Ipv6.addr == 2604: a880: 800: c1 :: 2ae: d000 / 64

Ако трябва да филтрирате трафик, произхождащ от конкретен IPv6 адрес:

Ipv6.src == 2604: a880: 800: c1 :: 2ae: d001

Ако трябва да филтрирате трафика, изпратен до конкретен IPv6 адрес:

Ipv6.dst == 2604: a880: 800: c1 :: 2ae: d001

Филтриране на трафика, изпратен от конкретен IPv6 диапазон. Ако трябва да филтрирате трафик, произхождащ от подмрежа, използвайте филтър от формата:

Ipv6.src == 2604: a880: 800: c1 :: 2ae: d000 / 64

Филтриране на трафика, предназначен да бъде изпратен до конкретен IPv6 диапазон. Ако трябва да филтрирате трафик, чиято дестинация е подмрежа, използвайте филтър от формата:

Ipv6.dst == 2604: a880: 800: c1 :: 2ae: d000 / 64

ICMPv6 (Internet Control Message Protocol) филтрирането в Wireshark се извършва чрез филтър:

За да видите пакети, които действат като ARP за IPv6, използвайте филтъра:

Icmpv6.type == 133 или icmpv6.type == 134 или icmpv6.type == 135 или icmpv6.type == 136 или icmpv6.type == 137

Други филтри за IP адреси са подобни за IPv6 и IPv4.

Трафик на протокола на транспортния слой

За да видите само TCP трафик:

Показване на трафика, чийто порт за източник или дестинация е конкретен порт, например 8080:

Tcp.port == 8080

Показване на трафика, идващ от порт 80:

Tcp.srcport == 80

Показване на трафика, който се изпраща към услугата, която слуша на порт 80:

Tcp.dstport == 80

Показване на TCP пакети с активиран флаг SYN:

Tcp.flags.syn == 1

Показване на TCP пакети с активиран флаг SYN и деактивиран флаг ACK:

Tcp.flags.syn == 1 && tcp.flags.ack == 0

По същия начин за други знамена:

tcp.flags.syn == 1 tcp.flags.ack == 1 tcp.flags.reset == 1 tcp.flags.fin == 1 tcp.flags.cwr tcp.flags.ecn tcp.flags.urg == 1 tcp.flags.push == 1

Можете също да използвате синтаксиса като tcp.flags == 0x0XX, например:

  • Оправи го tcp.flags == 0x001
  • SYN това tcp.flags == 0x002
  • RST е tcp.flags == 0x004
  • ACK това tcp.flags == 0x010
  • Инсталирани едновременно ACK и FIN е tcp.flags == 0x011
  • Инсталирани едновременно ACK и SYN е tcp.flags == 0x012
  • Инсталирани едновременно ACK и RST е tcp.flags == 0x014

За да покажете пакети, съдържащи низ, например низ за хакерство:

Tcp съдържа хакерски софтуер

Следвайте TCP поток X:

Tcp.stream eq X

Филтриране по номер на потока:

Tcp.seq == x

Показване на повторни предавания на пакети. Помага за проследяване на забавянето на производителността на приложението и загубата на пакети:

Този филтър изведе проблемни пакети (загубени сегменти, повторни предавания и т.н.) Този филтър ще пропусне TCP Keep-Alive пакети, но те не са показателни за проблем.

Tcp.analysis.flags

Филтри за оценка на качеството на мрежова връзка.

Следните спецификации се отнасят за TCP рамки. Освен това те не се базират на заглавките на рамката - въпросните характеристики (пропускане на данни, дубликати) се задават от програмата Wireshark въз основа на анализа.

Филтърът показва информация за кадри с флаг ACK, които са дублирани. Голям брой такива рамки могат да показват проблеми с комуникацията:

Tcp.analysis.duplicate_ack_num == 1

Филтър за показване на кадри, за които предишният сегмент не е заловен:

Tcp.analysis.ack_lost_segment

Това е нормално в началото на събирането на данни - тъй като информацията не се прихваща от самото начало на сесията.

За да покажете кадри, които се предават повторно (изпратени отново):

Tcp.analysis.retransmission

Показване на кадри, които не са получени в правилния ред:

Tcp.analysis.out_of_order

За да видите само UDP трафик:

За UDP не се използват флагове. За този протокол можете да посочите само порт.

Показване на трафика, идващ от порт 53:

Udp.srcport == 53

Показване на трафика, който се изпраща към услугата, която слуша на порт 53:

Udp.dstport == 53

UDP пакет, съдържащ специфичен низ, например низ за хакерство:

Udp съдържа хакерски софтуер

За да видите само ICMP трафик:

За да видите само ICMP v6 трафик (шеста версия)

Показване на всички ping отговори:

Icmp.type == 0

Показване на всички заявки за ping:

Icmp.type == 8

Показване на всички грешки на хост и порт, недостъпни/отказани

Icmp.type == 3

Показване на всички опити за пренасочване на маршрутизация чрез ICMP:

Icmp.type == 8

Пример за използване на стойността CODE, следният филтър ще покаже съобщения за недостъпен порт:

Icmp.type == 3 && icmp.code == 3

Трафик на приложния протокол

За протоколите на приложния слой HTTP, DNS, SSH, FTP, SMTP, RDP, SNMP, RTSP, GQUIC, CDP, LLMNR, SSDP има филтри, които се наричат ​​като самите протоколи, но се изписват с малки букви.

Например, за да видите HTTP трафик:

За да видите трафика на новия HTTP / 2 протокол:

Не забравяйте, че когато решава към кой протокол да принадлежат предаваните данни, програмата изхожда от номера на използвания порт. Ако се използва нестандартен порт, програмата няма да може да намери необходимите данни. Например, ако е направена връзка към SSH на порт 1234, тогава филтърът sshняма да намери SSH трафик.

Филтър, който показва само данните, изпратени по метода POST:

Http.request.method == "POST"

Филтър, който показва само данни, изпратени по метода GET:

Http.request.method == "GET"

Търсене на заявки към конкретен сайт (хост):

Http.host == " "

Търсене на заявки към конкретен сайт по част от името:

Http.host съдържа "here.partial.name"

Филтър за показване на HTTP заявки, в които са предадени бисквитки:

Http.cookie

Заявки, в които сървърът е задал бисквитка в браузъра на потребителя.

Http.set_cookie

За да търсите качени изображения:

Http.content_type съдържа "image"

За да търсите определени типове изображения:

Http.content_type съдържа "gif" http.content_type съдържа "jpeg" http.content_type съдържа "png"

За да търсите файлове от определен тип:

Http.content_type съдържа "text" http.content_type съдържа "xml" http.content_type съдържа "html" http.content_type съдържа "json" http.content_type съдържа "javascript" http.content_type съдържа "x-www-form-urlencode" http. content_type съдържа "компресиран" http.content_type съдържа "приложение"

Търсете в Wireshark заявки за получаване на файлове от определен тип. Например, за да търсите прехвърлени ZIP архиви:

Http.request.uri съдържа "zip"

Вместо http.request.uri могат да се използват филтри за по-голяма прецизност http.request.uri.pathили http.request.uri.query, например за търсене на заявки за изтегляне на JPG файлове (връзки към снимки):

Http.request.uri.path съдържа "jpg"

Можете също да филтрирате заявки, които съдържат конкретна стойност на HTTP заглавката REFERER. Например, за да търсите заявки, в които ru-board.com е референт:

Http.referer съдържа "ru-board.com"

Http.упълномощаване

Търсене на файлове в HTTP поток:

Http.file_data

За да видите какви HTTP данни за забавяне се получават, се използва следната конструкция:

Http.време> 1

Той ще показва трафика, получен по-късно от 1 секунда.

За да проучите проблемите, можете да анализирате състоянието на HTTP кодовете за отговор. Например, следният филтър ще покаже трафик, получил грешка 404 Not Found:

Http.response.code == 404

Следващият филтър е много интересен. Първо, той показва как сложни структури могат да бъдат изградени от отделни филтри. Второ, той ви позволява да разглеждате HTTP заявките и уеб активността като цяло, с изключение на ненужните данни. С този филтър можете да видите активност в мрежата на високо ниво. Правилата в скобите изключват изображения, Javascript файлове и таблици със стилове - всичко, което страницата поиска вътрешно. Ако изследваните страници съдържат други вградени обекти, изключете ги по подобен начин:

Http.request &&! (Http.request.uri съдържа ".ico" или http.request.uri съдържа ".css" или http.request.uri съдържа ".js" или http.request.uri съдържа ".gif" или http.request.uri съдържа ".jpg")

За да видите всички DNS заявки и отговори:

За да видите кои DNS търсения отнеха много време:

Dns.time> 1

Ще се покажат отговорите, които са дошли след повече от секунда след изпращането на заявката.

Този филтър показва кои DNS заявки не могат да бъдат правилно разрешени:

Dns.flags.rcode! = 0

Показване само на DNS заявки:

Dns.flags.response == 0

Показване само на DNS отговори:

Dns.flags.response == 1

Показване на заявки и отговори към тях, в които се търси IP за google.com:

Dns.qry.name == "google.com"

Показване на DNS заявки и отговори за A запис:

Dns.qry.type == 1

Показване на DNS заявки и отговори за AAAA записи:

Dns.qry.type == 28

Показване на отговорите, в които 216.58.196.3 се изпраща като IP за записа A:

Dns.a == 216.58.196.3

Показване на отговорите, където 2a01: 4f8: 172: 1d86 :: 1 се изпраща като IP за AAAA записа:

Dns.aaaa == 2a01: 4f8: 172: 1d86 :: 1

Показване на записи от CNAME apollo.archlinux.org:

Dns.cname == "apollo.archlinux.org"

Показване на отговори, по-дълги от 30:

Dns.resp.len> 30

Показване на заявки с дължина над 25:

Dns.qry.name.len> 25

Показване на отговорите на DNS сървъри, на които е налична рекурсия:

Dns.flags.recavail == 1

Показване на отговорите на DNS сървъри, на които рекурсията не е налична:

Dns.flags.recavail == 0

Желателна ли е рекурсия (ако исканият DNS сървър няма информация за име на хост, трябва ли да потърси тази информация от други DNS сървъри):

Dns.flags.recdesired == 1

Ако искането съдържа 1 , тогава е необходима рекурсия, ако 0 - тогава не е желателно.

Дали да се приемат неудостоверени данни ( 0 означава да не приемаш, 1 означава да приемеш):

Dns.flags.checkdisable == 0

За да видите как се присвояват IP адресите чрез DHCP:

Udp.dstport == 67

Bootp.option.dhcp

За да покажете DHCP заявки:

Bootp.option.dhcp == 3

За да покажете DHCP Discover:

Bootp.option.dhcp == 1

SMB филтър. Този филтър в колоната Информация показва цялото дърво (топка) от връзки, отворени директории и отворени файлове в трасето.

Smb2.cmd == 3 или smb2.cmd == 5

Филтри за Wi-Fi рамки

Показване на елементи за 4-посочно ръкостискане (т.е. рамки на EAPOL):

Показване на рамки за маяци:

Wlan.fc.type_subtype == 0x08

Показване на рамки за реакция на сондата:

Wlan.fc.type_subtype == 0x05

Покажете всичко наведнъж: EAPOL, маяци, отговор на сондата:

Wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol

Показване на безжични рамки за конкретно устройство с BSSID MAC адрес:

Wlan.addr == BSSID

Показване на EAPOL, маяци, реакция на сонда за конкретно устройство с MAC адрес 28: 28: 5D: 6C: 16: 24:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr == 28: 28: 5D: 6C: 16:24

Показване на всички PMKID:

Eapol && wlan.rsn.ie.pmkid

Показване на PMKID, маяци, реакция на сондата:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid))

Показване на PMKID, маяци, реакция на сонда за AP с MAC адрес 40: 3D: EC: C2: 72: B8:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid)) && wlan.addr == 40: 3D: EC: C2: 72: B8

Показване само на първото съобщение от ръкостискането:

Wlan_rsna_eapol.keydes.msgnr == 1

Показване само на второто съобщение от ръкостискането (може да се използва за съобщение за ръкостискане с произволен номер):

Wlan_rsna_eapol.keydes.msgnr == 2

Показване на рамки за точки за достъп със скорост на данни от 1 Mb/s:

Wlan_radio.data_rate == 1

Показване на рамки за точки за достъп със скорост над 10 Mb/s:

Wlan_radio.data_rate> 10

Показване на точки за достъп на определена честота:

Radiotap.channel.freq == 2412

Показване на точки за достъп с определено ниво на сигнал:

Wlan_radio.signal_dbm> -50

Филтри, свързани с антената на устройството:

Radiotap.present.antenna == 1

Радиокран.антена == 1

Ако знаете други интересни филтри на Wireshark, моля, споделете ги в коментарите.

Повечето от въпросите на потребителите при работа с WireShark са филтри за улавяне на трафик. Днес ще разгледаме някои основни примери за тях и ще ви покажем как да ги настроите правилно!

В процеса на анализиране на проблеми с производителността на мрежата или приложението, ако вашата компания няма централизирана система за мониторинг на производителността на приложенията, тогава за да анализирате проблеми от 4 до 7 слоя на мрежовия модел на OSI, ще трябва да използвате анализатор на протоколи (известен още като sniffer ).

Ако нямате търговско решение с вградени инструменти за автоматичен анализ или експертна система, тогава може би най-правилният начин би бил този:

    изтеглете и инсталирайте на лаптоп един от най-добрите безплатни анализатори на протоколи WireShark (http://www.wireshark.org/download.html);

    да се чувствате комфортно с неговия интерфейс;

    проучете стека от протоколи и тяхната структура;

    научете как да работите с филтри за улавяне на трафик;

    научете се да работите с филтри за анализ на трафика.

В тази статия ще се съсредоточим върху предпоследната точка - как да конфигурирате филтри за улавяне на трафик в WireShark.

Примери за конфигуриране на филтри на WireShark за улавяне на трафик

След като изберем интерфейс, можем да продължим да улавяме трафика в - всички подред, но не се препоръчва да правим това, тъй като например при 50% натоварване на гигабитов интерфейс отнема само няколко милисекунди за предаване на 100 000 пакета. Затова е важно да разберем какъв проблем решаваме. Тогава поне вече ще имаме или адреса (IP или MAC) на потребителя или приложението, от което се оплаква, или сървъра, до който има достъп.

По този начин най-простият филтър в Wireshark е IP адресът на устройството (хост, хост) и този филтър изглежда така:

Ако проблемът е по-глобален и трябва да улавяме трафик от отделна подмрежа, независимо от посоката на предаването му, тогава прилагаме филтъра:

    net 192.168.0.0/24 или net 192.168.0.0 маска 255.255.255.0

Когато улавяте трафик от подмрежа, филтърът ще изглежда така:

    src net 192.168.0.0/24 или src net 192.168.0.0 маска 255.255.255.0

И ако трябва да виждате само входящ трафик към нашата подмрежа за анализ, тогава някой от филтрите:

    dst net 192.168.0.0/24

    dst net 192.168.0.0 маска 255.255.255.0

Ако потребителят се оплаква, че страницата не се отваря в браузъра, проблемът може да е в DNS сървъра (порт 53) или с HTTP протокола (порт 80), тогава ние улавяме трафик с помощта на филтъра "порт":

Ако решим да уловим целия трафик за конкретен сървър, с изключение на HTTP и FTP, тогава филтърът се конфигурира според някой от тези два примера:

    хост 192.168.0.1, а не (порт 21 или порт 80)

    хост 192.168.0.1, а не порт 21 и не порт 80

Ако искаме да видим целия трафик на порта, с изключение на DNS, FTP, ARP трафик, тогава логиката ще бъде подобна:

    порт не dns и не 21 и не arp

Когато улавяте трафик от приложения, които използват динамични портове от определен диапазон, филтърът ще изглежда труден, ако версията на Libcap е по-ниска от 0.9.1:

    (tcp> 1500 и tcp< 1550) or (tcp >1500 и tcp< 1550)

ако версиите са по-късни, тогава филтърът ще бъде по-малко заплашителен и разбираем:

    tcp portrange 1501-1549

За улавяне на Ethernet кадри като EAPOL (802.1x EAP протокол се нарича EAPOL (EAP капсулиране през LAN)):

    ether proto 0x888e

За справка ще дам списък с видовете Ethernet рамки за конкретни протоколи:

Тип етер (шестнадесетичен)

протокол

0x0000 - 0x05DC

Дължина IEEE 802.3

0x0101 - 0x01FF

IP, интернет протокол

ARP, протокол за разрешаване на адреси.

Frame Relay ARP

Raw Frame Relay

DRARP, динамичен RARP. RARP, протокол за разрешаване на обратен адрес.

Novell Netware IPX

EtherTalk (AppleTalk през Ethernet)

IBM SNA услуги през Ethernet

AARP, AppleTalk Address Resolution Protocol.

EAPS, Ethernet автоматично превключване на защита.

IPX, Интернет обмен на пакети.

SNMP, прост протокол за управление на мрежата.

IPv6, интернет протокол версия 6.

PPP, протокол от точка до точка.

GSMP, общ протокол за управление на комутатори.

MPLS, Multi-Protocol Label Switching (unicast).

MPLS, Multi-Protocol Label Switching (multicast).

PPPoE, PPP през Ethernet (етап на откриване).

PPPoE, PPP през Ethernet (етап на PPP сесия).

LWAPP, протокол за лека точка за достъп.

LLDP, протокол за откриване на слой на връзката.

EAPOL, EAP през LAN.

Обратна връзка (протокол за тестване на конфигурация)

Идентификатор на протокол за VLAN маркер

Идентификатор на протокол за VLAN маркер

Ако трябва да уловите трафик от конкретен IP протокол, можете да използвате филтър:

    ip proto tcp - улавяне на TCP трафик

    ip proto udp - улавяне на UDP трафик

Най-краткият филтър се използва за улавяне на IP трафик:

За улавяне само на едноадресен трафик при анализиране на изходящия и входящия трафик към мрежово устройство се използва филтър в следния формат:

    не излъчване и не мултикаст

Простите филтри, за които говорихме, могат да бъдат комбинирани с помощта на прости символи:

    отрицание: ! Илине

    съюз: && илии

    Редуване: IIилиили

Пример: за улавяне на трафик от или към устройство с адрес 10.10.10.10, но не от мрежата 192.168.0.0, филтърът ще бъде свързан с отрицание:

    хост 10.10.10.10 &&! net 192.168

Офсетните байт филтри са най-мощните и правят живота много по-лесен, но трябва да знаете протокола и местоположението на полетата в пакета, за да ги използвате. Следните примери за филтри ще уловят пакети със специфична стойност на полето в заглавките или полезния товар. Настройването им е лесно:

Преместете осем байта в IP пакета и улови трафик с TTL = 1

Улавяйте всички TCP пакети с адрес на порт на източника 80. Това е еквивалент на филтъра на src порт 80.

За справка, ето измествания байт към най-интересните полета в пакета:

Поле в опаковка

Дължина в байтове

Филтрирайте

Дължина на IP заглавието

Дължина на IP пакета

Източник на IP адрес

IP адрес Дестинация

IP фрагментация

флаг = 3 и отместване = 13

ip & 0x2000 = 0x2000 или ip & 0x1fff! = 0x0000

TCP дестинационен порт

Дължина на TCP заглавката

За да консолидираме получената информация, ще изградим филтър за улавяне на трафик с HTTP GET заявка. HTTP използва порт 80, транспортния протокол TCP. Шестнадесетичната стойност на думата GET ще изглежда като 0x47455420. Пример за филтър, който получаваме:

    порт 80 и tcp [((tcp & 0xf0 >> 2): 4] = 0x47455420

В тази статия обсъдихме как да конфигурирате и използвате най-основните основни филтри за улавяне на трафик с помощта на анализатора на протокола Wireshark.

Повечето от въпросите на потребителите при работа с WireShark са филтри за улавяне на трафик. Днес ще разгледаме някои основни примери за тях и ще ви покажем как да ги настроите правилно!

В процеса на анализиране на проблеми с производителността на мрежата или приложението, ако вашата компания няма централизирана система за мониторинг на производителността на приложенията, тогава за да анализирате проблеми от 4 до 7 слоя на мрежовия модел на OSI, ще трябва да използвате анализатор на протоколи (известен още като sniffer ).

Ако нямате търговско решение с вградени инструменти за автоматичен анализ или експертна система, тогава може би най-правилният начин би бил този:

    изтеглете и инсталирайте на лаптоп един от най-добрите безплатни анализатори на протоколи WireShark (http://www.wireshark.org/download.html);

    да се чувствате комфортно с неговия интерфейс;

    проучете стека от протоколи и тяхната структура;

    научете как да работите с филтри за улавяне на трафик;

    научете се да работите с филтри за анализ на трафика.

В тази статия ще се съсредоточим върху предпоследната точка - как да конфигурирате филтри за улавяне на трафик в WireShark.

Примери за конфигуриране на филтри на WireShark за улавяне на трафик

След като изберем интерфейс, можем да продължим да улавяме трафика в - всички подред, но не се препоръчва да правим това, тъй като например при 50% натоварване на гигабитов интерфейс отнема само няколко милисекунди за предаване на 100 000 пакета. Затова е важно да разберем какъв проблем решаваме. Тогава поне вече ще имаме или адреса (IP или MAC) на потребителя или приложението, от което се оплаква, или сървъра, до който има достъп.

По този начин най-простият филтър в Wireshark е IP адресът на устройството (хост, хост) и този филтър изглежда така:

Ако проблемът е по-глобален и трябва да улавяме трафик от отделна подмрежа, независимо от посоката на предаването му, тогава прилагаме филтъра:

    net 192.168.0.0/24 или net 192.168.0.0 маска 255.255.255.0

Когато улавяте трафик от подмрежа, филтърът ще изглежда така:

    src net 192.168.0.0/24 или src net 192.168.0.0 маска 255.255.255.0

И ако трябва да виждате само входящ трафик към нашата подмрежа за анализ, тогава някой от филтрите:

    dst net 192.168.0.0/24

    dst net 192.168.0.0 маска 255.255.255.0

Ако потребителят се оплаква, че страницата не се отваря в браузъра, проблемът може да е в DNS сървъра (порт 53) или с HTTP протокола (порт 80), тогава ние улавяме трафик с помощта на филтъра "порт":

Ако решим да уловим целия трафик за конкретен сървър, с изключение на HTTP и FTP, тогава филтърът се конфигурира според някой от тези два примера:

    хост 192.168.0.1, а не (порт 21 или порт 80)

    хост 192.168.0.1, а не порт 21 и не порт 80

Ако искаме да видим целия трафик на порта, с изключение на DNS, FTP, ARP трафик, тогава логиката ще бъде подобна:

    порт не dns и не 21 и не arp

Когато улавяте трафик от приложения, които използват динамични портове от определен диапазон, филтърът ще изглежда труден, ако версията на Libcap е по-ниска от 0.9.1:

    (tcp> 1500 и tcp< 1550) or (tcp >1500 и tcp< 1550)

ако версиите са по-късни, тогава филтърът ще бъде по-малко заплашителен и разбираем:

    tcp portrange 1501-1549

За улавяне на Ethernet кадри като EAPOL (802.1x EAP протокол се нарича EAPOL (EAP капсулиране през LAN)):

    ether proto 0x888e

За справка ще дам списък с видовете Ethernet рамки за конкретни протоколи:

Тип етер (шестнадесетичен)

протокол

0x0000 - 0x05DC

Дължина IEEE 802.3

0x0101 - 0x01FF

IP, интернет протокол

ARP, протокол за разрешаване на адреси.

Frame Relay ARP

Raw Frame Relay

DRARP, динамичен RARP. RARP, протокол за разрешаване на обратен адрес.

Novell Netware IPX

EtherTalk (AppleTalk през Ethernet)

IBM SNA услуги през Ethernet

AARP, AppleTalk Address Resolution Protocol.

EAPS, Ethernet автоматично превключване на защита.

IPX, Интернет обмен на пакети.

SNMP, прост протокол за управление на мрежата.

IPv6, интернет протокол версия 6.

PPP, протокол от точка до точка.

GSMP, общ протокол за управление на комутатори.

MPLS, Multi-Protocol Label Switching (unicast).

MPLS, Multi-Protocol Label Switching (multicast).

PPPoE, PPP през Ethernet (етап на откриване).

PPPoE, PPP през Ethernet (етап на PPP сесия).

LWAPP, протокол за лека точка за достъп.

LLDP, протокол за откриване на слой на връзката.

EAPOL, EAP през LAN.

Обратна връзка (протокол за тестване на конфигурация)

Идентификатор на протокол за VLAN маркер

Идентификатор на протокол за VLAN маркер

Ако трябва да уловите трафик от конкретен IP протокол, можете да използвате филтър:

    ip proto tcp - улавяне на TCP трафик

    ip proto udp - улавяне на UDP трафик

Най-краткият филтър се използва за улавяне на IP трафик:

За улавяне само на едноадресен трафик при анализиране на изходящия и входящия трафик към мрежово устройство се използва филтър в следния формат:

    не излъчване и не мултикаст

Простите филтри, за които говорихме, могат да бъдат комбинирани с помощта на прости символи:

    отрицание: ! Илине

    съюз: && илии

    Редуване: IIилиили

Пример: за улавяне на трафик от или към устройство с адрес 10.10.10.10, но не от мрежата 192.168.0.0, филтърът ще бъде свързан с отрицание:

    хост 10.10.10.10 &&! net 192.168

Офсетните байт филтри са най-мощните и правят живота много по-лесен, но трябва да знаете протокола и местоположението на полетата в пакета, за да ги използвате. Следните примери за филтри ще уловят пакети със специфична стойност на полето в заглавките или полезния товар. Настройването им е лесно:

Преместете осем байта в IP пакета и улови трафик с TTL = 1

Улавяйте всички TCP пакети с адрес на порт на източника 80. Това е еквивалент на филтъра на src порт 80.

За справка, ето измествания байт към най-интересните полета в пакета:

Поле в опаковка

Дължина в байтове

Филтрирайте

Дължина на IP заглавието

Дължина на IP пакета

Източник на IP адрес

IP адрес Дестинация

IP фрагментация

флаг = 3 и отместване = 13

ip & 0x2000 = 0x2000 или ip & 0x1fff! = 0x0000

TCP дестинационен порт

Дължина на TCP заглавката

За да консолидираме получената информация, ще изградим филтър за улавяне на трафик с HTTP GET заявка. HTTP използва порт 80, транспортния протокол TCP. Шестнадесетичната стойност на думата GET ще изглежда като 0x47455420. Пример за филтър, който получаваме:

    порт 80 и tcp [((tcp & 0xf0 >> 2): 4] = 0x47455420

В тази статия обсъдихме как да конфигурирате и използвате най-основните основни филтри за улавяне на трафик с помощта на анализатора на протокола Wireshark.