Tcpdump és un comandament utilitzat en diversos sistemes operatius Linux (OS) que recull paquets TCP / IP que passen per un adaptador de xarxa. Igual que una eina d'eliminació de paquets, tcpdump no només pot analitzar el trànsit de xarxa, sinó també desar-lo en un fitxer.
A diferència d'alguns comandaments que el sistema operatiu proporciona de manera predeterminada, és possible que no pugueu utilitzar tcpdump perquè no està instal·lat. Per instal·lar tcpdump, executeu apt-get install tcpdump o yum install tcpdump, depenent del vostre sistema operatiu.
Com funciona Tcpdump
Tcpdump imprimeix les capçaleres de paquets en una interfície de xarxa que coincideix amb el Boolean expressió . També es pot executar amb el-w bandera, el que fa que guardeu les dades del paquet en un fitxer per a una anàlisi posterior i / o amb el-r que fa que es llegeixi des d'un fitxer de paquets guardat en comptes de llegir paquets des d'una interfície de xarxa. En tots els casos, només els paquets que coincideixen expressió serà processat per tcpdump .
Tcpdump serà, si no s'executa amb el-c marca, continueu capturant els paquets fins que l'interrompre un senyal SIGINT (generat, per exemple, escrivint el vostre caràcter d'interrupció, normalment Ctrl + C) o un senyal SIGTERM (generalment generat amb elmatar(1) ordre); si s'executa amb el-c marca, capturarà els paquets fins que s'interrompi un senyal SIGINT o SIGTERM o s'hagi processat el nombre especificat de paquets.
Els interruptors esmentats anteriorment s'expliquen detalladament més endavant en aquest article.
Quan tcpdump acaba capturant paquets, reportarà un recompte de:
- Paquets "rebuts per filtre".
- El significat d'això depèn del sistema operatiu en què esteu executant tcpdump , i possiblement en la forma en què es va configurar el sistema operatiu. Si es va especificar un filtre a la línia d'ordres, en alguns sistemes operatius, compte paquets independentment de si van coincidir amb l'expressió del filtre i, en d'altres, només comptava amb paquets que coincidien amb l'expressió del filtre i que van ser processats per tcpdump.
- Paquets "caiguts per kernel".
- Aquest és el nombre de paquets que es van deixar caure, a causa de la manca d'espai de memòria intermèdia, pel mecanisme de captura de paquets del sistema operatiu en què tcpdump s'està executant, si el sistema operatiu informa aquesta informació a les aplicacions. Si no, es comunicarà com a 0.
A les plataformes que admeten el senyal de SIGINFO, com la majoria de BSD (Berkeley Software Distributions), informarà aquests comptes quan rep un senyal de SIGINFO (generat, per exemple, escrivint el vostre caràcter "status", normalment Ctrl + T) i continuarà capturant paquets.
Compatibilitat amb Tcpdump
Els paquets de lectura d'una interfície de xarxa amb l'ordre tcpdump poden requerir que tingueu privilegis especials ( lectura un fitxer de paquets guardats no requereix aquests privilegis):
- SunOS 3.x o 4.x amb NIT o BPF: Heu de tenir accés de lectura a / dev / nit o dev / bpf * .
- Solaris amb DLPI: Heu de tenir accés de lectura / escriptura al pseudomodel de la xarxa, com ara / dev / le . En almenys algunes versions de Solaris, però, això no és suficient per permetre'l tcpdump capturar de manera promiscu; en aquestes versions de Solaris, heu de ser root, o bé tcpdump s'ha d'instal·lar setuid a root, per tal de capturar de manera promiscu. Tingueu en compte que, en moltes (potser totes) interfícies, si no captures de manera promiscua, no veurà paquets sortints, de manera que una captura no realitzada de manera promiscuada pot ser que no sigui molt útil.
- HP-UX amb DLPI: Heu de ser root o tcpdump s'ha d'instal·lar setuid a root.
- IRIX amb snoop: Heu de ser root o tcpdump s'ha d'instal·lar setuid a root.
- Linux: Heu de ser root o tcpdump s'ha d'instal·lar setuid a root.
- Ultrix i Digital UNIX / Tru64 UNIX: Qualsevol usuari pot capturar trànsit de xarxa amb tcpdump . Tanmateix, cap usuari (ni tan sols el superusuari) pot capturar de manera promiscuada en una interfície a menys que el súper usuari hagi activat el mode promiscut en aquesta interfície utilitzant pfconfig (8) i cap usuari (ni tan sols el superusuari) pot capturar el trànsit unicast rebut o enviat per la màquina en una interfície, tret que el superusuari hagi habilitat l'operació de còpia en mode en aquesta interfície utilitzant pfconfig , tan útil la captura de paquets en una interfície probablement requereix que l'operació en mode promiscuo o còpia en mode, o ambdós modes de funcionament, estigui habilitada en aquesta interfície.
- BSD: Heu de tenir accés de lectura a / dev / bpf * .
Sintaxi de comandaments de Tcpdump
Com totes les ordres de l'ordinador, la comanda tcpdump funciona correctament només si la sintaxi és correcta:
tcpdump -adeflnNOpqRStuvxX -c comptar
-C mida de l'arxiu -F dossier
-i interfície -m mòdul -r dossier
-s snaplen -T escriu -U usuari -w dossier
-E alguna cosa: secret expressió
Opcions de comandament de Tcpdump
Aquestes són totes les opcions que podeu utilitzar amb l'ordre tcpdump:
- -a: Intenteu convertir les adreces de xarxa i de difusió als noms.
- -c: Surt després de rebre comptar paquets
- -C: Abans d'escriure un paquet cru a un fitxer d'emmagatzematge, comproveu si el fitxer és actualment més gran que mida de l'arxiu i, en aquest cas, tanqueu el fitxer d'emmagatzematge actual i obriu-ne un de nou.Els fitxers d 'estalvi després del primer fitxer d' estalvi tindran el nom especificat amb el fitxer-w bandera, amb un número després d'això, a partir de 2 i continuant cap amunt. Les unitats de mida de l'arxiu són milions de bytes (1.000.000 bytes, no 1.048.576 bytes).
- -d: Esborreu el codi de compilació de paquets compilat en una forma llegible per humans a la sortida estàndard i s'atura.
- -dd: Esborreu el codi de paquet com aC fragment del programa.
- -ddd: Esborreu el codi de paquetatge com a nombres decimals (precedit d'un recompte).
- -e: Imprimiu el encapçalament de nivell d'enllaç a cada línia de bolcat.
- -E: Ús alguna cosa: secret per desxifrar paquets IPsec ESP. Algorismes poden serdes-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, ocap. El valor per defecte ésdes-cbc. La possibilitat de desxifrar paquets només està present si tcpdump es va compilar amb la criptografia activada. secret el text ascii per a la clau secreta d'ESP. No podem acceptar un valor binari arbitrari en aquest moment. L'opció assumeix RFC2406 ESP, no RFC1827 ESP. L'opció és només per a propòsits de depuració, i l'ús d'aquesta opció amb una clau veritablement "secreta" es desanima. En presentar la clau secreta d'IPsec a la línia de comandaments, es fa visible per als altres, a través de ps (1) i altres ocasions.
- -f: Imprimeixi direccions d'Internet 'estrangeres' numèricament que no simbòlicament (aquesta opció està pensada per evitar greus danys cerebrals al servidor de Sunp, normalment es bloqueja per sempre traduint números d'Internet no locals).
- -F: Ús dossier com a entrada per a l'expressió del filtre. S'ignora una expressió addicional a la línia d'ordres.
- -i: Escolteu interfície . Si no s'especifica, tcpdump cerca la llista d'interfície del sistema per a la interfície més baixa numerada i configurada (amb exclusió del bucle invers). Els enllaços es trenquen triant la coincidència més primerenca. En sistemes Linux amb kernels 2.2 o posteriors, un interfície L'argument de "any" es pot utilitzar per capturar paquets de totes les interfícies. Tingueu en compte que les captures del dispositiu "qualsevol" no es faran de manera promiscu.
- -l: Configureu la línia de línia estancada. Útil si voleu veure les dades mentre la captura. Per exemple, "tcpdump -l | tee dat" o "tcpdump -l> dat & tail -f dat".
- -m: Carregar definicions del mòdul SMI MIB des del fitxer mòdul . Aquesta opció es pot utilitzar diverses vegades per carregar diversos mòduls MIB tcpdump .
- -n: No convertiu les adreces d'amfitrió als noms. Això es pot utilitzar per evitar cerques DNS.
- -nn: No converteu tampoc els noms de protocol ni de port, ni tampoc noms.
- -N: No imprimiu la qualificació del nom de domini dels noms d'amfitrió. Per exemple, si dóna aquesta bandera, llavors tcpdump imprimirà "nic" en lloc de "nic.ddn.mil".
- -O: No executeu l'optimitzador de codi que coincideixi amb el paquet. Això només és útil si sospiteu d'un error en l'optimitzador.
- -p: No ho facis posa la interfície en mode promiscu. Tingueu en compte que la interfície pot ser de manera promiscuada per algun altre motiu; per tant, '-p' no es pot utilitzar com a abreviació de 'ether host (local-hw-addr) o emissió d'èter'.
- -q: Sortida ràpida (silenciosa). Imprimiu menys informació del protocol perquè les línies de sortida siguin més curtes.
- -R: Assumeixi els paquets ESP / AH per basar-se en especificacions anteriors: RFC1825 a RFC1829. Si s'especifica, tcpdump no imprimirà camp de prevenció de reproducció. Com que no hi ha cap camp de versió de protocol a l'especificació ESP / AH, tcpdump no es pot deduir la versió del protocol ESP / AH.
- -r: Llegir paquets de dossier (que es va crear amb l'opció -w). S'utilitza l'entrada estàndard si dossier és "-''.
- -S: Impressió de nombres absoluts, més que relatius, de seqüència de TCP.
- -s: Snarf snaplen bytes de dades de cada paquet en comptes de la predeterminada de 68; amb el NIT de SunOS, el mínim és de 96. Sisè-vuit bytes són adequats per a IP, ICMP, TCP i UDP, però poden truncar la informació del protocol del servidor de noms i els paquets NFS (vegeu a continuació). Els paquets truncats a causa d'una instantània limitada estan indicats a la sortida amb "| proto '', on proto és el nom del nivell de protocol en què s'ha produït el truncament. Tingueu en compte que prendre instantànies més grans augmenta la quantitat de temps que triga a processar paquets i, de manera efectiva, disminueix la quantitat de buffer de paquets. Això pot fer que es perdin els paquets. Heu de limitar snaplen al menor nombre que capturi la informació del protocol en què us interessi. Configuració snaplen a 0 significa utilitzar la longitud requerida per capturar paquets complets.
- -T: Forçar els paquets seleccionats per " expressió "per interpretar la especificada escriu . Els tipus coneguts actualment sóncnfp (Protocol Cisco NetFlow),rpc (Crida de procediment remot),rtp (Protocol d'aplicacions en temps real),rtcp (Protocol de control d'aplicacions en temps real),snmp (Protocol simple de gestió de xarxa),vat (Visual Audio Tool) iwb (Junta Blanca distribuïda).
- -t: No ho facis imprimiu una marca de temps a cada línia d'abocament.
- -tut: Imprimeixi una marca de temps no formateada a cada línia d'abocament.
- -U: Deixa anar els privilegis de root i canvia la identificació de l'usuari a usuari i identificació de grup al grup principal de usuari .
- Nota: Red Hat Linux deixarà automàticament els privilegis a l'usuari "pcap" si no s'especifica res més.
- -ttt: Imprimeix un delta (en microsegons) entre la línia actual i la anterior en cada línia d'abocament.
- -tttt: Imprimeix una marca de temps en el format per defecte seguida per data en cada línia d'abocament.
- -u: Impressores sense nifes d'impressió NFS.
- -v: (Lleugerament més) de sortida detallada. Per exemple, s'imprimeix el temps de vida, la identificació, la longitud total i les opcions d'un paquet IP. També permet comprovacions addicionals de la integritat del paquet, com verificar la suma de verificació de capçalera IP i ICMP.
- -vv: Fins i tot més resultats detallats. Per exemple, els camps addicionals s'imprimeixen a partir de paquets de resposta NFS, i els paquets SMB estan totalment descodificats.
- -vvv: Fins i tot més resultats detallats. Per exemple, telnetSB … SE les opcions estan impreses íntegrament. Amb -X Les opcions de telnet també s'imprimeixen en hexadecimal.
- -w: Escriure els paquets bruts a dossier en comptes d'analitzar-les i imprimir-les. Posteriorment es podran imprimir amb l'opció -r. S'utilitza la sortida estàndard si dossier és "-''.
- -x: Imprimiu cada paquet (menys el seu encapçalament de nivell d'enllaç) en hexadecimal. El més petit de tot el paquet o snaplen bytes s'imprimiran. Tingueu en compte que aquest és el paquet complet de la capa d'enllaç, de manera que per a les capes d'enllaç que el coixinet (p. Ex., Ethernet), els bytes de farcit també s'imprimiran quan el paquet de capes superiors sigui més curt que el farcit requerit.
- -X: Quan imprimiu hexadecimal, imprimiu ascii també. Així si-x també està establert, el paquet està imprès en hexadecimal / ascii. Això és molt útil per analitzar nous protocols. Encara que-x també no està configurat, algunes parts d'alguns paquets es poden imprimir en hex / ascii.
- expressió : Selecciona quins paquets es baixaran. Si no expressió es dóna, tots els paquets a la xarxa seran objecte de dumping. En cas contrari, només els paquets per als quals expressió serà "veritable". El expressió Consisteix en una o més primitives Els primitius normalment consisteixen en un id (nom o número) precedit per un o més classificadors. Hi ha tres tipus diferents de classificadors:
- escriu : Els classificadors diuen quin tipus de cosa es refereix al nom de l'id o al número. Els tipus possibles sónhost, net, iport-Per exemple, 'host foo', 'net 128.3', 'port 20'. Si no hi ha qualificador de tipus,host se suposa.
- dir : Els classificadors especifiquen una direcció de transferència en particular i / o des de id . Les indicacions possibles sónsrc, dst, src o dst isrc i dst (p. ex., 'src foo', 'dst net 128.3', 'src o dst port ftp-data'). Si no hi ha qualificador de paraula,src o dst se suposa. Per a les capes d'enllaç 'nul' (és a dir, els protocols punt a punt, com ara el lliscament) entrada i sortida Els classificadors es poden utilitzar per especificar la direcció desitjada.
- proto : Els classificadors restringeixen la coincidència a un protocol concret. Els possibles protos són: èter, fddi, tr, ip, ip6, arp, rarp, Decnet, tcp, iudp-Per exemple, 'ether src foo', 'arp net 128.3', 'port tcp 21'. Si no hi ha proto qualifier, s'assumeixen tots els protocols coherents amb el tipus. Per exemple, 'src foo' significa '(ip o arp o rarp) src foo' (excepte aquest últim no és una sintaxi legal), 'barra neta' significa 'barra neta' '' (ip o arp o rarp) 'i' port 53 ' vol dir '(tcp o udp) port 53'.
- 'fddi' és en realitat un àlies per a 'èter'; l'analitzador els tracta de forma idèntica com a "el nivell d'enllaç de dades utilitzat a la interfície de xarxa especificada". Les capçaleres FDDI contenen adreces de font i destí com Ethernet, i sovint contenen tipus de paquets com Ethernet, de manera que podeu filtrar aquests camps FDDI només com passa amb els camps Ethernet anàlegs. Els encapçalaments FDDI també contenen altres camps, però no es poden nomenar explícitament en una expressió de filtre.
- De la mateixa manera, 'tr' és un àlies per a 'èter'; les instruccions del paràgraf anterior sobre capçaleres FDDI també s'apliquen als encapçalaments de Token Ring.
A més de l'anterior, hi ha algunes paraules clau "primitives" especials que no segueixen el patró:porta d'entrada, emissió, menys, major, i aritmètica expressions Tot això es descriu a continuació.
Les expressions de filtre més complexes es generen utilitzant les paraulesi, o, ino per combinar primitives, per exemple, "host foo i no port ftp i no port ftp-data". Per desar l'escriptura, es poden ometre les llistes de qualificacions idèntiques (p. Ex., "Tcp dst port ftp o ftp-data o domain" és exactament el mateix que "tcp dst port ftp o tcp dst port ftp-data o tcp dst port domain").
Aquestes són les primitives permeses amb l'ordre tcpdump:
- dst host host
- És veritat si el camp de destinació IPv4 / v6 del paquet és host , que pot ser una adreça o un nom.
- host src host
- És cert si el camp d'origen IPv4 / v6 del paquet és host .
- host host
- És cert si l'origen o la destinació del paquet IPv4 / v6 és host . Qualsevol de les expressions de l'amfitrió anteriors es pot prepender amb les paraules clau,ip, arp, rarp, oip6, com a ip host host (que equival a èter proto ip i amfitrió host).
- Si host és un nom amb diverses adreces IP, es verificarà cada adreça per a una coincidència.
- éter dst ehost
- És veritat si l'adreça de destinació Ethernet és ehost . Ehost Pot ser un nom de / etc / ethers o un número (veure èters (3N) per al format numèric).
- ether src ehost
- És veritat si l'adreça d'origen Ethernet és ehost .
- ether host ehost
- És veritat si l'adreça de destinació o origen Ethernet és ehost .
- porta d'entrada host
- És cert si el paquet utilitzat host com una porta d'enllaç (és a dir, l'origen Ethernet o l'adreça de destinació era) host però ni la font d'IP ni la destinació d'IP eren host ).
- Amfitrió ha de ser un nom i ha de trobar-se tant pels mecanismes de resolució de l'adreça host-name-to-IP de la màquina (fitxer de nom de host, DNS, NIS, etc.) i el mecanisme de resolució de l'adreça host-name-to-Ethernet de la màquina (/ etc / èthers, etc.).
- Una expressió equivalent és ether host ehost i ara l'amfitrió host , que es pot utilitzar amb noms o números per a host / ehost .) Aquesta sintaxi no funciona en la configuració habilitada per IPv6 en aquest moment.
- dst net net
- És cert si l'adreça de destinació IPv4 / v6 del paquet té un número de xarxa net . Net Pot ser un nom de / etc / networks o un número de xarxa (vegeu xarxes (4) per obtenir més informació).
- src net net
- És cert si l'adreça d'origen IPv4 / v6 del paquet té un número de xarxa net .
- net net
- Cert si l'adreça d'origen o de destinació de l'IPv4 / v6 del paquet té un número de xarxa net .
- net net màscara màscara de xarxa
- És cert si l'adreça IP coincideix net amb el específic màscara de xarxa . Es pot habilitar ambsrc odst. Tingueu en compte que aquesta sintaxi no és vàlida per a IPv6 net .
- net net / len
- És cert si l'adreça IPv4 / v6 coincideix net amb màscara de xarxa len bits amples. Es pot habilitar ambsrc odst.
- port dst port
- Cert si el paquet és ip / tcp, ip / udp, ip6 / tcp o ip6 / udp i té un valor de port de destinació de port . El port pot ser un número o un nom usat a / etc / services (vegeu tcp (4P) i udp (4P)). Si s'utilitza un nom, es verifica tant el número de port com el protocol. Si s'utilitza un nombre o nom ambigu, només es verifica el número de port (p. Ex.,port dst 513 imprimirà tant el trcp / trànsit d'inici de sessió i udp / qui el trànsit, idomini del port imprimirà tant trcp / domini i udp / domini del trànsit).
- port src port
- És veritat si el paquet té un valor de port de origen port .
- port port
- Cert si el port d'origen o de destinació del paquet és port . Qualsevol de les expressions de port anteriors es pot prepender amb les paraules clau,tcp oudp, com a port src de TCP port , que només coincideix amb els paquets tcp que tenen el port d'origen port .
- menys llargada
- És veritat si el paquet té una longitud menor o igual que llargada . Això equival a len <= Llargada .
- major llargada
- És veritat si el paquet té una longitud major o igual que llargada . Això equival a len> = Llargada .
- ip proto protocol
- Cert si el paquet és un paquet d'IP (vegeu ip (4P)) del tipus de protocol protocol . Protocol pot ser un nombre o un dels noms icmp , icmp6 , igmp , igrp , pim , ah , esp , vrrp , udp , o tcp . Tingueu en compte que els identificadors tcp , udp , i icmp també són paraules clau i s'han d'escapar a través d'una barra invertida (), que és a la carcassa C. Tingueu en compte que aquesta primitiva no persegueix la cadena de capçalera del protocol.
- ip6 proto protocol
- Cert si el paquet és un paquet IPv6 de tipus de protocol protocol . Tingueu en compte que aquesta primitiva no persegueix la cadena de capçalera del protocol.
- IP6 protochain protocol
- És veritat si el paquet és paquet IPv6 i conté capçalera de protocol amb tipus protocol en la cadena de capçalera del protocol. Per exemple, IPv6 protochain 6 coincideix amb qualsevol paquet d'IPv6 amb encapçalament de protocol TCP en la cadena de capçalera del protocol. El paquet pot contenir, per exemple, l'encapçalament d'autenticació, el encapçalament d'encaminament o l'encapçalament d'opció hop-by-hop, entre encapçalament IPv6 i encapçalament TCP. El codi BPF emès per aquesta primitiva és complex i no pot ser optimitzat pel codi d'optimitzador de BPF a tcpdump , així que això pot ser una mica lent.
- ip protochain protocol
- Equivalent aIP6 protochain protocol , però això és per IPv4.
- transmissió d'èter
- És veritat si el paquet és un paquet d'emissió d'Ethernet. El èter la paraula clau és opcional.
- ip broadcast
- Cert si el paquet és un paquet d'emissió IP. Comprova tant les convencions de transmissió de tots els zeros com tots, i mira la màscara de subxarxa local.
- ether multicast
- Cert si el paquet és un paquet de multidifusió Ethernet. El èter la paraula clau és opcional. Això és abreviatura de "èter 0 i 1! = 0'.
- ip multicast
- Cert si el paquet és un paquet multicast d'IP.
- ip6 multicast
- Cert si el paquet és un paquet de multidifusió IPv6.
- èter proto protocol
- Cert si el paquet és de tipus eter protocol . Protocol pot ser un nombre o un dels noms ip , ip6 , arp , rarp , atalk , Aarp , Decnet , sca , lat , mopdl , moprc , iso , stp , ipx , o netbeui . Tingueu en compte que aquests identificadors també són paraules clau i s'han d'escapar mitjançant una barra invertida ().
- En el cas de FDDI (p. Ex., 'fddi protocol arp') i Token Ring (p. ex.,'tr arp protocol'), per a la majoria d'aquests protocols, la identificació del protocol prové del encapçalament 802.2 Logical Link Control (LLC), que generalment es troba a la part superior de l'encapçalament FDDI o Token Ring.
- Quan es filtra per a la majoria d'identificadors de protocol a FDDI o a Token Ring, tcpdump només comprova el camp ID de protocol d'un encapçalament LLC en el format SNAP anomenat amb un identificador d'unitat organitzativa (OUI) de 0x000000, per Ethernet encapsulat; no comprova si el paquet està en format SNAP amb un OUI de 0x000000.
- Les excepcions són iso , pel qual verifica els camps DSAP (punt d'accés de servei de destinació) i SSAP (servei d'origen del codi font) del encapçalament LLC, stp i netbeui , on verifica el capítol DSAP de la LLC, i atalk , on comprova un paquet de format SNAP amb un OUI de 0x080007 i l'tipus eTipo de dades.
- En el cas d'Ethernet, tcpdump comprova el camp del tipus Ethernet per a la majoria d'aquests protocols; les excepcions són iso , saba , i netbeui , per la qual cosa comprova un marc 802.3 i, a continuació, comprova el encapçalament LLC com ho fa per FDDI i Token Ring; atalk , on comprova tant l'etype Appletalk en un marc Ethernet com un paquet format SNAP com ho fa per FDDI i Token Ring; Aarp , on comprova el tipus Etype ARP d'Appletalk en un marc Ethernet o un marc SNAP 802.2 amb un OUI de 0x000000; i ipx , on verifica l'etype IPX en un marc Ethernet, el IPAP DSAP al encapçalament LLC, el 802.3 sense cap encapsulament encapçalat d'IPX i l'IPty tipus IPX en un marc SNAP.
- decnet src host
- És cert si l'adreça d'origen de DECNET és host , que pot ser una adreça del formulari "10.123", o un nom de servidor DECNET. El suport del nom del servidor DECNET només està disponible en sistemes Ultrix que es configuren per executar DECNET.
- decnet dst host
- És veritat si l'adreça de destinació DECNET és host .
- host decnet host
- És veritat si l'adreça de font o de destinació de DECNET és host .
- ip, ip6, arp, rarp, atalk, Aarp, Decnet, iso, stp, ipx, netbeui
- Abreviacions per a èter proto p on p És un dels protocols anteriors.
- lat, moprc, mopdl
- Abreviacions per a èter proto p on p És un dels protocols anteriors. Tingues en compte que tcpdump actualment no sap com analitzar aquests protocols.
- Vlan Vlan_id
- Cert si el paquet és un paquet VLAN IEEE 802.1Q. Si Vlan_id s'especifica, només és veritat si el paquet té el especificat vlan_id . Tingueu en compte que la primeraVlan S'ha trobat la paraula clau a expressió canvia la compensació de descodificació per a la resta de expressió en el supòsit que el paquet és un paquet VLAN.
- tcp, udp, icmp
- Abreviacions per a ip proto p o ipto proto p on p És un dels protocols anteriors.
- iso proto protocol
- Cert si el paquet és un paquet OSI de tipus de protocol protocol . Protocol pot ser un nombre o un dels noms clnp , esis , o Isis .
- clnp, esis, Isis
- Abreviacions per a iso proto p on p És un dels protocols anteriors. Tingues en compte que tcpdump fa un treball incomplet d'anàlisi d'aquests protocols.
- expr relop expr
- És cert si la relació manté, on relop és una de>, <,> =, <=, =,! =, i expr és una expressió aritmètica composta de constants enters (expressada en la sintaxi C estàndard), els operadors binaris normals +, -, *, /, &, |, un operador de longitud i accessoris de dades de paquets especials. Per accedir a les dades dins del paquet, utilitzeu la sintaxi següent: proto expr: size .
Proto és un delsèter, fddi, tr, ppp, escletxa, enllaç, ip, arp, rarp, tcp, udp, icmp, o ip6, i indica la capa de protocol per a l'operació d'índex (èter, fddi, tr, ppp, escletxa, ienllaç tots fan referència a la capa d'enllaç). Tingues en compte que tcp, udp , i altres tipus de protocol de la capa superior només s'apliquen a IPv4, no a IPv6 (això es solucionarà en el futur). El desplaçament de bytes, relatiu a la capa de protocol indicat, ve donat per expr . Mida és opcional i indica el nombre de bytes en el camp d'interès; Pot ser un, dos o quatre, i es fa per defecte. L'operador de durada, indicat per la paraula claulen, dóna la longitud del paquet.
Per exemple, 'èter 0 i 1! = 0'captura tot el trànsit multidifusió. L'expressió 'ip 0 i 0xf! = 5'captura tots els paquets IP amb opcions. L'expressió 'ip 6: 2 i 0x1fff = 0'només captura datagrames no fragilitzats i frag zero de datagrames fragmentats. Aquest xec s'aplica implícitament a latcp iudp operacions d'índex. Per exemple, tcp 0 sempre significa el primer byte del TCP encapçalament , i mai no significa el primer byte d'un fragment intervingut.
Alguns desplaçaments i valors de camp poden expressar-se com a noms en comptes de com a valors numèrics. Els següents desplaçaments de camp de capçalera del protocol estan disponibles: icmptype (Camp de tipus ICMP),icmpcode (Camp del codi ICMP), itcpflags (Camp de flancs TCP).
Els següents valors de camp tipus ICMP estan disponibles:icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirecció, icmp-echo, icmp-routeradvert, icmp-routersolicit, icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.
Els següents valors de camp de banderes TCP estan disponibles:tcp-fin, tcp-syn, tcp-rst, Tcp-push, Tcp-push, tcp-ack, tcp-urg.
Els primitius es poden combinar utilitzant algun dels següents:
- Un grup entre primitives i operadors entre parèntesis (entre parèntesis són especials per al Shell i han de ser escapats)
- Negació ('!'o `no')
- Concatenació ('&&'o'i')
- Alternança ('||'o'o')
La negació té una prioritat més alta. L'alternança i la concatenació tenen la mateixa prioritat i associen d'esquerra a dreta. Tingueu en compte que explíciti Els tokens, no la juxtaposició, són necessaris per a la concatenació.
Si s'ofereix un identificador sense una paraula clau, s'assumeix la paraula clau més recent. Per exemple, no host versus ace és curta per a no host vs i host ace. No obstant això, això no s'ha de confondre amb no (host vs o as).
Es poden passar arguments d'expressió tcpdump com un argument únic o com a arguments múltiples, el que sigui més convenient. En general, si l'expressió conté caràcters metacarel·lar Shell, és més fàcil passar-ho com un argument únic citat. Diversos arguments es concatenen amb espais abans d'analitzar-los.
Exemples de Tcpdump
presentació de l'amfitrió de tcpdump
L'ordre tcpdump anterior s'utilitza per imprimir tots els paquets que arriben o s'apropen dia de sol. helios de host tcpdump i (hot o as )
Aquest exemple de tcpdump imprimeix el trànsit entre helios i tampoc calenta o as. tcpdump ip host ace i no helios
Podeu utilitzar aquesta ordre tcpdump per imprimir entre tots els paquets IP as i qualsevol servidor excepte helios. tcpdump net ucb-ether
A l'exemple anterior, tcpdump imprimeix tot el trànsit entre els amfitrions locals i els hosts de Berkeley. tcpdump 'gateway snup i (port ftp o ftp-data)'
Aquest següent exemple de comanda tcpdump s'utilitza per imprimir tot el trànsit FTP a través de la passarel · la d'Internet aixafar . Tingueu en compte que l'expressió es cita per evitar que l'intèrpret d'ordres malinterpreti els parèntesis. tcpdump ip i no net localnet
En l'exemple de tcpdump anterior, el comandament imprimeix el trànsit no procedent ni destinat als hosts locals. tcpdump 'tcp tcpflags & (tcp-syn | tcp-fin)! = 0 i no src i dst net localnet '
Per a l'exemple anterior de tcpdump, l'ordre s'utilitza per imprimir els paquets d'inici i final (els paquets SYN i FIN) de cada conversió TCP que implica un host no local. tcpdump 'gateway snup i ip 2: 2> 576'
L'ordre anterior imprimirà paquets d'IP de més de 576 bytes enviats per passarel·la aixafar tcpdump 'ether 0 i 1 = 0 i ip 16> = 224'
La comanda tcpdump que es mostra a dalt mostra la transmissió IP o els paquets multidifus que eren no enviat a través d'Ethernet broadcast o multicast. tcpdump 'icmp icmptype! = icmp-echo i icmp icmptype! = icmp-echoreply'
En aquest últim exemple de tcpdump, l'ordre imprimeix tots els paquets ICMP que no són respostes o respostes a eco (és a dir, no paquets de paquets). La sortida de tcpdump depèn del protocol. A continuació es proporciona una breu descripció i exemples de la majoria dels formats. Encapçalaments de nivell d'enllaç. Si s'ofereix l'opció '-e', s'imprimeix l'encapçalament del nivell de l'enllaç. A les xarxes Ethernet, s'imprimeixen les adreces d'origen i destinació, el protocol i la longitud del paquet. A les xarxes FDDI, l'opció '-e' provoca tcpdump per imprimir el camp "control de marc", les adreces de font i destinació i la longitud del paquet. (El camp 'control de marcs' regeix la interpretació de la resta del paquet. Els paquets normals (com aquells que contenen datagrames d'IP) són paquets 'asíncrons', amb un valor de prioritat entre 0 i 7: per exemple, `async4'. Es suposa que aquests paquets contenen un paquet de control de lògica 802.2 (LLC); el encapçalament LLC s'imprimeix si ho és no un datagrama ISO o un paquet anomenat SNAP. A les xarxes de Token Ring, l'opció '-e' provoca tcpdump per imprimir els camps "control d'accés" i "control de marc", les adreces de font i destinació i la longitud del paquet. Com en les xarxes FDDI, s'assumeix que els paquets contenen un paquet LLC. Independentment de si l'opció '-e' s'especifica o no, la informació d'enrutament d'origen s'imprimeix als paquets de codi font. (N.B .: La següent descripció assumeix la familiaritat amb l'algorisme de compressió SLIP descrit en RFC-1144). En enllaços SLIP, s'imprimeix un indicador de direcció ("I" per a entrades, "O" per a sortir), tipus de paquet i informació de compressió. El tipus de paquet s'imprimeix primer. Els tres tipus són ip , utcp , i ctcp . No s'imprimeix cap altra informació d'enllaç per a ip paquets Per a paquets TCP, l'identificador de connexió s'imprimeix seguint el tipus. Si el paquet està comprimit, s'imprimeix el encapçalament codificat. S'imprimeixen els casos especials com* S + n i* SA + n , on n és la quantitat per la qual ha canviat el nombre de seqüència (o nombre de seqüència i ack). Si no és un cas especial, s'imprimeixen zero o més canvis. Un canvi és indicat per U (punter urgent), W (finestra), A (ack), S (número de seqüència) i I (ID del paquet), seguit d'un delta (+ n o -n) o un nou valor (= n). Finalment, s'imprimeix la quantitat de dades del paquet i la longitud del capçal comprimit. Per exemple, la següent línia mostra un paquet TCP comprimit de sortida, amb un identificador de connexió implícit; l'ack ha canviat un 6, el nombre de seqüència de 49 i el de paquet de 6; hi ha 3 bytes de dades i 6 bytes de capçalera comprimida: O ctcp * A + 6 S + 49 I + 6 3 (6)
Paquets arp / rarp. La sortida arp / rarp mostra el tipus de sol·licitud i els seus arguments. El format té la intenció d'explicar-se a si mateix. Aquí teniu una petita mostra extreta des de l'inici d'un 'rlogin' de l'amfitrió rtsg per acollir csam : arp qui-ha csam tell rtsgarp answer csam és-a CSAM
La primera línia diu que rtsg va enviar un paquet arp preguntant per l'adreça Ethernet de l'amfitrió d'Internet csam. Csam contesta amb la seva adreça Ethernet (en aquest exemple, les adreces Ethernet es troben en caps i adreces d'Internet en minúscules). Això seria menys redundant si ho haguéssim fet tcpdump -n : arp que-té 128.3.254.6 dir 128.3.254.68Arp answer 128.3.254.6 is-at 02: 07: 01: 00: 01: c4
Si haguéssim fet tcpdump -e , el fet que es emet el primer paquet i el segon és visible a un punt a punt: RTSG Broadcast 0806 64: arp qui-ha csam tell rtsgCSAM RTSG 0806 64: arp answer csam is-in CSAM
Per al primer paquet, es diu que l'adreça d'origen Ethernet és RTSG, la destinació és l'adreça de difusió d'Ethernet, el camp de tipus conté el hexadecimal 0806 (tipus ETHER_ARP) i la longitud total era de 64 bytes. Paquets TCP (N.B.:La descripció següent assumeix la familiaritat amb el protocol TCP descrit en RFC-793. Si no esteu familiaritzat amb el protocol, tampoc aquesta descripció ni tcpdump us resultaran molt útils) . El format general d'una línia de protocol TCP és: src> dst: flags data-seqno ack finestra opcions urgents
Src i dst són les adreces i ports IP i origen de destinació. Banderes són una combinació de S (SYN), F (FIN), P (PUSH) o R (RST) o una sola '.' (sense banderes). Dades seqno descriu la part de l'espai de seqüència cobert per les dades d'aquest paquet (vegeu l'exemple següent). Ack és el número de seqüència de les dades següents que s'espera l'altra direcció d'aquesta connexió. Finestra és el nombre de bytes de recepció de l'espai de memòria intermèdia disponible l'altra direcció en aquesta connexió. Urg indica que hi ha dades "urgents" al paquet. Opcions són opcions tcp incloses entre claudàtors angulars (p. ex., Src, dst, i banderes sempre estan presents. Els altres camps depenen del contingut de l'encapçalament del protocol tcp del paquet i només es generen si escau. Aquí hi ha la part d'obertura d'un rlogin de l'amfitrió rtsg per acollir csam . rtsg.1023> csam.login: S 768512: 768512 (0) guanyar 4096 La primera línia diu que el port tcp 1023 en rtsg va enviar un paquet al port iniciar Sessió a csam. ElS indica que el SYN S'ha configurat la bandera. El número de seqüència de paquets era de 768512 i no contenia dades. (La notació és 'primer: últim (nbytes)', que significa 'nombres de seqüència' primer fins però no inclòs últim el qual és nbytes bytes de dades de l'usuari ".) No hi va haver ack respaldada amb guardiola, la finestra de recepció disponible era de 4096 bytes, i hi havia una opció de mida de segment màx. que sol·licitava un ms de 1024 bytes. Csam contesta amb un paquet similar, excepte que inclou un ack per a rastreig per a SYN de RTSG. Rtsg llavors acks SYN de Csam. El "." significa que no s'han configurat banderes. El paquet no contenia dades, de manera que no hi ha cap número de seqüència de dades. Tingueu en compte que el número de seqüència de ack és un enter petit (1). La primera vegada tcpdump veu una conversa TCP, imprimeix el número de seqüència del paquet. En paquets posteriors de la conversa, s'imprimeix la diferència entre el número de seqüència del paquet actual i aquest número de seqüència inicial. Això significa que els nombres de seqüència després de la primera es poden interpretar com a posicions de bytes relatives en la seqüència de dades de la conversa (amb el primer byte de dades cada direcció és '1'). '-S' anul·larà aquesta característica, fent que es generin els nombres de seqüència originals. A la sisena línia, RTSG envia csam 19 bytes de dades (bytes de 2 a 20 en el rtsg -> csam de la conversa). L'indicador PUSH s'estableix al paquet. A la setena línia, csam diu que les dades rebudes són enviades per rtsg fins però no s'inclou el byte 21. La majoria d'aquestes dades aparentment estan assegudes al buffer de sockets ja que la finestra de recepció de csam ha obtingut 19 bytes més petits. Csam també envia un byte de dades a rtsg en aquest paquet. A la vuitena i la novena línies, csam envia dos bytes de dades urgents i empeses a rtsg. Si la instantània era prou petita tcpdump no va capturar l'encapçalament TCP complet, interpreta la major part del encapçalament que pot i després informa "| tcp per indicar que la resta no es pot interpretar. Si l'encapçalament conté una opció falsa (una amb una longitud massa petita o més enllà del final de l'encapçalament), tcpdump ho informa com " malament optar '' '' i no interpreta cap opció addicional (ja que és impossible dir a on comencen). Si la longitud de la capçalera indica que les opcions estan presents, però la longitud del datagrama d'IP no és prou llarg perquè les opcions de ser, tcpdump ho informa com " mala longitud hdr ''. Captura paquets amb combinacions de bandera particulars. Hi ha vuit bits a la secció de bits de control del encapçalament TCP: CWR | ECE | URG | ACK | PSH | RST | SYN | FIN Suposem que volem veure els paquets utilitzats per establir una connexió TCP. Recordeu que TCP utilitza un protocol de presa de mans de tres vies quan inicialitza una nova connexió; la seqüència de connexió respecte als bits de control TCP és: Ara estem interessats a capturar paquets que només tenen el conjunt de bit SYN (pas 1). Tingueu en compte que no volem paquets del pas 2 (SYN-ACK), només un SYN inicial senzill. El que necessitem és una expressió de filtre correcta per a tcpdump . Recordeu l'estructura d'un encapçalament TCP sense opcions: 0 15 31-----------------------------------------------------------------| port d'origen | port de destinació |-----------------------------------------------------------------| número de seqüència |-----------------------------------------------------------------| número de confirmació |-----------------------------------------------------------------| HL | rsvd | C | E | U | A | P | R | S | F | mida de finestra |-----------------------------------------------------------------| TCP checksum | punter urgent |-----------------------------------------------------------------
Un encapçalament TCP normalment té 20 octets de dades, tret que hi hagi opcions. La primera línia del gràfic conté els octets 0-3, la segona línia mostra els octets 4-7, etc. Començant a comptar amb 0, els bits de control TCP rellevants estan continguts en l'octeto 13: 0 7| 15| 23| 31----------------|---------------|---------------|----------------| HL | rsvd | C | E | U | A | P | R | S | F | mida de finestra |----------------|---------------|---------------|----------------| | 13 º octet | | |
Anem a veure l'octet núm. 13: | | |---------------| | C | E | U | A | P | R | S | F | |---------------| |7 5 3 0|
Aquests són els bits de control TCP en què ens interessa. Hem numerat els bits d'aquest octet de 0 a 7, de dreta a esquerra, de manera que el bit de PSH és el número 3 de bits, mentre que el bit URG és el número 5. Recordem que volem capturar paquets amb només SYN. Anem a veure què passa amb l'octet 13 si arriba un datagrama TCP amb el bit de SYN establert en el seu encapçalament: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
En veure la secció de bits de control, veiem que només s'estableix el número de bits 1 (SYN). Si suposem que octet number 13 és un enter de 8 bits sense signe en ordre de bytes de xarxa, el valor binari d'aquest octet és: 00000010 La seva representació decimal és: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
Ja hem acabat, perquè ara sabem que si només s'estableix SYN, el valor del 13 º octet en el encapçalament TCP, quan s'interpreta com un enter de 8 bits sense signe en l'ordre de bytes de xarxa, ha de ser exactament 2. Aquesta relació es pot expressar com tcp 13 == 2 Podem utilitzar aquesta expressió com a filtre tcpdump per veure els paquets que només tenen SYN configurat: tcpdump -i xl0 tcp 13 == 2 L'expressió diu "deixar que el 13 º octeto d'un datagrama TCP tingui el valor decimal 2", que és exactament el que volem. Ara, suposem que hem de capturar els paquets SYN, però no ens importa que ACK o qualsevol altre bit de control TCP estigui configurat al mateix temps. Mireu el que passa amb l'octet 13 quan arriba un datagrama TCP amb el conjunt SYN-ACK: | C | E | U | A | P | R | S | F | |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0|
Els bits 1 i 4 s'estableixen ara al 13è octet. El valor binari de l'octet 13 és: 00010010 que es tradueix en decimal: 7 6 5 4 3 2 1 00*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
No podem fer servir 'tcp 13 == 18' a la tcpdump expressió del filtre, ja que només es seleccionarien aquells paquets que tinguin SYN-ACK establerts, però no aquells que només tenen SYN. Recordeu que no ens importa que ACK o qualsevol altre bit de control estigui configurat sempre que s'estableixi SYN. Per aconseguir el nostre objectiu, necessitem lògicament I el valor binari de l'octet 13 amb algun altre valor per preservar el bit de SYN. Sabem que volem que SYN s'estableixi, en qualsevol cas, de manera que LOGICAMENT i el valor en el 13 º octet amb el valor binari d'un SYN: 00010010 SYN-ACK 00000010 SYN I 00000010 (volem SYN) I 00000010 (volem SYN) -------- -------- = 00000010 = 00000010
Veiem que aquesta operació AND ofereix el mateix resultat independentment de si s'estableix ACK o un altre bit de control TCP. La representació decimal del valor AND, així com el resultat d'aquesta operació, és 2 (binari 00000010), de manera que sabem que per a paquets amb SYN, la relació següent ha de ser veritable: ((valor del octet 13) I (2)) == (2) Això ens assenyala a la tcpdump expressió del filtre tcpdump -i xl0 'tcp 13 i 2 == 2' Tingueu en compte que haureu d'usar cometes simples o una barra invertida a l'expressió per ocultar el caràcter especial AND ('&') del shell. Paquets UDP. El format UDP s'il·lustra amb aquest paquet rwho: actinide.who> broadcast.who: udp 84
Això diu que port Qui a l'amfitrió Actinida va enviar un datagrama udp al port Qui a l'amfitrió emissió , l'adreça de difusió a Internet. El paquet contenia 84 bytes de dades d'usuari. Alguns serveis UDP es reconeixen (des del número de port de la font o del destí) i la informació del protocol de nivell superior imprès, en particular, les sol·licituds de servei de noms de domini (RFC-1034/1035) i les trucades de Sun RPC (RFC-1050) a NFS. Sol·licituds de servidor de noms UDP (N.B.:La següent descripció assumeix la familiaritat amb el protocol del servei de domini descrit en RFC-1035. Si no coneixeu el protocol, la descripció següent tindrà molt sentit). Les sol·licituds de servidor de noms tenen el format de: src> dst: id op? banderes qtype qclass name (len) h2opolo.1538> helios.domini: 3 + A? ucbvax.berkeley.edu. (37)
Amfitrió h2opolo va preguntar al servidor de domini helios per a un registre d'adreça (qtype = A) associat amb el nom ucbvax.berkeley.edu. L'identificador de la consulta era "3". El '+' indica el recursió desitjada S'ha configurat la bandera. La longitud de la consulta era de 37 bytes, sense incloure els encapçalaments de protocol UDP i IP. L'operació de consulta era la normal, Consulta , de manera que s'ha omès el camp op. Si l'op havia estat una altra cosa, s'hauria imprès entre el '3' i el '+'. De la mateixa manera, la classificació era la normal, C_IN , i s'omet. Qualsevol altra classe s'hauria imprès immediatament després de la 'A'. Es comproven algunes anomalies i poden provocar camps addicionals inclosos entre claudàtors: si una consulta conté una resposta, un registre d'autoritat o una secció de registres addicionals, ancount , nscount , o arconte estan impresos com ' n a ',' n n "o" n au 'on n és el recompte adequat. Si algun dels bits de resposta s'estableixen (AA, RA, o rcode) o qualsevol dels bits `must be zero 'es defineixen en bytes dos i tres,` b2 & 3 = x 's'imprimeix, on x és el valor hexadecimal dels bytes de capçalera dos i tres. Respostes del servidor de noms UDP. Les respostes del servidor de noms tenen el format de: src> dst: id op rcode flags a / n / au tipus de dades de tipus (len) helios.domini> h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)helios.domain> h2opolo.1537: 2 NXDomain * 0/1/0 (97)
En el primer exemple, helios respon a l'id de consulta de 3 h2opolo amb tres registres de resposta, tres registres del servidor de noms i set registres addicionals. El primer registre de resposta és tipus A (adreça), i les seves dades són l'adreça d'Internet 128.32.137.3. La mida total de la resposta va ser de 273 bytes, excepte els encapçalaments UDP i IP. S'ha omès el codi op (Query) i de resposta (NoError), igual que la classe (C_IN) del registre A. En el segon exemple, helios respon a la consulta 2 amb un codi de resposta de domini inexistent (NXDomain) sense respostes, un servidor de noms i cap registre d'autoritat. El "*" indica que el resposta autoritzada S'ha establert un bit. Atès que no hi havia cap resposta, no s'imprimia cap tipus, classe ni dades. Altres caràcters d'indicació que poguessin aparèixer són '-' (recursió disponible, RA, no establert) i '|' (missatge truncat, TC, establert). Si la secció "pregunta" no conté exactament una entrada, ' n q "s'imprimeix. Tingueu en compte que les sol · licituds i respostes del servidor de noms tendeixen a ser grans, i per defecte snaplen de 68 bytes pot no capturar prou del paquet per imprimir. Utilitzar el-s marca per augmentar el snaplen si necessiteu investigar seriosament el trànsit del servidor de noms. '-s 128'm'ha funcionat bé. Descodificació de SMB / CIFS. tcpdump inclou una descodificació bastant extensa de SMB / CIFS / NBT per a les dades de UDP / 137, UDP / 138 i TCP / 139. També es fa una descodificació primitiva de dades IPX i NetBEUI SMB. Per defecte, es fa una descodificació bastant mínima, amb una decodificació molt més detallada si s'utilitza -v. Tingueu en compte que amb -v un sol paquet SMB pot ocupar una pàgina o més, així que només utilitzeu -v si realment voleu tots els detalls gory. Si descodifica sessions de SMB que contenen cadenes unicode, és possible que vulgueu establir la variable d'entorn USE_UNICODE a 1. S'hauria d'acceptar un pegat per detectar automàticament cadenes unicode. Per obtenir informació sobre els formats de paquets SMB i el significat de tots els camps, visiteu www
Format de sortida de Tcpdump