Wireshark-applikationstrafik. Nätverksanalys med Wireshark. Extra funktioner: visualisering, alternativa avlyssningar

Wireshark är en kraftfull nätverksanalysator som kan användas för att analysera trafiken som passerar genom din dators nätverksgränssnitt. Du kan behöva den för att upptäcka och lösa nätverksproblem, felsöka dina webbapplikationer, nätverksprogram eller webbplatser. Wireshark låter dig se innehållet i ett paket fullt ut på alla nivåer, så att du bättre kan förstå hur nätverket fungerar på en låg nivå.

Alla paket fångas i realtid och tillhandahålls i ett lättläst format. Programmet stöder ett mycket kraftfullt filtreringssystem, färgmarkering och andra funktioner som hjälper dig att hitta rätt paket. I den här handledningen kommer vi att titta på hur du använder Wireshark för att analysera trafik. Nyligen började utvecklarna arbeta på den andra grenen av Wireshark 2.0-programmet, många förändringar och förbättringar gjordes i det, speciellt för gränssnittet. Detta är vad vi kommer att använda i den här artikeln.

Innan du går vidare till att överväga sätt att analysera trafik, måste du överväga vilka funktioner programmet stöder mer i detalj, vilka protokoll det kan fungera med och vad det kan göra. Här är huvudfunktionerna i programmet:

  • Fånga paket i realtid från trådbundna eller andra typer av nätverksgränssnitt, samt läs från en fil;
  • Följande insamlingsgränssnitt stöds: Ethernet, IEEE 802.11, PPP och lokala virtuella gränssnitt;
  • Paket kan filtreras baserat på många parametrar med hjälp av filter;
  • Alla kända protokoll är markerade i listan i olika färger, till exempel TCP, HTTP, FTP, DNS, ICMP och så vidare;
  • Stöd för att fånga VoIP-samtalstrafik;
  • Dekryptering av HTTPS-trafik stöds om ett certifikat är tillgängligt;
  • Dekryptering av WEP- och WPA-trafik trådlösa nätverk med nyckel och handslag;
  • Visar nätverksbelastningsstatistik;
  • Visa paketinnehåll för alla nätverkslager;
  • Visar tidpunkten för att skicka och ta emot paket.

Programmet har många andra funktioner, men dessa var de viktigaste som kan intressera dig.

Hur man använder Wireshark

Jag antar att du redan har programmet installerat, men om inte kan du installera det från de officiella arkiven. För att göra detta, skriv kommandot i Ubuntu:

sudo apt installera wireshark

Efter installationen kan du hitta programmet i distributionens huvudmeny. Du måste köra Wireshark med superanvändarrättigheter, för annars kommer den inte att kunna analysera nätverkspaket. Detta kan göras från huvudmenyn eller via terminalen med kommandot för KDE:

Och för Gnome/Unity:

Programmets huvudfönster är uppdelat i tre delar: den första kolumnen innehåller en lista över nätverksgränssnitt som är tillgängliga för analys, den andra - alternativ för att öppna filer och den tredje - hjälp.

Nätverkstrafikanalys

För att starta analys, välj ett nätverksgränssnitt, till exempel eth0, och klicka på knappen Start.

Efter detta öppnas följande fönster, redan med en ström av paket som passerar genom gränssnittet. Detta fönster är också uppdelat i flera delar:

  • Övre del- det här är menyer och paneler med olika knappar;
  • Lista över paket- sedan visas flödet av nätverkspaket som du kommer att analysera;
  • paket innehåll- precis nedanför är innehållet i det valda paketet, det är indelat i kategorier beroende på transportnivå;
  • Verklig prestation- Längst ner visas förpackningens innehåll i verklig form, såväl som i HEX-form.

Du kan klicka på vilket paket som helst för att analysera dess innehåll:

Här ser vi ett DNS-förfrågningspaket för att få sajtens IP-adress, i själva förfrågan skickas domänen, och i svarspaketet får vi vår fråga såväl som svaret.

För mer bekväm visning kan du öppna paketet i ett nytt fönster genom att dubbelklicka på posten:

Wireshark filter

Att manuellt gå igenom paket för att hitta de du behöver är väldigt obekvämt, speciellt med en aktiv tråd. Därför är det bättre att använda filter för denna uppgift. Det finns en speciell rad under menyn för att ange filter. Du kan klicka Uttryck för att öppna filterdesignern, men det finns många av dem, så vi ska titta på de mest grundläggande:

  • ip.dst- mål-IP-adress;
  • ip.src- avsändarens IP-adress;
  • ip.addr- IP för avsändaren eller mottagaren;
  • ip.proto- protokoll;
  • tcp.dstport- Bestämmelsehamn.
  • tcp.srcport- avsändarport;
  • ip.ttl- TTL-filter, bestämmer nätverksavståndet;
  • http.request_uri- den begärda webbplatsadressen.

För att ange förhållandet mellan ett fält och ett värde i ett filter kan du använda följande operatorer:

  • == - lika;
  • != - inte jämnlikt;
  • < - mindre;
  • > - Mer;
  • <= - mindre eller lika;
  • >= - mer eller lika;
  • tändstickor- vanligt uttryck;
  • innehåller- innehåller.

För att kombinera flera uttryck kan du använda:

  • && - båda uttrycken måste vara sanna för paketet;
  • || – ett av uttrycken kan vara sant.

Låt oss nu titta närmare på flera filter med hjälp av exempel och försöka förstå alla tecken på relationer.

Låt oss först filtrera alla paket som skickas till 194.67.215. Ange en sträng i filterfältet och klicka på Tillämpa. För enkelhetens skull kan Wireshark-filter sparas med knappen Spara:

ip.dst == 194.67.215.125

Och för att inte bara ta emot skickade paket, utan också de som tas emot som svar från denna nod, kan du kombinera två villkor:

ip.dst == 194.67.215.125 || ip.src == 194.67.215.125

Vi kan också välja överförda stora filer:

http.content_length > 5000

Genom att filtrera innehållstypen kan vi välja alla bilder som har laddats upp; låt oss utföra analysen Wireshark-trafik, paket som innehåller ordet bild:

http.content_type innehåller bild

För att rensa filtret kan du trycka på knappen Klar. Det händer att du inte alltid känner till all information som behövs för filtrering, utan bara vill utforska nätverket. Du kan lägga till vilket fält som helst i ett paket som en kolumn och se dess innehåll i det allmänna fönstret för varje paket.

Till exempel vill jag visa TTL (time to live) för ett paket som en kolumn. För att göra detta, öppna paketinformationen, hitta det här fältet i IP-sektionen. Ring sedan upp snabbmenyn och välj alternativet Använd som kolumn:

På samma sätt kan du skapa ett filter baserat på vilket fält som helst. Välj den och ta fram snabbmenyn och klicka sedan Applicera som filter eller Förbered som filter, välj sedan Vald för att endast visa de valda värdena, eller Ej valt för att ta bort dem:

Det angivna fältet och dess värde kommer att tillämpas eller, i det andra fallet, infogas i filterfältet:

På detta sätt kan du lägga till ett fält av vilket paket eller kolumn som helst i filtret. Det finns också detta alternativ i snabbmenyn. För att filtrera protokoll kan du använda fler enkla förhållanden. Låt oss till exempel analysera Wireshark-trafik för HTTP- och DNS-protokollen:

En annan intressant funktion i programmet är användningen av Wireshark för att spåra en specifik session mellan användarens dator och servern. För att göra detta, öppna snabbmenyn för paketet och välj Följ TCP-strömmen.

Ett fönster öppnas där du hittar all data som överförts mellan servern och klienten:

Diagnostisera Wireshark-problem

Du kanske undrar hur du använder Wireshark 2.0 för att upptäcka problem i ditt nätverk. För att göra detta finns det en rund knapp i det nedre vänstra hörnet av fönstret; när du klickar på den öppnas ett fönster Expet-verktyg. I den samlar Wireshark alla felmeddelanden och nätverksproblem:

Fönstret är uppdelat i flikar som fel, varningar, meddelanden, chattar. Programmet kan filtrera och hitta många nätverksproblem, och här kan du se dem väldigt snabbt. Wireshark-filter stöds också här.

Wireshark trafikanalys

Du kan mycket enkelt förstå vad användare laddade ner och vilka filer de såg om anslutningen inte var krypterad. Programmet gör ett mycket bra jobb med att extrahera innehåll.

För att göra detta måste du först stoppa trafikfångst med den röda fyrkanten på panelen. Öppna sedan menyn Fil -> Exportera objekt -> HTTP:

Introduktion

När man studerar nätverksinteraktioner på nivån för enskilda paket, datagram, segment och meddelanden på programnivå är det ofta nödvändigt att lösa trafikfiltreringsproblem. Kärnan i att använda filter är att söka och välja grupper, såväl som enskilda överföringsenheter som är av intresse för vidare analys. Denna funktion är extremt användbar i verktyg som är utformade för att avlyssna och studera nätverkstrafik (sniffers), och hjälper en systemadministratör eller informationssäkerhetsspecialist att hitta lite användbar information i de intensiva informationsflödena i moderna nätverk.

Den öppna multiplattformsprogramvaran som diskuteras i den här artikeln Wireshark protokollanalysator har två filterundersystem: tid för trafikavlyssning (fångningsfilter) och visningsfilter. Som ni vet är det första delsystemet baserat på regelspråket för Pcap-biblioteket (Packet Capture). Att "skrubba" trafik under insamling minskar i synnerhet antalet paket som fångas upp, vilket sparar utrymme i minnet eller på hårddisken. När det gäller visningsfilter är de, eftersom de är en inbyggd funktion i Wireshark, designade för att "anpassa" redan uppfångad trafik i programmets grafiska gränssnitt.


Om filterspråk

Möjligheten att avlyssna trafik för övervaknings- och felsökningsändamål finns i vilken nätverksstack som helst operativ system. Det utförs med hjälp av det så kallade Packet Filter, som är en del av systemkärnan och tar emot mottagna/skickade paket från nätverkskortsdrivrutinen. De mest kända paketfiltren för Unix-liknande operativsystem är BPF (Berkeley Packet Filter) och LSF (Linux Socket Filter).

Trafikprovtagning enligt angivna kriterier i BPF implementerat i form av ett speciellt skiftlägeskänsligt primitivt maskinspråk, för vilket paketfiltret självt fungerar som tolk. Program på detta språk kan extrahera fragment från paket och jämföra mottagna data med givna värden, testa enskilda bitar, utföra aritmetiska operationer och sedan acceptera eller kassera paket beroende på resultaten av alla dessa tester. "Lågnivå"-metoden är användbar för programmerare som utvecklar nätverksfunktionsbibliotek och olika verktyg.

Vanliga användare använder vanligtvis filterspråk på "hög nivå". Ett typiskt applikationsspråk som används i en sniffer för att beskriva trafikregler tillåter konstruktion av uttrycksprimitiver baserat på individuella meddelandefält i olika protokoll. I det här fallet kan kriteriet vara förhållandet mellan fältvärdet och ett visst värde (lika med, större än, mindre än), sammanträffandet av värdet med mallen eller helt enkelt närvaron av fältet i meddelandet. Primitiver kan kombineras till ett komplext uttryck med hjälp av logiska funktioner ("och", "eller", "inte", etc.).

I en öppen värld programvara i själva verket är standardfilterspråket syntaxen som används i Pcap-biblioteket. Det är grunden inte bara för Wireshark, utan även för andra verktyg med öppen källkod, som till exempel den välkända konsolsniffaren tcpdump i Unix-världen. Egentligen är Pcap och tcpdump ett gemensamt projekt. Det populära systemet för intrångsdetektering Snort använder också Pcap-formatet i paketfångningsläge för att definiera trafikfiltreringsregler.


Grunderna för Pcap-filter

Så, filter inkluderar en eller flera primitiver. En primitiv består vanligtvis av ett objekt (nummer eller namn) och en eller flera specifikationer som anger protokollet (eter, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp, udp), riktning (src, dst, alla och etc.) och objekttyp (värd, nät, port, etc.). Till exempel, för att fånga upp paket där den utgående IP-adressen är 192.168.56.102, bör du använda ett filter som:

IP src-värd 192.168.56.102

Eller för att spela in ARP-trafik som involverar värdar på nätverket 192.168.56.0:

Arp netto 192.168.56

Ofta använda specifikationer sammanfattas i en tabell (valfria komponenter är betecknade - , alternativ - |, objekt -< >). En komplett lista finns i Pcap-dokumentationen (på Linux, tillgänglig i användarmanualen med man pcap-filter-kommandot).

För att kombinera flera primitiver till ett uttryck används logiska funktioner: "och" (betecknas med nyckelordet och eller &&), "eller" (eller eller ||), "inte" (inte eller!). Till exempel, för att avlyssna SSH-protokolltrafik för nod 192.168.56.102, är följande design lämplig:

Tcp-port 22 och värd 192.168.56.102

För mycket komplexa uttryck bör parenteser användas. Till exempel:

Net 192.168.56.0/24 och (tcp-port 21 eller tcp-port 22)

Pcap-filter utan begränsningar

För dem som är vana vid att leva efter sina egna regler ger Pcap-biblioteket slumpmässig tillgång till innehållet i nätverkspaket, med full kraft av OS-paketfiltret. Detta görs med en ganska enkel syntax:

Proto[exp:size]

där protoparametern är ett av de protokoll som stöds av Wireshark; exp är förskjutningen i byte i förhållande till början av lagret som anges i proto, och storlek är antalet byte som ska extraheras.

Med tanke på att det i primitiver är möjligt att tillämpa jämförelseoperationer i notationen av programmeringsspråket C (>, =,

Exemplet har dock bara en metodologisk betydelse, eftersom detta protokoll lätt filtreras av standardregeln icmp.

Men att välja HTTP-förfrågningar gjorda med GET-metoden i farten från trafik är inte så lätt för Pcap. Och lösningen som föreslås i dokumentationen hävdar att den är original:

Port 80 och tcp[((tcp & 0xf0) >> 2):4] = 0x47455420

Detta filter kontrollerar närvaron av "G", "E", "T" och "" byte (hexvärden 47, 45, 54 och 20) omedelbart efter TCP-huvudet, vars längd beräknas av uttryck "tcp & 0xf0) >> 2".

Som framgår av det sista exemplet, förutom jämförelseoperationer, är binära C-operatorer (+, -, *, /, &, |, >) också tillgängliga för användaren direkt i primitiverna.


Om visningsfilter

På tal om skillnader visa filter från Pcap-filter kan du, förutom formatet för inspelningsspecifikationer (protokollfält ser ut som..., till exempel ip.len), även namnge ytterligare stöd för engelsk notation i jämförelseoperationer (eq - lika, gt - större, lt - mindre, ge - större eller lika, le - mindre än eller lika med) och binära operatorer (och, eller, xor, inte), samt stöd för delsträngar.

Att hämta delsträngar i fält liknar att extrahera slumpmässiga bytes från ett paket i Pcap-filter, men har en mer flexibel syntax. Till exempel skulle ett sådant uttryck kontrollera de första 4 byten i källans MAC-adressfält för en Ethernet-ram (motsvarande):

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

Naturligtvis är skillnaden mellan filter att Pcap-regler används vid avlyssning av trafik; i det grafiska gränssnittet konfigureras de i dialogrutan "Fångstalternativ" (förresten, det är möjligt att komma ihåg ofta använda uttryck). Och visningsfilter fungerar med paket som finns i listan i huvudprogramfönstret:

Funktionellt är Wiresharks inbyggda filtreringsundersystem mycket mer användarvänligt. I synnerhet finns det inget behov av att komma ihåg information om meddelandeformat (offset, marginalstorlekar, etc.). Det obligatoriska meddelandefältet för detta protokoll kan lätt hittas i fönstret för att ställa in visningsregler (Filter Expression), och du kan också välja ett villkor och ett fördefinierat värde från listan för detta fält eller ange ditt eget. För något av de många protokoll som stöds av Wireshark, t.ex på ett enkelt sätt Du kan anpassa visningsfiltret.

Ett mycket illustrativt exempel skulle vara det nästan akademiska exemplet på att avgöra när en TCP-segmentbuffert svämmar över med hjälp av följande mappningsregel:

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

Slutsats

Wireshark-protokollanalysatorn har ett kraftfullt paketfiltreringssystem och gör det möjligt att skapa komplexa regler med hjälp av logiska funktioner och binära operatorer. Filtren för insamlingstid är standard och kommer att vara bekanta för användare som har använt Pcap-baserade nätverksverktyg som tcpdump. Reglerna för paketvisning är lätta att lära sig och använda tack vare funktionerna GUI det aktuella programmet. Sammantaget låter funktionaliteten i Wiresharks filtreringssystem dig dra fördel av lågnivåpaketfiltret ganska effektivt.

De vanligaste frågorna användare har när de arbetar med WireShark-programmet är filter för trafikfångst. Idag kommer vi att titta på deras grundläggande exempel och visa dig hur du konfigurerar dem korrekt!

I processen med att analysera problem med nätverks- eller applikationsprestanda, om ditt företag inte har ett centraliserat övervakningssystem för applikationsprestanda installerat, måste du använda en protokollanalysator för att analysera problem från lager 4 till 7 i OSI-nätverksmodellen. en sniffer).

Om du inte har en kommersiell lösning med inbyggda automatiska analysverktyg eller ett expertsystem, så skulle kanske det mest korrekta sättet vara detta:

    ladda ner och installera på din bärbara dator en av de bästa gratis protokollanalysatorerna, WireShark (http://www.wireshark.org/download.html);

    bli bekväm med dess gränssnitt;

    studera protokollstacken och deras struktur;

    lär dig att arbeta med filter för att fånga trafik;

    lär dig hur du arbetar med filter för trafikanalys.

I den här artikeln kommer vi att fokusera på den näst sista punkten - hur man ställer in filter för att fånga trafik i WireShark.

Exempel på att ställa in WireShark-filter för att fånga upp trafik

Efter att ha valt gränssnitt kan vi fortsätta att fånga trafik i allt-i-rad-läge, men detta rekommenderas inte, eftersom det till exempel med en 50% belastning på ett gigabit-gränssnitt bara tar några millisekunder att sända 100 000 paket. Därför är det viktigt att förstå vilket problem vi löser. Då kommer vi åtminstone redan ha antingen adressen (IP eller MAC) till användaren eller applikationen han klagar på eller servern han har åtkomst till.

Det enklaste filtret i Wireshark är således enhetens (värdens) IP-adress och detta filter ser ut så här:

Om problemet är mer globalt och vi behöver fånga trafik från ett separat subnät oavsett riktningen för dess överföring, använder vi ett filter:

    net 192.168.0.0/24 eller net 192.168.0.0 mask 255.255.255.0

När du samlar in trafik från ett subnät kommer filtret att se ut så här:

    src net 192.168.0.0/24 eller src net 192.168.0.0 mask 255.255.255.0

Och om du bara behöver se inkommande trafik till vårt undernät för analys, då kan något av filtren:

    dst netto 192.168.0.0/24

    dst net 192.168.0.0 mask 255.255.255.0

Om användaren klagar på att han inte kan öppna sidor i webbläsaren, kan problemet vara med DNS-servern (port 53) eller med HTTP-protokollet (port 80), då fångar vi upp trafiken med "port"-filtret:

Om vi ​​bestämmer oss för att fånga all trafik för en specifik server utan att ta hänsyn till HTTP och FTP, konfigureras filtret med något av dessa två exempel:

    värd 192.168.0.1 och inte (port 21 eller port 80)

    värd 192.168.0.1 och inte port 21 och inte port 80

Om vi ​​vill se all trafik på en port, förutom DNS, FTP, ARP-trafik, kommer logiken att vara liknande:

    port inte dns och inte 21 och inte arp

När du fångar trafik från applikationer som använder dynamiska portar från ett visst intervall, kommer filtret att se svårt ut om Libcap-versionen är lägre än 0.9.1:

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

om versionerna är senare kommer filtret att vara mindre hotfullt och förståeligt:

    tcp portrange 1501-1549

För att fånga Ethernet-ramar av EAPOL-typ (EAP-meddelandeöverföringsprotokollet i 802.1x-standarden kallas EAPOL (EAP-inkapsling över LAN)):

    eter proto 0x888e

För referens, här är en lista över Ethernet-ramtyper för specifika protokoll:

Etertyp (hexadecimal)

Protokoll

0x0000 - 0x05DC

IEEE 802.3 längd

0x0101 - 0x01FF

IP, Internetprotokoll

ARP, Address Resolution Protocol.

Ramrelä ARP

Raw Frame Relä

DRARP, Dynamisk RARP. RARP, Reverse Address Resolution Protocol.

Novell Netware IPX

EtherTalk (AppleTalk över Ethernet)

IBM SNA Services över Ethernet

AARP, AppleTalk Address Resolution Protocol.

EAPS, Ethernet Automatic Protection Switching.

IPX, Internet Packet Exchange.

SNMP, Simple Network Management Protocol.

IPv6, Internet Protocol version 6.

PPP, Point-to-Point Protocol.

GSMP, General Switch Management Protocol.

MPLS, Multi-Protocol Label Switching (unicast).

MPLS, Multi-Protocol Label Switching (multicast).

PPPoE, PPP Over Ethernet (Discovery Stage).

PPPoE, PPP Over Ethernet (PPP Session Stage).

LWAPP, Light Weight Access Point Protocol.

LLDP, Link Layer Discovery Protocol.

EAPOL, EAP över LAN.

Loopback (Configuration Test Protocol)

VLAN Tag Protocol Identifier

VLAN Tag Protocol Identifier

Om du behöver fånga trafik av ett specifikt IP-protokoll kan du använda ett filter:

    ip proto tcp - fånga TCP-trafik

    ip proto udp - fånga UDP-trafik

Det kortaste filtret används för att fånga IP-trafik:

För att endast fånga unicast-trafik vid analys av utgående och inkommande trafik till en nätverksenhet, används ett filter i följande format:

    inte broadcast och inte multicast

De enkla filtren vi pratade om kan kombineras med enkla symboler:

    Negation: ! Ellerinte

    En förening: && elleroch

    Alternering: IIellereller

Exempel: för att fånga trafik från eller till en enhet med adressen 10.10.10.10, men inte från nätverket 192.168.0.0, erhålls filtret genom att kombinera med negation:

    värd 10.10.10.10 && !net 192.168

Filter baserade på offsetbytes är de mest kraftfulla och gör livet mycket lättare, men för att använda dem behöver du känna till protokollet och placeringen av fälten du letar efter i paketet. Följande exempelfilter kommer att fånga paket med ett specifikt fältvärde i rubrikerna eller nyttolasten. Det är enkelt att ställa in dem:

Vi skiftar med åtta byte i IP-paketet och fångar upp trafik med ett TTL-värde på 1

Vi fångar alla TCP-paket med en källportadress på 80. Detta motsvarar src port 80-filtret.

För referens, här är offsetbyten till de mest intressanta fälten i paketet:

Fält i paketet

Längd i byte

Filtrera

IP Header Längd

IP-paketlängd

IP-adresskälla

IP-adress destination

IP-fragmentering

flagga = 3 och Offset = 13

ip & 0x2000 = 0x2000 eller ip & 0x1fff !=0x0000

TCP-destinationsport

TCP-huvudets längd

För att konsolidera den mottagna informationen kommer vi att bygga ett filter för att fånga upp trafik med en HTTP GET-begäran. HTTP-protokollet använder port 80, TCP-transportprotokollet. Det hexadecimala värdet för ordet GET kommer att se ut som 0x47455420. Ett exempel på filtret vi kommer att få:

    port 80 och tcp[((tcp & 0xf0 >>2):4]=0x47455420

I det här materialet tittade vi på hur man ställer in och använder de enklaste grundläggande filtren för att fånga upp trafik med Wireshark-protokollanalysatorn.

Bara ett stort antal olika filter. Och det finns enorm dokumentation om dessa filter, vilket inte är så lätt att förstå. Jag har samlat de mest intressanta och mest använda Wireshark-filtren åt mig. För nybörjare kan detta vara något av en referens för Wireshark-filter, en utgångspunkt för lärande. Också här i kommentarerna inbjuder jag dig att dela de löpande filter som du ofta använder, såväl som intressanta fynd - jag kommer att lägga till dem i den här listan.

Kom ihåg att Wireshark har visningsfilter och fångstfilter. Här tittar jag på visningsfilter, som läggs in i huvudprogramfönstret i det översta fältet omedelbart under menyn och ikonerna för huvudfunktionerna.

För att helt förstå innebörden av filter och exakt vad de visar måste du förstå hur nätverket fungerar. För att bli bekant med principerna för nätverksdrift och protokoll, rekommenderas det att studera serien om datornätverk, den första artikeln i serien "" (resterande delar är under förberedelse).

Vissa filter här är skrivna i en allmän form, och några tillhandahålls som specifika exempel. Kom ihåg att du i alla fall kan ersätta din data, till exempel ändra portnumret till någon du är intresserad av, och även göra detsamma med IP-adress, MAC-adress, tidsvärde, etc.

Wireshark-filteroperatörer

Filter kan ha olika värden, som sträng, hexadecimal eller nummer.

Om du letar efter en oprecis förekomst (bättre lämpad för icke-numeriska värden) använd innehåller. Till exempel, för att visa TCP-paket som innehåller stränghackwaren, behövs följande filter:

Tcp innehåller hackware

Operatörer används för att hitta exakta värden. Låt oss titta på dem:

Som du kan se finns det två alternativ för att skriva, till exempel om vi vill indikera att filtervärdet är lika med något, då kan vi använda == eller ekv.

Ganska komplexa strukturer kan byggas från filter som använder logiska operander, men, tydligen, om samma filter används två gånger med jämförelseoperatorer, till exempel, som här i ett försök att filtrera inte efter en port, utan efter ett antal portar:

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

sedan filtervärdet (i detta fall tcp.port) skrivs över av det sista värdet, så som ett resultat, istället för det förväntade beteendet, får vi resultatet av endast den sista delen, i detta fall är det

Tcp.port<=8180

Var medveten om denna bugg!

När den används med == (likväl) denna bugg saknas.

Wireshark Filter Logical Operators

Booleska operatorer låter dig skapa detaljerade filter med flera villkor samtidigt. Det rekommenderas att du använder parenteser också, eftersom du annars kan få ett värde som inte är vad du förväntar dig.

Operatör Beskrivning
och/&& Logiskt OCH, data matas ut om det matchar båda delarna av filtret. Till exempel filter ip.src==192.168.1.1 och tcp kommer endast att visa paket som kommer från 192.168.1.1 och som är associerade med TCP-protokollet. Endast data som matchar båda villkoren kommer att visas.
eller/|| Logiskt ELLER, det räcker med att endast ett villkor är sant; om båda är sanna, så kvalificerar det också. Till exempel filter tcp.port==80 eller tcp.port==8080 kommer att visa TCP-paket som är bundna (antingen källa eller destination) till port 80 eller 8080.
inte/! Boolean NOT används när vi vill utesluta vissa paket. Det vill säga alla paket kommer att visas utom de som uppfyller villkoret efter NOT. Till exempel filter !dns kommer att visa alla paket utom DNS.

Exempel på kombinationer:

Visa HTTP eller DNS-trafik:

Http eller dns

Visa all trafik, bortsett från ARP, ICMP och DNS:

!(arp eller icmp eller dns)

Gränssnittsfilter

Visa paket som endast skickats eller tagits emot på wlan0-gränssnittet:

Frame.interface_name == "wlan0"

Link Layer Protocol Traffic

Så här visar du ARP-trafik:

Visa ARP-protokollramar skickade från en enhet med MAC-adress 00:c0:ca:96:cf:cb:

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

Visa ARP-protokollramar skickade från en enhet med IP-adress 192.168.50.90:

Arp.src.proto_ipv4 == 192.168.50.90

Visa protokoll ARP-ramar som skickas till en enhet som har en MAC-adress på 00:00:00:00:00:00 (denna adress används när protokollet försöker lära sig mål-MAC-adressen. En annan populär adress som kan förvirra dig är ff: ff:ff:ff:ff:ff, denna adress sänds, det vill säga meddelanden med denna adress är avsedda för alla enheter i det lokala nätverket):

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

Visa ARP-protokollramar som skickats till en enhet med IP-adress 192.168.50.1:

Arp.dst.proto_ipv4 == 192.168.50.1

Visa Ethernet-trafik:

Visa ramar (alla ramar i allmänhet, inte bara ARP, som var fallet i tidigare exempel) skickade från en enhet med MAC-adress 00:c0:ca:96:cf:cb:

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

Visa ramar som skickats till en enhet med MAC-adress 78:cd:8e:a6:73:be:

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

Internetprotokolltrafik

IPv4-protokollfiltrering

Visa IP-trafik (detta inkluderar TCP, UDP, såväl som applikationsnivåprotokoll DNS, HTTP - det vill säga nästan allt utom länklagerprotokoll som inte använder IP-adresser för dataöverföring (i Ethernet lokala nätverk använder de MAC-adresser som leveransadresser adresser)):

För att vara mer exakt avser detta IPv4-protokolltrafik, som vanligtvis helt enkelt kallas IP (Internet Protocol).

Visa trafik som är kopplad till en specifik IP-adress (ange den istället för x.x.x.x). Paket där denna IP-adress är datakällan ELLER destinationen kommer att visas:

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

Visa trafik som är kopplad till dessa två IP-adresser. Enligt den enda möjliga logiken kommer en av dessa adresser att vara källan, och den andra kommer att vara leveransadressen.

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

Visa trafik som kommer från en värd med IP-adress 138.201.81.199:

IP.src == 138.201.81.199

Visa trafik vars destination är en värd med IP-adress 138.201.81.199:

IP.dst == 138.201.81.199

Observera att IP-protokollet fungerar på IP-adresser, men fungerar inte på portar. Portar är en del av TCP- och UDP-protokollen. IP-protokollet ansvarar endast för att dirigera trafik mellan värdar.

Filtrera undernät och IP-intervall i Wireshark

Du kan ange ett subnät istället för en IP-adress:

IP.addr == 192.168.1.0/24

Filtrera trafik som skickas från ett specifikt IP-intervall. Om du behöver filtrera trafik som kommer från ett subnät, använd sedan ett filter som:

IP.src == 192.168.1.0/24

Filtrera trafik avsedd att skickas till ett specifikt IP-intervall. Om du behöver filtrera trafik vars destination är ett subnät, använd sedan ett filter som:

IP.dst == 192.168.1.0/24

IPv6-protokollfiltrering

Visa IPv6-trafik (Internet Protocol version 6):

Filtrering efter IPv6-adress. För att filtrera efter IPv6-adress, använd filtret:

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

Filtrering av IPv6-undernät och intervall i Wireshark

Istället för en IPv6-adress kan du ange ett subnät för filtrering:

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

Om du behöver filtrera trafik som kommer från en specifik IPv6-adress:

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

Om du behöver filtrera trafik som skickas till en specifik IPv6-adress:

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

Filtrera trafik som skickas från ett specifikt IPv6-intervall. Om du behöver filtrera trafik som kommer från ett subnät, använd sedan ett filter som:

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

Filtrera trafik avsedd att skickas till ett specifikt IPv6-intervall. Om du behöver filtrera trafik vars destination är ett subnät, använd sedan ett filter som:

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

Filtrering av ICMPv6 (Internet Control Message Protocol - sjätte versionen av Internet Control Message Protocol) i Wireshark görs av ett filter:

För att se paket som fungerar som ARP för IPv6, använd filtret:

Icmpv6.type == 133 eller icmpv6.type == 134 eller icmpv6.type == 135 eller icmpv6.type == 136 eller icmpv6.type == 137

Andra IP-adressfilter är liknande för IPv6 och IPv4.

Transportlagerprotokolltrafik

Så här ser du endast TCP-trafik:

Visa trafik vars källa eller destination är en specifik port, till exempel 8080:

Tcp.port==8080

Visa trafik som kommer från port 80:

Tcp.srcport == 80

Visa trafiken som skickas till tjänsten som lyssnar på port 80:

Tcp.dstport == 80

Visa TCP-paket med SYN-flaggan aktiverad:

Tcp.flags.syn==1

Visa TCP-paket med SYN-flaggan aktiverad och ACK-flaggan inaktiverad:

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

Likaså för andra flaggor:

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

Du kan också använda syntax som tcp.flags == 0x0XX, Till exempel:

  • FIN det tcp.flags == 0x001
  • SYN är tcp.flags == 0x002
  • RST är tcp.flags == 0x004
  • ACK det här tcp.flags == 0x010
  • ACK och FIN inställda samtidigt är tcp.flags == 0x011
  • ACK och SYN inställda samtidigt är tcp.flags == 0x012
  • ACK och RST installerade samtidigt är tcp.flags == 0x014

Så här visar du paket som innehåller en sträng, till exempel hackware:

Tcp innehåller hackware

Följ TCP-flöde nummer X:

Tcp.stream eq X

Filtrera efter strömnummer:

Tcp.seq == x

Visa paketsändningar. Hjälper till att spåra nedgångar i applikationsprestanda och paketförlust:

Det här filtret matar ut problematiska paket (förlorade segment, omsändningar, etc. Detta filter skickar TCP Keep-Alive-paket, men de är inte en indikator på problem.

Tcp.analysis.flags

Filter för att bedöma kvaliteten på en nätverksanslutning.

Följande egenskaper gäller för TCP-ramar. Dessutom är de inte baserade på ramrubriker - egenskaperna i fråga (datautelämnande, dubbletter) tilldelas av Wireshark baserat på analys.

Filtret visar information om ramar med ACK-flaggan som är dubbletter. Ett stort antal sådana ramar kan indikera kommunikationsproblem:

Tcp.analysis.duplicate_ack_num == 1

Filter för att visa bildrutor för vilka det föregående segmentet inte är fångat:

Tcp.analysis.ack_lost_segment

Detta är normalt i början av datafångst - eftersom information inte fångas från början av sessionen.

Så här visar du ramar som återsänds (skickas upprepade gånger):

Tcp.analysis.retransmission

Utmatning av ramar som inte tas emot i rätt ordning:

Tcp.analysis.out_of_order

Så här ser du endast UDP-trafik:

Det finns inga flaggor som används för UDP. För detta protokoll kan du bara ange en port.

Visa trafik som kommer från port 53:

Udp.srcport == 53

Visa trafiken som skickas till tjänsten som lyssnar på port 53:

Udp.dstport == 53

UDP-paket som innehåller en viss sträng, till exempel hackware-strängen:

UDP innehåller hackware

För att bara se ICMP-trafik:

För att endast se ICMP v6 (sjätte versionen) trafik

Visa alla pingsvar:

Icmp.type==0

Visa alla ping-förfrågningar:

Icmp.type==8

Visa alla värdar och portar som är otillgängliga/förbjudna fel

Icmp.type==3

Visa alla försök att omdirigera routing med ICMP:

Icmp.type==8

Ett exempel på användning av CODE-värdet, följande filter visar meddelanden som inte går att nå porten:

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

Programlagerprotokolltrafik

För protokoll på applikationsnivå HTTP, DNS, SSH, FTP, SMTP, RDP, SNMP, RTSP, GQUIC, CDP, LLMNR, SSDP finns det filter som är namngivna som själva protokollen, men som är skrivna med små bokstäver.

För att till exempel se HTTP-trafik:

Så här ser du den nya HTTP/2-protokolltrafiken:

Kom ihåg att när du bestämmer vilket protokoll den överförda datan tillhör, utgår programmet från portnumret som används. Om en icke-standardport används kommer programmet inte att kunna hitta nödvändiga data. Till exempel, om du anslutit till SSH på port 1234, då filtret ssh hittar inte SSH-trafik.

Filter som endast visar data som överförts med POST-metoden:

Http.request.method == "POST"

Ett filter som endast visar data som överförts med GET-metoden:

Http.request.method == "GET"

Sök efter förfrågningar till en specifik webbplats (värd):

Http.host == " "

Sök efter frågor till en specifik webbplats efter del av namnet:

Http.host innehåller "partial.name here"

Filter för att visa HTTP-förfrågningar där cookies överfördes:

Http.cookie

Förfrågningar där servern installerade cookies i användarens webbläsare.

Http.set_cookie

Så här söker du efter överförda bilder:

Http.content_type innehåller "bild"

Så här söker du efter specifika typer av bilder:

Http.content_type innehåller "gif" http.content_type innehåller "jpeg" http.content_type innehåller "png"

Så här söker du efter filer av en viss typ:

Http.content_type innehåller "text" http.content_type innehåller "xml" http.content_type innehåller "html" http.content_type innehåller "json" http.content_type innehåller "javascript" http.content_type innehåller "x-www-form-urlencode" http. content_type innehåller "komprimerad" http.content_type innehåller "applikation"

Sök i Wireshark efter förfrågningar om att få filer av en viss typ. Till exempel, för att söka efter överförda ZIP-arkiv:

Http.request.uri innehåller "zip"

Istället för http.request.uri kan du använda filter för större noggrannhet http.request.uri.path eller http.request.uri.query, till exempel för att söka efter förfrågningar om att ladda ner JPG-filer (länkar till bilder):

Http.request.uri.path innehåller "jpg"

Du kan också filtrera förfrågningar som innehåller ett specifikt HTTP REFERER-huvudvärde. Till exempel, för att söka efter frågor där hänvisningsadressen är ru-board.com:

Http.referer innehåller "ru-board.com"

Http.auktorisering

Söka efter filer i en HTTP-ström:

Http.file_data

För att se vilken HTTP-data som tas emot med en fördröjning, använd följande konstruktion:

Http.time>1

Den kommer att visa trafik som tas emot senare än 1 sekund.

För att undersöka problem kan du analysera statusen för HTTP-svarskoder. Till exempel kommer följande filter att visa trafik som fick ett 404 Not Found-fel (sidan hittades inte):

Http.response.code==404

Nästa filter är mycket intressant. För det första visar det vilka komplexa strukturer som kan byggas från individuella filter. För det andra låter det dig undersöka HTTP-förfrågningar och webbaktivitet i allmänhet, exklusive onödig data. Med detta filter kan du se webbaktivitet hög nivå. Reglerna inom parentesen utesluter bilder, Javascript-filer och stilmallar – allt som sidan begär internt. Om sidorna du undersöker innehåller andra inbäddade objekt, exkludera dem på liknande sätt:

Http.request && !(http.request.uri innehåller ".ico" eller http.request.uri innehåller ".css" eller http.request.uri innehåller ".js" eller http.request.uri innehåller ".gif" eller http.request.uri innehåller ".jpg")

Så här ser du alla DNS-förfrågningar och svar:

Så här ser du vilka DNS-frågor som tog lång tid:

Dns.tid>1

Svar som tas emot mer än en sekund efter att begäran skickades kommer att visas.

Det här filtret visar vilka DNS-förfrågningar som inte kan lösas korrekt:

Dns.flags.rcode != 0

Visa endast DNS-frågor:

Dns.flags.response == 0

Visa endast DNS-svar:

Dns.flags.response == 1

Visa frågor och svar som letar efter IP:n för google.com:

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

Visa DNS-frågor och svar angående A-poster:

Dns.qry.type == 1

Visa DNS-frågor och svar angående AAAA-poster:

Dns.qry.type == 28

Visa svar där 216.58.196.3 skickas som IP för post A:

Dns.a == 216.58.196.3

Visa svar där 2a01:4f8:172:1d86::1 skickades som IP för AAAA-posten:

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

Visa poster med CNAME apollo.archlinux.org:

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

Visa svar längre än 30:

Dns.resp.len > 30

Visa frågor med en längd över 25:

Dns.qry.name.len >25

Visa svar från DNS-servrar där rekursion är tillgänglig:

Dns.flags.recavail == 1

Visa svar från DNS-servrar där rekursion inte är tillgänglig:

Dns.flags.recavail == 0

Är rekursion önskvärt (om den efterfrågade DNS-servern inte har värdnamnsinformation, bör den fråga andra DNS-servrar letar efter denna information):

Dns.flags.recdesired == 1

Om begäran innehåller 1 , då behövs rekursion om 0 - det betyder att det inte är önskvärt.

Om oautentiserad data ska accepteras ( 0 betyder att inte acceptera 1 betyder att acceptera):

Dns.flags.checkdisable == 0

Så här ser du hur IP-adresser tilldelas med DHCP:

Udp.dstport==67

Bootp.option.dhcp

Så här visar du DHCP-förfrågningar:

Bootp.option.dhcp == 3

Så här visar du DHCP Discover:

Bootp.option.dhcp == 1

SMB-filter. Detta filter i kolumnen Info visar hela trädet (bollen) av anslutningar, öppna kataloger och öppna filer i spåret.

Smb2.cmd==3 eller smb2.cmd==5

Filter för Wi-Fi-ramar

Visa element av fyrvägshandskakning (det vill säga EAPOL-protokollramar):

Visa beacon-ramar:

Wlan.fc.type_subtype == 0x08

Visa probesvarsramar:

Wlan.fc.type_subtype == 0x05

Visa allt på en gång: EAPOL, beacons, Probe Response:

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

Visa trådlösa ramar för en specifik enhet med MAC-adress BSSID:

Wlan.addr==BSSID

Visa EAPOL, beacons, Probe Response för en specifik enhet med MAC-adress 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

Visa alla PMKID:n:

Eapol && wlan.rsn.ie.pmkid

Visa PMKID, beacons, sondsvar:

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

Visa PMKID, beacons, Probe Response för åtkomstpunkt med MAC-adress 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

Visa bara det första meddelandet i handskakningen:

Wlan_rsna_eapol.keydes.msgnr == 1

Visa endast det andra handskakningsmeddelandet (kan användas för handskakningsmeddelande med valfritt nummer):

Wlan_rsna_eapol.keydes.msgnr == 2

Visa ramar för åtkomstpunkter med en hastighet (Datahastighet) på 1 Mb/s:

Wlan_radio.data_rate == 1

Visa ramar för åtkomstpunkter med hastigheter över 10 Mb/s:

Wlan_radio.data_rate > 10

Visa åtkomstpunkter på en specifik frekvens:

Radiotap.channel.freq == 2412

Visa åtkomstpunkter med en viss signalnivå:

Wlan_radio.signal_dbm > -50

Filter relaterade till närvaron av en antenn på enheten:

Radiotap.present.antenna == 1

Radiotap.antenna == 1

Om du känner till andra intressanta Wireshark-filter, dela dem sedan i kommentarerna.

Jag hoppas att de tidigare lektionerna gick bra. Jag kommer att fortsätta vidare. Låt oss anta att vi fångade ett gäng paket, nu måste vi hitta vissa data bland uppsättningen.

Jag påminner dig om att du kan ladda ner Wireshark

Först och främst, låt oss öppna ett exempel på trafik (eller fånga våra paket). Förresten, här är ett bibliotek med trafikexempel, du kan säkert ladda ner för studier: http://wiki.wireshark.org/SampleCaptures

Det finns för övrigt också exempel på trafik från infekterade datorer, spår av trojaner och andra olyckor. + Jag har också en samling trafikfiler, om du är intresserad lägger jag upp dem i arkivet, de väger inte mycket. Förresten, du kan själv infektera din dator med någon form av infektion ( virtuell maskin) och fånga trafik, jag tycker att det är väldigt intressant. Och om du har fångat ett virus på en riktig bil, kontakta proffsen: datorhjälp Kiev. Nåväl, låt oss gå vidare.

Så jag laddade ner ett exempel på http-trafik, det allra första i listan:

Öppna sökfönstret och se:


Så här söker man efter paket med hjälp av viss data.

Nåväl, låt oss nu prata om skönheter, nämligen raskarska.

För att öppna färgguiden, välj Visa->Färgregler från menyn

Följande fönster öppnas:


Lägg till ett nytt element med knappen NYTT:


Till exempel kommer jag nu att skapa en framhävningsregel:

DNS-protokoll Svarsnamn innehåller "google", jag skriver in det i filtret: dns.resp.name , väljer "contains" (contains) och anger värdet "google". Jag tillämpar regeln, gör en blå bakgrund och svart typsnitt.


Vår regel är markerad med en understruken linje.


Topp