Berkeley Packet Filter

De Berkeley Packet Filter of BPF biedt, op sommige Unix-achtige systemen, een rauwe interface naar datalink lagen, waardoor ruwe datalinklaag pakketten worden verzonden en ontvangen. Bovendien, indien de bestuurder de netwerkinterface ondersteunt promiscuous mode, staat de interface in die modus worden gezet, zodat alle pakketten op het netwerk, zelfs die bestemd zijn voor andere gastheren kunnen worden ontvangen.

Bovendien ondersteunt "filtering" pakketten, zodat alleen "interessante" pakketten wordt aan de software met behulp BPF; Dit kan voorkomen dat het kopiëren "oninteressant" pakketten van de kernel van het besturingssysteem om software uitgevoerd in user mode, het verminderen van de CPU eis om pakketten en de buffer ruimte die nodig is om te voorkomen dat te laten vallen pakketten vast te leggen. BPF's filtering mogelijkheden worden geïmplementeerd als tolk voor een machine taal voor de BPF virtuele machine; programma in die taal kan gegevens ophalen van het pakket, worden rekenkundige bewerkingen op de data van het pakket, en de resultaten te vergelijken met constante of met gegevens in het pakket of tests bits in de resultaten aanvaarden of verwerpen het pakket op basis van de resultaten van die proeven. Op sommige platforms, waaronder FreeBSD en WinPcap, just-in-time compilatie wordt gebruikt om virtuele machine-instructies in native code te zetten met het oog op overhead verder te voorkomen.

Kernel-mode tolken voor dat dezelfde virtuele machine taal worden gebruikt in ruwe data link layer mechanismen in andere besturingssystemen, zoals Tru64 Unix, en voor socket filters in Linux en in de WinPcap packet capture-mechanisme.

Een user-mode tolk het is voorzien van de libpcap / WinPcap uitvoering van de pcap application programming interface, zodat bij het vastleggen van pakketten op systemen zonder de kernel-mode ondersteuning voor dat filtermechanisme, kunnen pakketten worden gefilterd in user mode; code met de pcap API zal werken op beide soorten systemen, hoewel, op systemen waar de filtering wordt gedaan in user mode, alle pakketten, met inbegrip van die zullen worden uitgefilterd, worden gekopieerd van de kernel naar gebruiker ruimte. Dat tolk kan ook worden gebruikt bij het lezen van een bestand met pakketten opgenomen met PCAP.

BPF wordt soms gebruikt om te verwijzen alleen naar de filtermechanisme, in plaats van de gehele interface.

BSD kernels implementeren routines zoals en, met wat ze te omwikkelen in macro's, zoals en, die worden opgeroepen door netwerkinterface bestuurders om inkomende en uitgaande pakketten te leveren aan de BPF-mechanisme.

Geschiedenis

De originele papieren werd geschreven door Steven McCanne en Van Jacobson in 1992, terwijl in het Lawrence Berkeley Laboratory

In augustus 2003, SCO Group publiekelijk beweerde Unix-code, die ze beweerde de Linux kernel inbreuk bezitten. Programmeurs snel ontdekte de code in kwestie was het Berkeley Packet Filter. Terwijl duidelijk is dat SCO niet de eigenaar van de BPF code, hebben ze niet verklaren of erkennen de fout, hoewel de juridische actie is de gang die uiteindelijk een antwoord kan forceren.

In 2007, Robert Watson en Christian Peron zero-copy buffer uitbreidingen toegevoegd aan de BPF implementatie in het FreeBSD besturingssysteem, waardoor kernel packet capture in het stuurprogramma interrupt handler om direct schrijven naar gebruiker proces-geheugen om de eis voor twee exemplaren te vermijden voor alle packet-gegevens ontvangen via het BPF apparaat. Terwijl één exemplaar aanwezig bij de ontvangst pad gebruikersprocessen Dit behoudt de onafhankelijkheid van verschillende BPF inrichting consumenten, evenals waardoor het verpakken van headers in het BPF buffer in plaats van het kopiëren voltooid pakketgegevens.

(0)
(0)
Commentaren - 0
Geen commentaar

Voeg een reactie

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Tekens over: 3000
captcha