2004/12/03
2 Comments
Reading time: 2 – 3 minutes
[ Original ] Segons el man el tcpdump -d diu:
-d Dump the compiled packet-matching code in a human readable form to standard output and stop.
Imagineu-vos que volem veure els paquets que venen de 162.129.225.192 tan del tipus TCP com UDP. L’ordre tcp per fer això seria la que escric a continuació i a més gràcies a l’article citat, us descrit la interpretació del BPF filter (codi que genera el tcpdump per aplicar el que li hem demanat a la comanda).
# tcpdump -d src host centernet.jhuccp.org and \( ip proto \\tcp or \\udp \)
(000) ldh [12]
(001) jeq #0x800 jt 2 jf 8
(002) ld [26]
(003) jeq #0xa281e1c0 jt 4 jf 8
(004) ldb [23]
(005) jeq #0x6 jt 7 jf 6
(006) jeq #0x11 jt 7 jf 8
(007) ret #96
(008) ret #0
Interpretació del codi:
Carreguem els 2 bytes de més pes (big-endian) amb un offset de 12 bytes des de l’inici del paquet. En un paquet de tipus ethernet això correspont al camp de la capçalera on s’indica el tipus i la mida. Un cop tenim aquests bytes els comparem amb 0x0800, que és el codi dels paquets de tipus IPv4. Si és igual saltem a la instrucció 8, que retorna 0 ( reject this packet ).
Seguidament carreguem els 4 bytes de més pes amb un offset de 26bytes des de l’inici del paquet IPv4 en sobre ethernet, aquests 4 bytes corresponen a la IP origien i després els comparem amb 0xa281e1c0 (o sigui, 162.129.225.192). Si no és igual, saltem a la instrucció 8 ( reject this packet).
Ara carreguem 1 byte amb un offset de 23 bytes des de l’origen del paquet, el qual correspon al tipus de transport que conté el paquet IPv4. Si aquest byte és igual a 6 és un paquet TCP, si és igual a 7 saltem a la instrucció 7, la qual retorna 96, que vol dir accepta aquest paquet i agafa els primers 96bytes (accept this packet ang get its first 96 bytes). Si no és igual a 6, fem la mateixa comprobació que no sigui igual a 17, que correspon al codi de transport UDP.
El que he comentat en aquest post, que consti que no ho he deduït jo, sinó que ho he tret de la font citada. Però per la gent que treballa amb xarxes i entorns Linux, com jo, pot ser molt interessant així que aquí queda per si pot ajudar a algú.