velikost link layer hlavicky v bpf
Dan Lukes
dan at obluda.cz
Wed Feb 4 23:42:34 CET 2004
Radim Kolar wrote:
>> Mozna nerozumim dostatecne otazce - ale pokud vim jakou hlavicku
>> jsem dostal, tak snad je jasne jakou ma velikost (u hlavicek s konstantni
>
> znam typ linku DLT_* (viz bpf.h) a potrebuju vedet kolik bajtu musim
> preskocit abych se dobral k ip hlavicce.
... za predpokladu, ze ziskany paket vubec nese, na treti vrstve, IP
paket ...
No tak to jsme otazku pochopil spravne. Preskocit musite jednak
hlavicku samotneho BPF (ktera ma delku bh_hdrlen) a pak linkovou hlavicku.
Linkova hlavicka je ruzna podle toho, pres jakou linkovou vrstvu
prisla. Napriklad pro DLT_NULL a DLT_RAW tam takova hlavicka vubec neni
a jeji delka je tedy nula.
Priznam se ale, ze nejsem schopen ted z hlavy vysypat delky linkovych
hlavicek vsech protokolu, ktere bpf zna - uz proto ne, ze delky
nekterych z nich (mam dojem, ze napriklad DLT_PPP) nejsou konstantni.
Budete muset najit popis konkretniho protokolu a z nej delku linkove
hlavicky pro ten konkretni protokol precist. Nektere z nich by se asi
daly najit i v headerech /usr/include/net/*.
Nebo budete muset najit nekoho, kdo to v hlave nosi ...
Ja vam muzu pomoci u Ethernetu - delka linkove hlavicky je (z
net/ethernet.h) ETHER_HDR_LEN (=14); pokud v ni, v polozce ether_type
naleznete hodnotu ETHERTYPE_IP pak byste, skutecne, preskocenim teto
delky mel ziskat prvni byte IP paketu. Pokud v ether_type tato hodnota
neni, pak se pravdepodobne o IP paket nejedna, ledaze je ether_type<1500
a na linkove vrstve se pouziva Ethernet_802.3 encapsulace. V takovem
pripade je typ encapsulovanych dat dan "napevno" konfiguraci cele site a
muze (a nebo nemusi) to byt IP.
U jinych linkovych vrstev budou, pochopitelne, delky i algoritmy jine ...
Doufam, ze takhle to pomuze.
Dan
More information about the Users-l
mailing list