Tcpdump - Linux Command - Unix Command

VARDAS

tcpdump - dump srautas tinkle

SANTRAUKA

tcpdump [ -adflnNOpqRStuvxX ] [ -c count ]

[ -C file_size ] [ -F file ]

[ -i sąsaja ] [ -m modulis ] [ -r failas ]

[ -s snaplen ] [ -T tipas ] [ -U vartotojo ] [ -w failas ]

[ -E algo: secret ] [ išraiška ]

APIBŪDINIMAS

Tcpdump išspausdina paketų antraštes tinklo sąsajoje, kurios atitinka loginę išraišką . Jis taip pat gali būti paleistas su- w vėliava, dėl kurios ji gali išsaugoti paketinių duomenų failą vėlesnei analizei ir / arba su -r žymelę , todėl ją galima perskaityti iš išsaugoto paketų failo, o ne skaityti paketus iš tinklo sąsajos. Visais atvejais tik paketus, kurie atitinka išraišką , apdoros tcpdump .

Tcpdump , jei neveikia su- c vėliava, tęsia paketų užfiksavimą tol, kol jis bus pertrauktas SIGINT signalu (generuojamas, pavyzdžiui, įvedant pertraukimo simbolį, paprastai kontrolinį C) arba SIGTERM signalą (paprastai generuojamą su žudymu (1) komanda); jei paleidžiant su- c vėliava, ji užfiksuoja paketus, kol jis bus pertrauktas SIGINT ar SIGTERM signalu arba nurodytas paketų skaičius buvo apdorotas.

Kai tcpdump užbaigiamas paketų užfiksavimas, jis praneša apie:

paketai "gaunami filtru" (tai reiškia, kad tai priklauso nuo operacinės sistemos, kurioje naudojate tcpdump , ir galbūt taip, kaip buvo konfigūruojama operacinė sistema - jei filtro buvo nurodyta komandinėje eilutėje, kai kuriose operacinėse sistemose jis skaičiuojamas paketus, nepriklausomai nuo to, ar jie buvo suderinti su filtro išraiška, ir kitose operacinėse sistemose jis skaičiuoja tik tuos paketus, kurie atitiko filtro išraišką ir buvo apdoroti tcpdump );

paketai "" sumažėjo pagal branduolį "(tai paketų, kurie buvo nutrūkę dėl buferinės erdvės stokos, paketų surinkimo mechanizmo OS, kuriame veikia tcpdump, skaičius, jei operacinė sistema praneša apie tokią informaciją programoms; jei ne, tai bus nurodyta kaip 0).

Platformose, kurios palaiko SIGINFO signalą, pvz., Daugumą BSD, jis praneša apie šiuos skaičius, kai gauna SIGINFO signalą (sugeneruotą, pavyzdžiui, įvesdami simbolį "status" ", paprastai" control-T ") ir toliau užfiksuoti paketus .

Skaitydami paketus iš tinklo sąsajos gali reikėti turėti tam tikras privilegijas:

Pagal SunOS 3.x arba 4.x su NIT arba BPF:

Turite skaityti prieigą prie / dev / nit arba / dev / bpf * .

Pagal "Solaris" su DLPI:

Turite turėti skaitymo / rašymo prieigą prie tinklo pseudo įrenginio, pvz. / Dev / le . Vis dėlto bent jau kai kuriose "Solaris" versijose tai nepakanka, kad tcpdump galėtų sugauti promiscuous režimu; tuose "Solaris" versijose turite būti root, arba tcpdump turi būti įdiegtas setuid į root, kad būtų galima užfiksuoti paeiliui. Atkreipkite dėmesį, kad daugelyje (galbūt visose) sąsajose, jei neužfiksuosite beprotišku režimu, nematysite jokių išeinančių paketų, taigi surinkimas nebus atliktas nuoseklaus režimo metu, gali būti labai nepatogus.

Pagal HP-UX su DLPI:

Turite būti root arba tcpdump turi būti įdiegtas setuid root.

Pagal IRIX su snoop:

Turite būti root arba tcpdump turi būti įdiegtas setuid root.

Pagal Linux:

Turite būti root arba tcpdump turi būti įdiegtas setuid root.

Pagal Ultrix ir Digital UNIX / Tru64 UNIX:

Bet kuris vartotojas gali užfiksuoti tinklo srautą naudodamas tcpdump . Tačiau nė vienas vartotojas (netgi net super vartotojas) negali fiksuoti sąveikaujančioje sąsajos režime, nebent super vartotojas įjungė šiam sąsajui veikiantį nesąmoningą režimą naudodamas pfconfig (8), o nė vienas vartotojas (net net super vartotojas ) gali užfiksuoti unikalų srautą, kurį mašina gauna ar išsiųs sąsajoje, nebent super vartotojas įjungė "copy-all-mode" operaciją šioje sąsajoje naudodamas pfconfig , taigi naudinga paketinio fiksavimo sąsajoje tikriausiai reikalauja, kad nebūtų besisukantis režimas arba kopija - visos sąsajos funkcija gali būti įjungta visuose režimuose arba abu režimai.

Pagal BSD:

Turite skaityti prieigą prie / dev / bpf * .

Išsaugoto paketinio failo skaitymui nereikia specialių teisių.

GALIMYBĖS

-a

Bandoma konvertuoti tinklo ir transliacijų adresus į vardus.

-c

Išeikite po skaičiaus paketų gavimo.

-C

Prieš rašydami žaliavinį paketą į išsaugojimo failą, patikrinkite, ar šiuo metu failas yra didesnis nei failo dydis, ir jei taip, uždarykite esamą išsaugojimo failą ir atidarykite naują. "Savefiles" po pirmojo išsaugojimo failo turi pavadinimą, nurodytą su- w vėliava, po jo po skaičiaus, pradedant nuo 2 ir tęsiant aukštyn. Failo dydžio vienetai yra milijonai baitų (1 000 000 baitų, o ne 1 048 576 baitų).

-d

Suderinto paketų atitikimo kodą iškelkite į skaitomąją formą į standartinę išvesties ir sustabdykite.

-dd

Dump paketų atitikimo kodas kaip C programos fragmentas.

-ddd

Pašalinti paketų atitikimo kodą dešimtainiais skaičiais (prieš tai skaičiuojant).

-e

Spausdinkite nuorodų lygio antraštę ant kiekvienos iškrovimo eilutės.

-E

Naudokite algo: paslaptis iššifruoti IPsec ESP paketus. Algoritmai gali būti des-cbc , 3des-cbc , blowfish-cbc , rc3-cbc , cast128-cbc arba nė vienas . Numatytasis yra des-cbc . Gebėjimas iššifruoti paketus yra tik tada, kai tcpdump buvo sudarytas su įjungta kriptografija. paslėpkite ESC slapto rakto ascii tekstą. Šiuo metu negalime imtis savavališkos dvejetainės vertės. Ši parinktis priima RFC2406 ESP, o ne RFC1827 ESP. Ši parinktis naudojama tik derinimo tikslams, o šio pasirinkimo naudojimas tikrai "slaptu" raktu yra atgrasomas. Pateikę IPsec slaptą raktą į komandinę eilutę, jūs padarote jį matomą kitiems per ps (1) ir kitomis progomis.

-f

Spausdinkite "užsienio" internetinius adresus skaičiais, o ne simboliškai (ši galimybė yra skirta rimtai sugadinti smegenis "Sun" serverio serveryje - paprastai jis nuolat užverčia nevietinių interneto numerių vertimą).

-F

Naudokite failą kaip įvesties filtrą. Papildoma išraiška komandinėje eilutėje ignoruojama.

-i

Klausyk sąsają . Jei nenurodyta, tcpdump ieško sistemos sąsajos sąrašo mažiausiai sunumeruotą, sukonfigūruotą sąsają (išskyrus kilpą). Kaklaraiščiai sulaužomi, pasirenkant kuo anksčiau.

"Linux" sistemose, turinčiose 2.2 arba vėlesnius branduolius, "bet kurio" sąsajos argumentas gali būti naudojamas paketams fiksuoti iš visų sąsajų. Atkreipkite dėmesį, kad fonas "bet kokiame" įrenginyje nebus atliktas nuosekliai.

-l

Padarykite stdout eilutę buferiu. Naudinga, jei norėsite matyti duomenis, kai ją užfiksuosite. Pvz.
`` tcpdump -l | tee dat '' arba `` tcpdump -l> dat & tail -f dat ''.

-m

Įkelti SMI MIB modulio apibrėžimus iš failo modulio . Ši parinktis gali būti naudojama keletą kartų, jei norite įkelti kelis MIB modulius į tcpdump .

-n

Negalima konvertuoti priimančiosios adresus į vardus. Tai gali būti naudojama siekiant išvengti DNS paieškos.

-nn

Negalima konvertuoti protokolų ir prievadų numerių ir tt prie pavadinimų.

-N

Nenaudokite kompiuterio pavadinimų domeno vardo kvalifikacijos. Pvz., Jei jūs suteikiate šią vėliavą, tada tcpdump atspausdins "` nic '', o ne `` nic.ddn.mil ''.

-O

Negalima paleisti paketų atitikimo kodo optimizavimo. Tai naudinga tik tuomet, kai įtariate optimizatoriaus klaidą.

-p

Negalima įdėti sąsajos į promiscuous režimą. Atkreipkite dėmesį, kad sąsaja gali būti nesąžiningo režimo dėl kitos priežasties; taigi `-p 'negali būti naudojamas kaip" eterio šeimininko {local-hw-addr} "ar eterio transliacijos santrumpa.

-q

Greitas (tylus?) Išėjimas. Spausdinkite mažiau protokolo informacijos, kad išvesties linijos būtų trumpesnės.

-R

Tarkime, kad ESP / AH paketai turi būti pagrįsti senomis specifikacijomis (RFC1825 - RFC1829). Jei nurodyta, tcpdump nebus spausdinamas atkūrimo prevencijos laukas. Kadangi ESP / AH specifikacijoje nėra protokolo versijos lauko, tcpdump negali išsiaiškinti ESP / AH protokolo versijos.

-r

Perskaitykite paketus iš failo (kuris buvo sukurtas su -w parinktimi). Standartinė įvestis naudojama, jei failas yra `` - ''.

-S

Spausdinkite absoliučius, o ne santykinius, TCP sekos numerius.

-s

Snarf praleidžia baitų duomenis iš kiekvieno paketo, o ne pagal nutylėjimą 68 (su SunOS NIT, mažiausias iš tikrųjų yra 96). 68 baitai yra tinkami IP, ICMP, TCP ir UDP, tačiau gali sutrumpinti protokolo informaciją iš vardų serverio ir NFS paketų (žr. Toliau). Paketai, sutrumpinti dėl ribotos fotografijos, pateikiami su `` [| proto ] '', kur proto yra protokolo lygio, kuriuo įvyko sutrumpinimas, pavadinimas. Atkreipkite dėmesį, kad didesnių vaizdų priėmimas padidina tiek laiko, kiek reikia paketų apdorojimui, ir iš tikrųjų sumažina paketų buferio kiekį. Tai gali sukelti paketų praradimą. Jūs turėtumėte apriboti snaplenį iki mažiausio skaičiaus, kuris užfiksuos jus dominančią informaciją apie protokolą. Nustatydami snapleną iki 0 reiškia naudoti reikiamą ilgį, kad sugautumėte visą paketą.

-T

Įgalioti " išraiška " pasirinktus paketus reikia aiškinti nurodytu tipu . Šiuo metu žinomi tipai yra cnfp ("Cisco NetFlow" protokolas), rpc (nuotolinis procedūrinis skambutis), rtp (realaus laiko programų protokolas), rtcp (realaus laiko programų valdymo protokolas), snmp (paprastas tinklo valdymo protokolas), vat (Visual Audio Tool ) ir wb (platinama balta valdyba).

-t

Nepaspausdinkite laiko žymos kiekvienoje iškrovimo eilutėje.

-tt

Spausdinkite neformuoto laiko žymos kiekvienoje iškrovimo eilutėje.

-U

Sulenkti root privilegijas ir pakeičia naudotojo ID naudotojo ir grupės ID pagrindinei naudotojų grupei.

Pastaba! "Red Hat Linux" automatiškai panaikina privilegijas vartotojui "` pcap '', jei nieko nenurodyta.

-ttt

Spausdinkite delta (mikro sekundėmis) tarp dabartinės ir ankstesnės eilutės kiekvienoje iškrovimo eilutėje.

-tttt

Spausdinkite laikmačio formato numatytąjį formatą, kuris tęsiasi pagal datą kiekvienoje iškelties eilutėje.

-u

Spausdinkite nedekuotus NFS rankenos.

-v

(Šiek tiek daugiau) verbose išvesties. Pavyzdžiui, atspausdinamas IP paketo gyvenimo laikas, identifikavimas, bendras ilgis ir galimybės. Taip pat leidžia atlikti papildomus paketų vientisumo patikrinimus, pvz., Patvirtinti IP ir ICMP antraštės kontrolinę sumą.

-vv

Dar daugiau verbavimo rezultatų. Pavyzdžiui, iš NFS atsakymų paketų išspausdinami papildomi laukai, o SMB paketai yra visiškai iššifruoti.

-vvv

Dar daugiau verbavimo rezultatų. Pavyzdžiui, telnet SB ... SE parinktys išspausdintos pilnai. Su -X telnet parinktys yra atspausdintos ir heksadėžėje.

-w

Parašykite neapdorotus paketus failams, o ne parsdinimams ir jų spausdinimui. Vėliau jie gali būti atspausdinti su parinktimi -r. Standartinė išvestis naudojama, jei failas yra `` - ''.

-x

Spausdinkite kiekvieną paketą (atmetus jo nuorodų lygio antraštę) į hex. Bus išspausdintas mažesnis iš viso paketo ar snaplen baitų. Atkreipkite dėmesį, kad tai yra visas nuorodų sluoksnio paketas, taigi, jei nuorodų sluoksniai, pvz., "Ethernet", (pvz., "Ethernet"), taip pat bus atspausdinti, kai aukštesnio sluoksnio paketas yra trumpesnis už reikalaujamą užpildymą.

-X

Spausdinant hex, taip pat spausdinkite ascii. Taigi, jei nustatytas ir -x , paketas spausdinamas hex / ascii. Tai labai patogu analizuoti naujus protokolus. Net jei nėra nustatytas -x , kai kurios paketų dalys gali būti atspausdintos hex / ascii.

išraiška

pasirenka, kurie paketai bus dempingo kaina. Jei nėra išraiškos , visi paketai tinkle bus išmesti. Priešingu atveju, tik paketai, kurių išraiška yra "true", bus išmesti.

Išraišką sudaro vienas ar keli primityviai. Primityviai paprastai susideda iš ID (vardo ar numerio), prieš kurį yra vienas ar keli kvalifikatoriai. Yra trys skirtingi kvalifikacijos tipai:

tipo

Kandidatai pasakoja, kokie dalykai nurodo id vardą ar numerį. Galimi tipai host , net ir port . Pvz., "Host foo", "net 128.3", "port 20". Jei nėra tipo kvalifikatoriaus, priimamasis yra prielaida.

dir

kvalifikatoriai nurodo konkrečią perdavimo kryptį ir (arba) iš id . Galimos nuorodos yra src , dst , src arba dst ir src ir dst . Pvz., "Src foo", "dst net 128.3", "src arba dst port ftp-data". Jei trūkstamas kodas, priskiriamas src arba dst . "NULL" nuorodų sluoksniuose (ty nuo taško iki taško protokolų, pvz., Slydimo) įvesties ir išeinančios kvalifikacijos gali būti naudojamos nurodant norimą kryptį.

proto

kvalifikatoriai riboja rungtynę prie tam tikro protokolo. Galimi protos yra: eteris , fddi , tr , ip , ip6 , arp , rarp , decnet , tcp ir udp . Pvz., "Eteris src foo", "arp net 128.3", "tcp port 21". Jei nėra proto kvalifikatoriaus, laikoma, kad visi protokolai atitinka tipą. Pvz., "Src foo" reiškia "(ip arba arp arba rarp) src foo" (išskyrus tai, kad ji nėra teisinė sintaksė); "neto juosta" reiškia "(ip arba arp arba rarp) neto juosta" ir "port 53" reiškia `(tcp arba udp) uostas 53 '.

[`fddi 'iš tikrųjų yra" etiero "slapyvardis; "Parametras" elgiasi su jais taip pat, kaip "duomenų perdavimo lygis, naudojamas nurodytoje tinklo sąsajoje". "FDDI antraštėse yra Ethernet tipo šaltinio ir paskirties adresų ir dažnai yra Ethernet tipo paketų tipai, todėl galite filtruoti šiose FDDI laukuose kaip ir analogiškų Ethernet laukų. FDDI antraštėse taip pat yra kitų laukų, tačiau negalima jų aiškiai įvardyti filtro išraiškoje.

Panašiai "tr" yra "etiero" slapyvardis; ankstesnio straipsnio teiginiai apie FDDI antraštes taip pat taikomi "Token Ring" antraštes.]

Be to, aukščiau yra keletas specialių "primityvių" raktinių žodžių, kurie nesilaiko modelio: vartai , transliacija , mažesnės , didesnės ir aritmetinės išraiškos. Visi jie aprašyti žemiau.

Sudėtingesni filtro išraiškos kaupiami naudojant žodžius ir ( arba) nekombinuoti primityvių. Pvz., "Host foo, o ne port ftp, o ne port ftp-data". Kad išsaugotumėte spausdinimą, tapatūs kvalifikaciniai sąrašai gali būti praleisti. Pvz., "Tcp dst port ftp" arba "ftp-data" arba "domenas" yra tas pats kaip "tcp dst port ftp arba tcp dst port ftp-data arba tcp dst port domain".

Leidžiami primityviai yra:

dst priimančiosios kompiuterio

Tiesa, jei paketo paskirties laukas IPv4 / v6 yra priimančiosios , kuris gali būti arba adresas arba vardas.

src host host

Tiesa, jei paketo "IPv4 / v6" šaltinio laukas yra priimamasis .

priimančioji šalis

Tiesa, jei paketas yra IPv4 / v6 šaltinis arba paskirties vieta. Bet kuri iš aukščiau išvardytų serverio išraiškų gali būti priskirta raktiniams žodžiams, ip , arp , rarp arba ip6, kaip nurodyta:

ip hosto host

kuris yra lygiavertis:

eter proto \ ip ir priimančiojo kompiuterio

Jei kompiuteris yra vardas su keliais IP adresais, kiekvienas adresas bus pažymėtas kaip atitikimas.

Eteris dst ehost

Tiesa, jei "Ethernet" paskirties adresas yra " ehost" . "Ehost" gali būti vardas iš / etc / eters arba skaičiaus (skaičių formos žr. Eterius (3N)).

Eteris src ehost

Tiesa, jei Ethernet šaltinio adresas yra ehost .

eteris host ehost

Tiesa, ar Ethernet šaltinis ar paskirties adresas yra ehost .

vartai priimančiosios

Tiesa, jei paketas naudojamas priimančiosios kaip vartai. T. y. "Ethernet" šaltinio arba paskirties adresas buvo priimamasis, bet ne IP šaltinis, nei IP paskirtis nebuvo priimančiosios . Priimančioji įmonė turi būti vardas ir turi būti nustatytas tiek mašinisto priimančiosios vardo-IP-adreso skiriamųjų mechanizmų (priimančiojo vardo failo, DNS, NIS ir tt), tiek kompiuterio priimančiosios vardo-et-eterneto adreso skiriamoji geba mechanizmas (/ etc / eters ir tt). (Ekvivalentinė išraiška yra

eterio priimančiosios ehost ir ne priimančioji priegloba

kuris gali būti naudojamas su vardais ar numeriais, skirtais hostui / ehost .) Ši sintaksė šiuo metu neveikia konfigūracijos su įgalinta IPv6.

dst neto tinklas

Tiesa, jei paketo IPv4 / v6 paskirties adresas turi tinklo tinklo numerį. Tinklas gali būti pavadintas iš / etc / networks arba tinklo numerio (išsamiau žr. Tinklus (4) ).

src neto tinklas

Tiesa, jei paketo IPv4 / v6 šaltinio adresas turi tinklo tinklo numerį.

grynasis grynasis

Tiesa, jei paketo IPv4 / v6 šaltinis ar paskirties adresas turi tinklo tinklo numerį.

neto neto kaukė netmask

Tiesa, jei IP adresas atitinka tinklą su konkrečiu tinklo masku . Gali būti kvalifikuotas su src ar dst . Atminkite, kad ši sintaksė negalioja IPv6 tinklui .

grynasis neto / len

Tiesa, jei IPv4 / v6 adresas atitinka neto mastelio len bitus. Gali būti kvalifikuotas su src ar dst .

dst uosto uostas

Tiesa, jei paketas yra ip / tcp, ip / udp, ip6 / tcp arba ip6 / udp ir jo paskirties prievado vertė yra uoste . Uostas gali būti numeris arba pavadinimas naudojamas / etc / services (žr. Tcp (4P) ir udp (4P)). Jei naudojamas vardas, patikrinamas tiek uosto numeris, tiek protokolas. Jei naudojamas keli ar dviprasmiški pavadinimai, patikrinamas tik uosto numeris (pvz., Dst port 513 spausdins tiek TCP / prisijungimo srautą, tiek udp / kas eismas, o uosto domenas atspausdins tiek TCP / domeną, tiek UDP / DNS srautą).

src uosto prievadas

Tiesa, jei paketas turi prievado uosto vertę.

uosto uostas

Tiesa, jei paketo šaltinio arba paskirties uostas yra prievadas . Bet kuri iš pirmiau minėtų uosto išraiškų gali būti pridedama prie raktinių žodžių, tcp ar udp , kaip nurodyta:

tcp src uosto prievadas

kuris atitinka tik tcp paketus, kurių šaltinio prievadas yra prievadas .

mažesnis ilgis

Tiesa, jei paketo ilgis yra mažesnis arba lygus ilgiui . Tai atitinka:

len <= ilgis .

didesnis ilgis

Tiesa, jei paketo ilgis yra didesnis arba lygus ilgiui . Tai atitinka:

len> = ilgis .

ip proto protokolas

Tiesa, jei paketas yra IP paketas (žr. Ip (4P)) protokolo tipo protokole . Protokolas gali būti skaičius arba vienas iš pavadinimų: icmp , icmp6 , igmp , igrp , pim , ah , esp , vrrp , udp arba tcp . Atkreipkite dėmesį, kad identifikatoriai tcp , udp ir icmp taip pat yra raktiniai žodžiai ir turi būti išbraukti per backslash (\), kuris yra \\ C-shell. Atkreipkite dėmesį, kad šis primityvus nepakeičia protokolo antraštės grandinės.

ip6 proto protokolas

Tiesa, jei paketas yra protokolo tipo protokolo IPv6 paketas. Atkreipkite dėmesį, kad šis primityvus nepakeičia protokolo antraštės grandinės.

ip6 protochain protokolas

Tiesa, jei paketas yra IPv6 paketas, protokolo antraštės grandinėje yra protokolo antraštė su tipo protokolu . Pavyzdžiui,

ip6 protochain 6

atitinka bet kokį IPv6 paketą su TCP protokolo antrašte protokolo antraštės grandinėje. Paketu gali būti, pavyzdžiui, autentifikavimo antraštė, maršruto antraštė arba "hop-by-hop" parinkčių antraštė tarp IPv6 antraštės ir TCP antraštės. Šis primityvus išleistas BPF kodas yra sudėtingas ir jo negalima optimizuoti naudojant TPPD optimizavimo kodą, taigi tai gali būti šiek tiek lėta.

ip protochain protokolas

Panašiai kaip ip6 protochain protokolas , tačiau tai yra IPv4.

eterio transliacija

Tiesa, jei paketas yra Ethernet transliacijos paketas. Eteris yra neprivalomas.

ip transliacija

Tiesa, jei paketas yra IP transliacijos paketas. Jis patikrina tiek universaliųjų, tiek visuotinių transliuotojų konvencijas ir žiūri vietinę potinklio kaukę.

eteris multicast

Tiesa, jei paketas yra "Ethernet" multicast paketas. Eteris yra neprivalomas. Tai yra " eterio [0] & 1! = 0 " santrumpa.

ip multicast

Tiesa, jei paketas yra IP multicast paketas.

ip6 multicast

Tiesa, jei paketas yra IPv6 multicast paketas.

eterio proto protokolas

Tiesa, jei paketas yra eterio tipo protokolas . Protokolas gali būti numeris arba vienas iš pavadinimų ip , ip6 , arp , rarp , atalk , aarp , decnet , sca , lat , mopdl , moprc , iso , stp , ipx arba netbeui . Atkreipkite dėmesį, kad šie identifikatoriai yra ir raktiniai žodžiai, todėl jie turi būti užblokuoti backslash (\).

[FDDI atveju (pvz., " Fddi protokolas arp ") ir Token Ring (pvz., " Tr protocol arp ") daugeliui šių protokolų protokolo identifikacija kilęs iš 802.2 Logical Link Control (LLC) antraštės, kuri paprastai yra sluoksniuotas virš FDDI arba Token Ring antraštės.

Kai filtruoja daugumą protokolo identifikatorių FDDI ar Token Ring, tcpdump patikrina tik LLC tipo antraštės "Protocol ID" lauką vadinamame SNAP formate su "0x000000" organizacinio vieneto identifikatoriumi (OUI), kuris yra integruotas Ethernet; ji netikrina, ar paketas yra SNAP formatu, o OUI yra 0x000000.

Išimtys yra iso , kuriam ji tikrina "LLC" antraštės, stp ir netbeui DSAP (paskirties paslaugos prieigos tašką) ir SSAP (šaltinio paslaugos prieigos tašką) laukus, kur ji tikrina LLC antraštės DSAP ir atalk , kur ji tikrina SNAP formato paketą su 0x080007 OUI ir "Appletalk" etatu.

Ethernet atveju tcpdump tikrina Ethernet tipo lauką daugumai šių protokolų; išimčių yra iso , sap ir netbeui , kurių atžvilgiu jis patikrina 802.3 rėmelį, o tada patikrina LLC antraštę, kaip tai daro FDDI ir Token Ring, atalk , kur ji patikrina tiek "Appletalk" etape, Ethernet rėmelį, tiek ir SNAP formato paketą, kaip tai daro FDDI ir Token Ring, aarp , kur jis patikrina "Appletalk ARP" etalą Ethernet rėmelyje arba 802.2 SNAP rėmelyje su 0x000000 OUI ir ipx , kur jis patikrina IPX etype "Ethernet" rėmas, "IPX DSAP", esančio "LLC" antraštėje, "802,3", be "LLC" antraštes "IPX" ir IPX etape SNAP rėmuose.]

Decnet src host

Tiesa, jei DECNET šaltinio adresas yra priimamasis , kuris gali būti "` 10.123 '' formos adresas arba DECNET pagrindinio kompiuterio vardas. [DECNET prieglobos vardo palaikymas galimas tik Ultrix sistemose, kurios sukonfigūruotos paleisti DECNET.]

Decnet DST host

Tiesa, jei DECNET paskirties adresas yra priimamasis .

Decnet hosto kompiuteris

Teisinga, ar DECNET šaltinio ar paskirties adresas yra priimančiosios .

ip , ip6 , arp , rarp , atalk , aarp , decnet , iso , stp , ipx , netbeui

Sutrumpinimai:

eter proto p

kur p yra vienas iš minėtų protokolų.

lat , moprc , mopdl

Sutrumpinimai:

eter proto p

kur p yra vienas iš minėtų protokolų. Atkreipkite dėmesį, kad tcpdump šiuo metu nežino, kaip ištirti šiuos protokolus.

vlan [vlan_id]

Tiesa, jei paketas yra IEEE 802.1Q VLAN paketas. Jei nurodytas [vlan_id] , tik tiesa yra paketas turi nurodytą vlan_id . Atkreipkite dėmesį, kad pirmasis " Vlan" raktinis žodis, išreikštas žodžiais, pakeičia dekodavimo kompensacijas likusiai išraiškai , darant prielaidą, kad paketas yra VLAN paketas.

tcp , udp , icmp

Sutrumpinimai:

ip proto p arba ip6 proto p

kur p yra vienas iš minėtų protokolų.

iso proto protokolas

Tiesa, jei paketas yra protokolo tipo protokolo OSI paketas. Protokolas gali būti numeris arba vienas iš pavadinimų klnp , esis arba isis .

clnp , esis , isis

Sutrumpinimai:

iso proto p

kur p yra vienas iš minėtų protokolų. Atkreipkite dėmesį, kad tcpdump atlieka nebaigtą darbą analizuojant šiuos protokolus.

expr relop expr

Tiesa, jei santykis pasitaiko , kur relopas yra vienas iš>, <,> =, <=, =,! =, Ir expr yra aritmetinė išraiška, sudaryta iš sveiki skaičių konstantų (išreikšta standartine C sintaksė), normalūs dvejetainiai operatoriai [+ , -, *, /, &, |], ilgio operatorius ir specialūs paketinių duomenų prieigos įrenginiai. Norėdami prisijungti prie duomenų paketą, naudokite šią sintaksę:

proto [ expr : dydis ]

Proto yra vienas iš eterio, fddi, tr, ppp, slip, link, ip, arp, rarp, tcp, udp, icmp arba ip6 , ir nurodo protokolo sluoksnį indekso operacijai. ( eteris, fddi, tr, ppp, slydimas ir visos nuorodos nurodo nuorodų sluoksnį.) Atkreipkite dėmesį, kad tcp, udp ir kiti viršutinio sluoksnio tipo protokolai taikomi tik IPv4, o ne IPv6 (tai bus nustatoma ateityje). Baito nuokrypis, palyginti su nurodytu protokolo sluoksniu, pateikiamas expr . Dydis yra neprivalomas ir nurodo baitų skaičių dominančioje srityje; tai gali būti viena, dvi ar keturios, o pagal nutylėjimą - viena. Ilgis operatorius, nurodytas pagal raktažodį len , suteikia paketo ilgį.

Pavyzdžiui, " eteris [0] & 1! = 0 " sugauna visą srautą daugiaadresio srauto. Sąvoka " ip [0] & 0xf! = 5 " sugriebia visus IP paketus su parinktimis. Sąvoka " ip [6: 2]" ir "0x1fff = 0 " užfiksuoja tik nesubrupuotus datagramus ir fragmentinių datagramų fragmentų nulį. Šis patikrinimas yra netiesiogiai taikomas tcp ir udp indekso operacijoms. Pavyzdžiui, tcp [0] visada reiškia pirmąjį TCP antraštės baitą ir niekada nereiškia, kad tai pirmasis baigiamojo fragmento baitas.

Kai kurios kompensacijos ir lauko vertės gali būti išreikštos kaip vardai, o ne skaitinės vertės. Galima naudoti tokius sekimo protokolų antraštės laukus: icmptype (ICMP tipo laukas), icmpcode (ICMP kodo laukas) ir tcpflags (laukas TCP vėliavos).

Yra šios ICMP tipo lauko reikšmės: icmp-echoreple , icmp-unreach , icmp -sourcequench , icmp -redirect , icmp -echo , icmp -routeradvert , icmp -routersolice , icmp-timxceed , icmp-paramprob , icmp-tstamp , icmp. -tstampreply , icmp -ireq , icmp -ireqreply , icmp-maskreq , icmp-maskreply .

Galima naudoti šias TCP vėliavų lauko reikšmes: tcp-fin , tcp-syn , tcp-rst , tcp-push , tcp-push , tcp-ack , tcp-urg .

Primityviai gali būti derinami naudojant:

Įterptinė primityvų ir operatorių grupė (skliaustuose "Shell" yra ypatinga ir turi būti ištrinta).

Neigimas (" ! " Arba " ne ").

Concatenation (` && 'arba` and ').

Kintamoji frazė (` || 'arba` or ').

Neigimas yra aukščiausias prioritetas. Pakaitinimas ir sujungimas turi vienodą pirmenybę ir yra susijęs iš kairės į dešinę. Atkreipkite dėmesį, kad jungtybei dabar reikia aiškių ir žetonų, o ne sulyginimo.

Jei identifikatorius pateikiamas be raktinio žodžio, daroma prielaida, kad yra naujausias raktinis žodis. Pavyzdžiui,

ne priimančiosios vs ir ace

yra trumpas

ne priimančiosios ir priimančiosios ace

kuris neturėtų būti painiojamas su

ne (priimančiosios vs ar ace)

Expression argumentai gali būti perduodami tcpdump kaip vienintelis argumentas arba kaip daugybė argumentų, priklausomai nuo to, kuris yra patogesnis. Paprastai, jei išraiška yra "Shell" metafores, ją lengviau perduoti kaip vieną cituojamą argumentą. Prieš analizuojant, daugybė argumentų yra susieti su tarpus.

PAVYZDŽIAI

Norėdami spausdinti visus paketus, atvykstančius arba išvykstančius iš saulės :

tcpdump host sundown

Norėdami spausdinti srautą tarp helios ir karšto arba ace :

tcpdump serverio helios ir \ (karštas arba ace \)

Spausdinti visus IP paketus tarp ace ir bet kurio kompiuterio, išskyrus helios :

tcpdump ip host ace, o ne helios

Norėdami spausdinti visą eismo tarp vietinių kompiuterių ir kompiuterių Berkeley:

tcpdump neto ucb-eteris

Spausdinti visą ftp srautą per interneto vartai: (atkreipkite dėmesį į tai, kad išraiškos yra koduojamos , kad būtų išvengta apvalkalo (klaidingai) interpretuojant skliaustus):

tcpdump "vartai ir (port ftp arba ftp-data)"

Norėdami spausdinti srautą, gautą ne iš vietinių kompiuterių (jei jūs prisijungiate prie kito tinklo, ši medžiaga niekada neturėtų būti jūsų vietiniame tinkle).

Tcpdump ip ir ne tinklo vietinis tinklas

Norėdami spausdinti kiekvieno TCP pokalbio pradžios ir pabaigos paketus (SYN ir FIN paketus), kuris apima ne vietinį kompiuterį.

tcpdump 'tcp [tcpflags] & (tcp-syn | tcp-fin)! = 0, o ne src ir dst neto vietinis tinklas '

Norėdami spausdinti IP paketus, ilgesnius nei 576 baitus, išsiųstus per vartai:

Tcpdump "šliuzai snup ir ip [2: 2]> 576 '

Norėdami spausdinti transliavimo IP arba daugiaadresius paketus, kurie nebuvo išsiųsti per Ethernet transliaciją arba daugiaformatį ryšį:

tcpdump eteris [0] & 1 = 0 ir ip [16]> = 224 '

Norėdami spausdinti visus ICMP paketus, kurie nėra echo užklausos / atsakymai (ty ne ping paketai):

tcpdump "icmp [icmptype]! = icmp-echo ir icmp [icmptype]! = icmp-echoreply"

IŠVESTIES FORMATAS

Tcpdump išvestis priklauso nuo protokolo. Toliau pateikiamas trumpas daugelio formatų aprašymas ir pavyzdžiai.

Link lygio antraštės

Jei nurodyta "-e" parinktis, atspausdinama nuorodų lygio antraštė. Eternetuose atspausdinami šaltinio ir paskirties adresai, protokolas ir paketų ilgis.

FDDI tinkluose "-e" parinktis leidžia tcpdump spausdinti lauką "frame control", šaltinio ir paskirties adresus bei paketo ilgį. ("Frame control" laukas apibrėžia likusio paketo interpretaciją. Normalūs paketai (pvz., Turintys IP datagramus) yra "async" paketai, kurių prioritetinė reikšmė yra nuo 0 iki 7, pvz., " Async4 ". Manoma, kad paketuose yra "Logical Link Control" (LLC) paketo 802.2; antraštė "LLC" yra atspausdinta, jei ji nėra ISO datagrama arba vadinamasis SNAP paketas.

Token Ring tinkluose parinktis "-e" leidžia tcpdump spausdinti "prieigos kontrolės" ir "raymo kontrolės" laukus, šaltinio ir paskirties adresus bei paketo ilgį. Kalbant apie FDDI tinklus, laikoma, kad paketai turi "LLC" paketą. Nepriklausomai nuo to, ar "-e" parinktis yra nurodyta ar ne, šaltinio maršruto informacija yra atspausdinta šaltinio nukreiptiems paketams.

(NB: toks aprašymas reiškia, kad susipažįstamas su SLIP suspaudimo algoritmu, aprašytu RFC-1144.)

Ant SLIP nuorodų atspausdinamas krypties indikatorius ("I", skirtas įeinančiam, "O" išvažiuotai), paketo tipas ir suspaudimo informacija. Pirmiausia išspausdinamas paketo tipas. Trys tipai yra ip , utcp ir ctcp . Nėra jokių papildomų nuorodų informacijos, skirtos IP paketams. TCP paketams ryšio tipas yra atspausdintas pagal tipą. Jei paketas suspaustas, atspausdinamas jo užkoduotas antraštė. Specialūs atvejai išspausdinami kaip * S + n ir * SA + n , kur n yra suma, kuria pasikeitė sekos numeris (arba eilės numeris ir ack). Jei tai nėra ypatingas atvejis, spausdinami nulis ar daugiau pakeitimų. Pakeitimą nurodo U (skubus žymeklis), W (langas), A (ack), S (eilės numeris) ir I (paketo ID), po kurio seka delta (+ n arba -n) arba nauja vertė (= n). Galiausiai spausdinama duomenų paketo ir suspausto antraštės ilgio suma.

Pavyzdžiui, ši eilutė rodo išsiunčiamą suspaustą TCP paketą su netiesioginiu ryšio identifikatoriumi; ACK pakeitė 6, eilės numeris buvo 49, o paketo ID - 6; yra 3 baitai duomenų ir 6 baitai suspaustos antraštės:

O ctcp * A + 6 S + 49 I + 6 3 (6)

ARP / RARP paketai

Arp / rarp išvestis rodo prašymo tipą ir jo argumentus. Formatas yra savaime suprantamas. Čia pateikiamas trumpas pavyzdys, paimtas nuo "rlogin" pradžios iš priimančiosios rtsg į pagrindinį csam :

arp kas-csam pasakyti rtsg arp atsakymas csam-at CSAM

Pirmojoje eilutėje sakoma, kad rtsg atsiuntė ARP paketą, prašydamas "Ethernet" interneto prieglobos csam adreso. "Csam" atsako naudodamas "Ethernet" adresą (šiame pavyzdyje Ethernet adresai yra apačioje ir interneto adresai mažosiomis raidėmis).

Tai atrodytų mažiau nereikalinga, jei mes atliktume tcpdump -n :

arp who-has 128.3.254.6 say 128.3.254.68 arp reply 128.3.254.6 is at 02: 07: 01: 00: 01: c4

Jei mes atliksime tcpdump-e , būtų matomas tas faktas, kad pirmoji paketas transliuojamas, o antrasis taškas - taškas.

RTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is at CSAM

Pirmajam paketui tai sako, kad "Ethernet" šaltinio adresas yra RTSG, paskirties vieta yra Ethernet transliavimo adresas, tipo lauke yra hex 0806 (tipas ETHER_ARP) ir bendras ilgis buvo 64 baitai.

TCP paketai

(NB: toks aprašymas reiškia, kad reikia susipažinti su TCP protokolu, aprašytu RFC-793. Jei nesate susipažinę su protokolu, nei šis aprašymas, nei tcpdump jums nereikės.)

Bendras TCP protokolo linijos formatas yra:

src> dst: flags data-seqno ack lango skubios parinktys

Src ir dst yra šaltinio ir paskirties IP adresai ir uostai. Vėliavos yra kai kurie iš S (SYN), F (FIN), P (PUSH) arba R (RST) arba vienos "." Kombinacijos. (be vėliavos). "Data-seqno" apibūdina sekos erdvės dalį, kurią apima šios pakuotės duomenys (žr. Žemiau pateiktą pavyzdį). Ack yra kitų duomenų eilės numeris, kurio tikimasi kitoje šio ryšio srityje. Langas yra priimamų buferinių erdvių baitų skaičius, kuris yra kitoje šio ryšio srityje. Urg rodo, kad paketuose yra "skubių" duomenų. Funkcijos yra tcp parinktys, pridedamos kampo skliausteliuose (pvz., ).

Visada yra src, dst ir vėliavos . Kiti laukai priklauso nuo paketo tcp protokolo antraštės turinio ir išleidžiami tik jei reikia.

Čia yra atidarymo rlogin dalis iš priimančiosios rtsg į priimančiosios csam .

rtsg.1023> csam.login: S 768512: 768512 (0) win 4096 csam.login> rtsg.1023: S 947648: 947648 (0) ack 768513 win 4096 rtsg.1023> csam. Prisijungti: . ack 1 win 4096 rtsg.1023> csam.login: P 1: 2 (1) ack 1 win 4096 csam.login> rtsg.1023:. ack 2 win 4096 rtsg.1023> csam.login: P 2:21 (19) ack 1 win 4096 csam.login> rtsg.1023: P 1: 2 (1) ack 21 win 4077 csam.login> rtsg.1023: P 2: 3 (1) ack 21 win 4077 urg 1 csam.login> rtsg.1023: p 3: 4 (1) ack 21 win 4077 urg 1

Pirmojoje eilutėje sakoma, kad TCP prievadas 1023 rtsg siunčia paketą prie prisijungimo prie csam prisijungimo . S rodo, kad nustatyta SYN vėliava. Paketo sekos numeris buvo 768512 ir jame nebuvo duomenų. (Paaiškinimas yra "pirmas: paskutinis (nbytes)", kuris reiškia "eilės numerius pirmiausia iki, bet neįskaičiuojant paskutinio, kuris yra nabytes baitų naudotojo duomenų"). Nebuvo jokios kiaulytės palaikomos ack, turimas gauti langas buvo 4096 baitų ir buvo max segmento dydžio parinktis, reikalaujanti 1024 baitų mss.

"Csam" atsako su panašiu paketu, išskyrus tai, kad jame yra rzg "SYN" kiaulytė. Rtsg tada acks csam SYN. "." reiškia, kad nėra nustatytos vėliavos. Pakuotėje nėra duomenų, todėl nėra duomenų sekos numerio. Atkreipkite dėmesį, kad ACK eilės numeris yra mažas sveikasis skaičius (1). Pirmą kartą, kai tcpdump mato TCP "pokalbį", iš paketo spausdinamas serijos numeris. Vėlesniuose pokalbio paketuose atspausdinamas skirtumas tarp dabartinio paketo sekos numerio ir šio pirminio sekos numerio. Tai reiškia, kad eilės numeriai po pirmojo gali būti interpretuojami kaip santykinės baitų pozicijos pokalbio duomenų sraute (su pirmu duomenų baitu kiekviena kryptimi yra "1"). "-S" pakeis šią funkciją, todėl pradiniai sekos numeriai bus išvedami.

6 eilutėje rtsg siunčia csam 19 baitų duomenų (nuo 2 iki 20 baitų pokalbio rtsg -> csam pusėje). PUSH vėliava nustatoma paketu. Septintoje eilutėje csam sako, kad rtsg gaunami duomenys yra siunčiami į bet kurią, išskyrus 21 baitą. Dauguma šių duomenų tikriausiai sėdi į lizdo buferį, nes csam gavimo langas yra 19 baitų mažesnis. Csam taip pat siunčia vieną duomenų baitą į šį paketą rtsg. 8 ir 9 eilutėse csam siunčia du baitus skubių, išspaustų duomenų į rtsg.

Jei fotografija buvo pakankamai maža, kad tcpdump nepavyko užfiksuoti viso TCP antraštės, jis interpretuoja kuo daugiau antraštės, o tada ataskaitas "` [| tcp ] '', norint nurodyti likusią dalį, negalima interpretuoti. Jei antraštėje yra klaidingos parinkties (viena, kurios ilgis yra per mažas arba virš galerijos pabaigos), tcpdump praneša apie tai kaip "[ blogą pasirinkimą ]" ir neaiškina jokių kitų variantų (nes neįmanoma pasakyti kur jie prasideda). Jei antraštės ilgis nurodo pasirinktis, bet IP datagramos ilgis nėra pakankamai ilgas, kad galimybės iš tikrųjų būtų ten, tcpdump praneša apie tai kaip `` [ bad hdr length ] ''.

TCP paketų su tam tikrais vėliavų deriniais užfiksavimas (SYN-ACK, URG-ACK ir tt).

TCP antraštės kontrolės bitų skyriuje yra 8 bitai:

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN

Tarkime, kad mes norime žiūrėti paketus, naudojamus nustatant TCP ryšį. Prisiminkite, kad TCP naudoja 3 būdų rankos tvirtinimo protokolą, kai jis inicijuoja naują ryšį; TCP valdymo bitų ryšio seka yra

1) Skambintojas siunčia SYN

2) gavėjas reaguoja su SYN, ACK

3) Skambintojas siunčia ACK

Dabar mes norime užfiksuoti paketus, kurie turi tik SYN bitų nustatymą (1 žingsnis). Atkreipkite dėmesį, kad mes nenorime paketų iš 2 žingsnio (SYN-ACK), tik paprasto pradinio SYN. Turime tcpdump teisingą filtro išraišką.

Prisiminkite TCP antraštės struktūrą be parinkčių:

0 15 31 ---------------------------------------------- ------------------ | šaltinio uostas | paskirties uostas | -------------------------------------------------- --------------- | eilės numeris | -------------------------------------------------- --------------- | patvirtinimo numeris | -------------------------------------------------- --------------- | HL | rsvd | C | E | U | A | P | R | S | F | lango dydis | -------------------------------------------------- --------------- | TCP kontrolinė suma | skubus žymeklis | -------------------------------------------------- --------------

TCP antraštėje paprastai yra 20 oktetų duomenų, nebent yra parinkčių. Pirmoje diagramos eilutėje yra oktetai 0-3, antra eilutė rodo oktetus 4-7 ir tt

Pradedant skaičiuoti su 0, atitinkami TCP valdymo bitai yra oktete 13:

0 7 | 15 | 23 | 31 ---------------- | --------------- | --------------- | ---------------- | HL | rsvd | C | E | U | A | P | R | S | F | lango dydis | ---------------- | --------------- | --------------- | - --------------- | | 13 oktetas | | |

Leiskite atidžiau pažvelgti į oktetą Nr. 13:

| | | --------------- | | C | E | U | A | P | R | S | F | | --------------- | | 7 5 3 0 |

Tai yra TCP valdymo bitai, į kuriuos domina. Šio okteto numeriai buvo skaitomi nuo 0 iki 7 iš dešinės į kairę, todėl bitas PSH yra bitų skaičius 3, o URG bitas yra numeris 5.

Prisiminkite, kad norime užfiksuoti paketus tik SYN rinkiniu. Pažiūrėkime, kas nutinka oktetui 13, jei TCP datagrama atvyksta su jo antraštėje nustatyta SYN bitu:

| C | E | U | A | P | R | S | F | | --------------- | | 0 0 0 0 0 0 1 0 | | --------------- | | 7 6 5 4 3 2 1 0 |

Žiūrint į kontrolinių bitų sekciją matome, kad yra nustatytas tik bitų numeris 1 (SYN).

Darant prielaidą, kad 13 oktetas yra 8 bitų nepasirašytas sveikasis skaičius tinklo baitų tvarka, dvejetainė šio okteto vertė yra

00000010

ir jo dešimtainis atstovavimas yra

7 6 5 4 3 2 1 0 0 * 2 + 0 * 2 + 0 * 2 + 0 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 0 * 2 = 2

Mes beveik baigta, nes dabar mes žinome, kad jei nustatytas tik SYN, TCP antraštės 13-os okteto vertė, aiškinama kaip 8 bitų nepasirašytas sveikasis skaičius tinklo baitų tvarka, turi būti lygiai 2.

Šis santykis gali būti išreikštas kaip

tcp [13] == 2

Šią išraišką galime naudoti kaip tcpdump filtrą, kad galėtume žiūrėti paketus, turinčius tik SYN rinkinį:

tcpdump-i xl0 tcp [13] == 2

Sąvoka sako: "tegul TCP datagrams 13-oktę oktetą turi dešimtainė reikšmė 2", tai yra būtent tai, ko mes norime.

Dabar prielkime, kad mes turime užfiksuoti SYN paketus, bet mes nesvarbu, ar ACK ar bet koks kitas TCP valdymo mazgas nustatomas tuo pačiu metu. Pažiūrėkime, kas nutinka oktetui 13, kai pasirodo TCP datagrama su SYN-ACK rinkiniu:

| C | E | U | A | P | R | S | F | | --------------- | | 0 0 0 1 0 0 1 0 | | --------------- | | 7 6 5 4 3 2 1 0 |

Dabar 1 ir 4 bitai yra nustatyti 13 oktete. Dvejetainė 13 okteto vertė yra


00010010

kuris verčiamas į dešimtainį skaičių

7 6 5 4 3 2 1 0 0 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 0 * 2 + 0 * 2 + 1 * 2 + 0 * 2 = 18

Dabar tcpdump filtro išraiška negali naudoti "tcp [13] == 18", nes tai turėtų pasirinkti tik tuos paketus, kurie turi SYN-ACK rinkinį, bet ne tas, kurių rinkinys yra tik SYN. Atminkite, kad mes nesvarbu, ar nustatytas ACK ar bet koks kitas kontrolinis bitas, kol nustatytas SYN.

Norint pasiekti savo tikslą, turime logiškai IR dvejetainę 13 okteto vertę su kita verte, kad išsaugotume SYN bitą. Mes žinome, kad norime, kad SYN būtų nustatytas bet kokiu atveju, todėl logiškai IR vertės 13 oktete su dvejetainiu SYN reikšme:

00010010 SYN-ACK 00000010 SYN ir 00000010 (norime SYN) ir 00000010 (mes norime SYN) -------- -------- = 00000010 = 00000010

Matome, kad šis "AND" veiksmas duoda tą patį rezultatą, nepriklausomai nuo to, ar nustatytas ACK ar kitas TCP valdymo mazgas. Šios operacijos AND reikšmės dešimtainis formatas ir šios operacijos rezultatas yra 2 (dvejetainis 00000010), todėl mes žinome, kad paketams su SYN nustatytu turi būti toks santykis:

((13 okteto vertė IR (2)) == (2)

Tai nurodo mus į tcpdump filtro išraišką

tcpdump -i xl0 'tcp [13] & 2 == 2'

Atkreipkite dėmesį į tai, kad išraiškoje paslėpti specialųjį AND ('&') specialųjį požymį iš apvalkalo turėtų būti naudojamos vienos kabutės arba užpakalinės juostos brūkšnys.

UDP paketai

UDP formatas iliustruoja šį rwho paketą:

actinide.who> broadcast.who: udp 84

Tai sako, kad uostas, kuris priimančioje aktyviniuose įrenginiuose siunčia udp datagramą, kad įjungtų prieglobos transliaciją , interneto transliacijos adresą. Pakuotėje buvo 84 baitai naudotojo duomenų.

Kai kurios UDP paslaugos yra atpažįstamos (iš šaltinio arba paskirties prievado numerio) ir išspausdinta aukštesnio lygio protokolo informacija. Pirmiausia DNS užklausos (RFC-1034/1035) ir Sun RPC skambučiai (RFC-1050) siunčiami į NFS.

UDP vardų serverio užklausos

(NB: šis aprašymas reiškia, kad reikia susipažinti su domeno paslaugų protokolu, aprašytu RFC-1035. Jei nesate susipažinę su protokolu, toks aprašymas bus parašytas graikų kalba.)

Vardas serverio užklausos yra suformatuotos kaip

src> dst: id op? vėliavos qtype qclass pavadinimas (len) h2opolo.1538> helios.domainas: 3+ A? ucbvax.berkeley.edu. (37)

Priimančioji h2opolo paprašė domeno serverio helios adresų įrašui (qtype = A), susietam su vardu ucbvax.berkeley.edu. Užklausos ID buvo "3". "+" Rodo, kad buvo nustatyta rekordija, kurios vėliava buvo nustatyta. Užklausos ilgis buvo 37 baitai, neįskaitant UDP ir IP protokolo antraščių. Užklausos operacija buvo įprasta, Query , taigi opas laukas buvo praleistas. Jei op buvo kažkas kito, jis būtų atspausdintas tarp "3" ir "+". Panašiai qclass buvo normalus, C_IN ir praleistas. Bet koks kitas qclass būtų atspausdintas iš karto po "A".

Patikrinama keletas anomalijų ir laukuose gali būti papildomi laukeliai: jei užklausoje yra atsakymo, įrašas autorių įrašų arba papildomų įrašų, ancount , nscount ar arcount spausdinami kaip "[ n a]", "[ n n ] "arba" [ n au] ", kur n yra tinkamas skaičius. Jei yra nustatytas koks nors iš atsakymo bitų (AA, RA arba rcode) arba bet kuris iš "turi būti nulis" bitų yra dviejų ir trijų baitų, spausdinamas "[b2 & 3 = x ]", kur x yra hex vertė Antra ir baitų antraštės.

UDP vardų serverio atsakymai

Vardas serverio atsakymai yra formatuoti kaip

src> dst: id op rcode flags a / n / au tipo klasės duomenys (len) helios.domain> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain> h2opolo.1537: 2 NXDomain * 0/1/0 (97)

Pirmajame pavyzdyje helios atsako į užklausos ID 3 iš h2opolo su 3 atsakymų įrašais, 3 vardų serverio įrašais ir 7 papildomais įrašais. Pirmas atsakymo įrašas yra A tipas (adresas), jo duomenys yra interneto adresas 128.32.137.3. Bendras atsakymo dydis buvo 273 baitai, išskyrus UDP ir IP antraštes. Op (užklausa) ir atsakymo kodas (NoError) buvo praleisti, kaip buvo ir įrašo A klasės (C_IN).

Antrame pavyzdyje helios atsako į užklausą 2 su neegzistuojančio domeno (NXDomain) atsakymo kodu be atsakymų, vieno vardų serverio ir jokios institucijos įrašų. "*" Rodo, kad nustatytas autoritetingo atsakymo skirsnis. Kadangi nebuvo atsakymų, nebuvo išspausdintas joks tipas, klasė ar duomenys.

Kiti vėliavų simboliai, kurie gali būti rodomi, yra `- '(rekursija prieinama, RA nenustatyta) ir` |' (sutrumpintas pranešimas, TC, rinkinys). Jei skyriuje "klausimas" nėra tiksliai vieno įrašo, spausdinamas "[ n q]".

Atkreipkite dėmesį, kad vardų serverio užklausos ir atsakymai paprastai yra dideli, o numatytasis 68 baitų lange gali nepavykti spausdinti paketo. Jei norite rimtai ištirti vardų serverio srautą, naudokite žymą " -s" . " -s 128 " gerai dirbo man.

SMB / CIFS dekodavimas

Tcpdump dabar apima gana plačią SMB / CIFS / NBT dekodavimo duomenis UDP / 137, UDP / 138 ir TCP / 139. Taip pat atliekamas pirminis IPX ir NetBEUI SMB duomenų dekodavimas.

Pagal numatytuosius nustatymus atliekamas gana minimalus dekodavimas, atlikus daug išsamesnį kodavimą, jei naudojamas -v. Būkite įspėti, kad su vienu SMB paketu gali užtrukti iki puslapio ar daugiau, taigi naudokite tik -v, jei tikrai norite, kad visi išsamūs duomenys.

Jei dekoduojatės SMB sesijos, kuriose yra unikodo eilučių, galbūt norėsite nustatyti aplinkos kintamąjį USE_UNICODE į 1. Gali būti sveikintinas pataisas, skirtas automatiškai aptikti unicode srings.

Norėdami gauti informacijos apie SMB paketų formatus ir ką reiškia visi laukai, žr. Www.cifs.org arba pub / samba / specs / katalogą savo mėgstamoje samba.org veidrodinėje svetainėje. SMB pleistrus parašė Andrew Tridgell (tridge@samba.org).

NFS užklausos ir atsakymai

Sun NFS (tinklo failų sistema) užklausos ir atsakymai atspausdinami taip:

src.xid> dst.nfs: len op args src.nfs> dst.xid: atsakyti stat len ​​op results sushi.6709> wrl.nfs: 112 readlink fh 21,24 / 10.73165 wrl.nfs> sushi.6709: atsakyk ok 40 readlink "../var" sushi.201b> wrl.nfs: 144 lookup fh 9,74 / 4096,6878 "xcolors" wrl.nfs> sushi.201b: atsakymas ok 128 lookup fh 9,74 / 4134,3150

Pirmoje eilutėje priimančioji " sushi" siunčia sandorį su id 6709 į wrl (atkreipkite dėmesį, kad numeris, einantis po src host, yra sandorio ID, o ne šaltinio prievadas). Prašymas buvo 112 baitų, išskyrus UDP ir IP antraštes. Operacija buvo readlink (skaityti simbolinę nuorodą) failų rankenoje ( fh ) 21,24 / 10.731657119. (Jei pasisekė, kaip šiuo atveju, failų rankena gali būti interpretuojama kaip pagrindinė, smulkaus įrenginio numerio pora, po kurios nurodomas inodo numeris ir generavimo numeris.) Wrl atsako "gerai" su nuorodos turiniu.

Trečioje eilutėje sushi klausia wrl ieškoti vardo " xcolors " kataloge 9,74 / 4096,6878. Atminkite, kad spausdinti duomenys priklauso nuo operacijos tipo. Formatas yra savaime suprantamas, jei jis skaitomas kartu su NFS protokolo specifikacija.

Jei pateikiama -v (verbose) vėliava, atspausdinama papildoma informacija. Pavyzdžiui:

sushi.1372a> wrl.nfs: 148 skaityti fh 21,11 / 12,195 8192 baitų @ 24576 wrl.nfs> sushi.1372a: atsakyti ok 1472 skaityti REG 100664 id 417/0 sz 29388

(-v taip pat atspausdina IP pavyzdžio TTL, ID, ilgio ir fragmentacijos laukus, kurie šiame pavyzdyje buvo praleisti). Pirmoje eilutėje suši prašo wrl skaityti 8192 baitus iš failo 21,11 / 12,195 baitų išlyginimo 24576. Wrl atsako "ok"; antroje eilutėje nurodytas paketas yra pirmasis atsakymo fragmentas, taigi jis yra tik 1472 baitai (kitų baitų bus seka vėlesniuose fragmentuose, tačiau šiuose fragmentuose nėra NFS ar net UDP antraščių, todėl jų negalima atspausdinti, priklausomai nuo naudojamos filtro išraiškos). Atsižvelgiant į tai, kad pateikiama "-v" vėliava, spausdinami kai kurie failų atributai (kurie grąžinami be duomenų failų): failo tipas ("REG", skirtas įprastam failui), failo režimas (iš octal), uid ir gid bei failo dydis.

Jei -v vėliava pateikiama daugiau nei vieną kartą, išspausdinama dar daugiau informacijos.

Atkreipkite dėmesį, kad NFS užklausos yra labai didelės, o išsami informacija nebus išspausdinta, jei nebus padidinta snaplen . Pabandykite naudoti " -s 192 " norėdami žiūrėti NFS srautą.

NFS atsakymo paketuose aiškiai nenustatyta RPC operacija. Vietoj to tcpdump seka "neseniai" užklausas ir juos suderina su atsakymais naudodami sandorio ID. Jei atsakymas neatitinka atitinkamo prašymo, jis gali būti neskaidomas.

AFS prašymai ir atsakymai

Transarc AFS (Andrew File System) prašymai ir atsakymai spausdinami kaip:

src.sport> dst.dport: rx paketinio tipo src.sport> dst.dport: rx paketinio tipo paslaugos skambučio vardas args src.sport> dst.dport: rx paketinio tipo paslaugos atsakymo skambučio pavadinimas args elvis. 7001> pike.afsfs: rx data fs call rename old fid 536876964/1/1 ".newsrc.new" new fid 536876964/1/1 ".newsrc" pike.afsfs> elvis.7001: rx data fs atsakymas pervadintas

Pirmoje eilutėje priimančioji elvis siunčia RX paketą į lydeką. Tai buvo RX duomenų paketas fs (failų serverio) paslaugai ir yra RPC skambučio pradžia. RPC skambutis buvo pervardijimas su senojo katalogo failo identifikatoriumi 536876964/1/1 ir senais ".newsrc.new" failų pavadinimais bei naujo katalogo failo ID 536876964/1/1 ir nauju failo vardu ". newsrc ". Priimančioji plekė reaguoja su RPC atsakymu į pervardijimo skambutį (kuris buvo sėkmingas, nes tai buvo duomenų paketas, o ne nutrauktas paketas).

Paprastai visi AFS RPC yra dekoduojami bent RPC skambučio pavadinimu. Dauguma AFS RPC turi bent kai kuriuos iššifruoti argumentus (dažniausiai tik "įdomūs" argumentai, kai kurie įdomūs apibrėžimai).

Forma turi savęs apibūdinti, tačiau ji tikriausiai nebus naudinga žmonėms, kurie nėra susipažinę su AFS ir RX veikimu.

Jei -v (verbose) vėliava duodama, atspausdinami patvirtinimo paketai ir papildoma antraštės informacija, pvz., RX skambučio ID, skambučio numeris, sekos numeris, serijos numeris ir RX paketų vėliavos.

Jei -v ženklas duodamas du kartus, spausdinama papildoma informacija, pvz., RX skambučio ID, serijos numeris ir RX paketų vėliavos. MTU derybų informacija taip pat atspausdinama iš RX ack paketų.

Jei -v vėliava yra duodama tris kartus, atspausdinamas saugos indeksas ir paslaugos ID.

Klaidų kodai išspausdinami, norint nutraukti paketus, išskyrus "Ubik" švyturių paketus (nes abortų paketai naudojami "yes" balsavimui dėl Ubik protokolo).

Atkreipkite dėmesį, kad AFS užklausos yra labai didelės, ir daugelis argumentų nebus atspausdinti, jei nebus padidintas snaplen . Pabandykite naudoti " -s 256 ", kad žiūrėtumėte AFS srautą.

AFS atsakymo paketai aiškiai neapibrėžia RPC operacijos. Vietoj to tcpdump seka "neseniai" užklausas ir juos suderina su atsakymais, naudojančiais skambučio numerį ir paslaugos ID. Jei atsakymas neatitinka atitinkamo prašymo, jis gali būti neskaidomas.

KIP Appletalk (DDP per UDP)

"Appletalk" DDP paketai, įkeliami UDP datagrams, yra dekaboluojami ir nukreipiami kaip DDP paketai (ty visa informacija apie UDP antraštę atmetama). Failas /etc/atalk.names naudojamas appletalk tinklo ir mazgų numerių vertimams į pavadinimus. Šios bylos eilutės turi formą

numerio pavadinimas 1.254 eteris 16.1 icsd-net 1.254.110 ace

Pirmosios dvi eilutės pateikia appletalk tinklų pavadinimus. Trečioje eilutėje pateikiamas konkretaus kompiuterio vardas (priimamasis nuo tinklo skaičiuojamas nuo 3 okteto numerio - grynasis skaičius turi būti du oktetai, o prieglobos numeris turi būti trys oktetai.) Numeris ir pavadinimas turi būti atskirti pagal tarpą (blankus ar skirtukus). Failas /etc/atalk.names gali būti tuščių eilučių arba komentarų eilučių (eilučių, prasidedančių simboliu "#").

Appletalk adresai išspausdinami tokia forma:

net.host.port 144.1.209.2> icsd-net.112.220 office.2> icsd-net.112.220 jssmag.149.235> icsd-net.2

(Jei /etc/atalk.names neegzistuoja arba jame nėra kai kurių appletalk tinklo / neto numerio įrašų, adresai išspausdinami skaitmenine forma.) Pirmajame pavyzdyje, NBP (DDP 2 prievadas) neto 144.1 mazgas 209 siunčia viską, kas klausosi neto icsd mazgo 112 prievado 220. Antroji eilutė yra ta pati, išskyrus žinomą šaltinio mazgo pavadinimą ("office"). Trečioji eilutė yra siuntimas iš uosto 235 neto jssmag mazge 149 transliuoti į icsd-net NBP prievadą (atkreipkite dėmesį, kad transliacijos adresas (255) yra nurodytas neto pavadinimu be pagrindinio kompiuterio numerio - dėl to tai yra gera idėja kad /etc/atalk.names būtų atskirti mazgų pavadinimai ir neto pavadinimai).

NBP (pavadinimo privalomasis protokolas) ir ATP ("Appletalk transakcijų protokolo") paketai turi aiškinti jų turinį. Kiti protokolai tiesiog išskleidžia protokolo pavadinimą (arba numerį, jei joks vardas nėra užregistruotas protokole) ir paketo dydį.

NBP paketai yra suformatuojami kaip šie pavyzdžiai:

icsd-net.112.220> jssmag.2: nbp-lkup 190: "=: LaserWriter @ *" jssmag.209.2> icsd-net.112.220: nbp-atsakymas 190: "RM1140: LaserWriter @ *" 250 techpit.2> icsd -net.112.220: nbp-reply 190: "techpit: LaserWriter @ *" 186

Pirmoji eilutė yra vardų paieškos užklausa lazeriu rašytojams, siunčiamiems net icsd kompiuteriu 112 ir transliuojama net jssmag. "Nbp id" paieškai yra 190. Antroji eilutė rodo šio prašymo atsakymą (atkreipkite dėmesį į tai, kad jis turi tą patį ID) iš priimančiojo jssmag.209, sakydamas, kad jis turi lazerinių krautuvo išteklių pavadinimą "RM1140", užregistruotus 250 uoste. Trečias linija yra dar vienas atsakymas į tą pačią užklausą, sakydamas, kad "techpit host" turi "laser-writer" "techpit", registruotą 186-ajame uoste.

ATP paketų formatavimas parodomas tokiu pavyzdžiu:

jssmag.209.165> helios.132: atp-req 12266 <0-7> 0xae030001 helios.132> jssmag.209.165: atp-resp 12266: 0 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 1 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 2 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 3 (512) 0xae040000 helios.132> jssmag.209.165: atp- resp 12266: 4 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 5 (512) 0xae040000 helios.132> jssmag.209.165: atp-resp 12266: 6 (512) 0xae040000 helios.132> jssmag. 209.165: atp-resp * 12266: 7 (512) 0xae040000 jssmag.209.165> helios.132: atp-req 12266 <3,5> 0xae030001 helios.132> jssmag.209.165: atp-resp 12266: 3 (512) 0xae040000 helios .132> jssmag.209.165: atp-resp 12266: 5 (512) 0xae040000 jssmag.209.165> helios.132: atp-rel 12266 <0-7> 0xae030001 jssmag.209.133> helios.132: atp-req * 12267 <0 -7> 0xae030002

Jssmag.209 inicijuoja sandorio ID 12266 su priimančiosios helios, užpildydamas iki 8 paketų (`<0-7> '). Linijos pabaigoje esantis šešioliktainis numeris yra prašymo laukas "userdata".

Helios reaguoja su 8 512 baitų paketais. Po sandorio ID ": skaitmuo" pateikia sandorio paketų sekos numerį, o "parens" skaičius yra duomenų kiekis paketoje, išskyrus antraštę "atspausdinti". Paketo 7 "*" rodo, kad nustatytas EOM bitas.

Jssmag.209 reikalauja, kad 3 ir 5 paketai būtų retransliuoti. Helios juos iš naujo siunčia, tada jssmag.209 išleidžia sandorį. Galiausiai jssmag.209 inicijuoja kitą prašymą. Užklausoje "*" nurodoma, kad XO ("tiksliai vieną kartą") nebuvo nustatytas.

IP suskaidymas

Fragmentuoti interneto datagramai spausdinami kaip

(frag id : size @ offset +) (frag id : size @ offset )

(Pirmoji forma rodo, kad yra daugiau fragmentų. Antrasis nurodo, kad tai yra paskutinis fragmentas.)

Id yra fragmento id. Dydis yra fragmento dydis (baitais) be IP antraštės. Offset yra šio fragmento nuokrypis (baitais) originalioje datagramoje.

Kiekvieno fragmento informacija pateikiama fragmentais. Pirmasis fragmentas yra aukštesnio lygio protokolo antraštė, o fragmento informacija atspausdinama po protokolo informacijos. Fragmentai po pirmojo nėra aukštesnio lygio protokolo antraštės, o frag informacija yra atspausdinta po šaltinio ir paskirties adresų. Pavyzdžiui, čia yra dalis ftp iš arizona.edu į lbl-rtsg.arpa per CSNET ryšį, kuris, atrodo, neveikia 576 baitų datagramų:

arizona.ftp-data> rtsg.1170:. 1024: 1332 (308) ack 1 win 4096 (frag 595a: 328 @ 0 +) arizona> rtsg: (fragmentas 595a: 204 @ 328) rtsg.1170> arizona.ftp-data:. ack 1536 win 2560

Čia yra keli dalykai: pirma, adresai 2 eilutėje neapima uosto numerių. Taip yra todėl, kad TCP protokolo informacija yra visame pirmame fragmente, ir mes neturime supratimo apie uosto ar sekos numerius, kai spausdiname vėlesnius fragmentus. Antra, pirmoje eilutėje pateikiama informacija apie tcp seka atspausdinama taip, tarsi būtų 308 baitų naudotojo duomenų, iš tikrųjų yra 512 baitų (pirmame fragmente - 308, o antrajame - 204). Jei ieškote skylių sekos erdvėje arba bandote sutapti su paketais, tai gali jus apgauti.

Paketas su IP ne fragmento vėliava yra pažymėtas užpakalinėmis (DF) .

Laiko žymos

Pagal numatytuosius nustatymus prieš išvesties eilutes yra laiko žymos. Laikmatis yra dabartinis formos laikrodžio laikas

hh: mm: ss.frac

ir toks pat tikslus kaip ir branduolio laikrodis. Laikmatis rodo laiką, kada branduolys pirmą kartą matė paketą. Nebuvo bandoma atsiskaityti už laiko tarpą nuo to laiko, kai "Ethernet" sąsaja pašalino paketą iš laido ir kai branduolys aptarnavo "naujojo paketo" pertraukimą.

TAIP PAT ŽR

eismas (1C), nit (4P), bpf (4), pcap (3)

Svarbu: naudokite komandą man ( % man ), kad pamatytumėte, kaip komanda naudojama jūsų konkrečiame kompiuteryje.