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