我的站点

一个系统软件工程师的随手涂鸦

Tag: BPF

*NIX & Hacking —— 第10期

做一本我感兴趣的杂志,就这么简单!

Git

Some of git internals

Kernel

A History of Linux Kernel Module Signing
Linux Kernel Hacking Talk

KVM

Using the KVM API

Tracing

Linux Networking, Tracing and IO Visor, a New Systems Performance Tool for a Distributed World

Unix

Syscall table reference tool for several arch(Linux x86/64,ARM,IA64,Winx86/64,OSX BSD & more)

Vim

A vim Tutorial and Primer

X86

A Primer on Disassembling Function Calls and Understanding Stack Frames in x86
Advanced x86: Introduction to BIOS & SMM

Easter Egg

Awesome Open Source Documents
Closing a door

BPF(BSD Packet Filter)简介

BPF(BSD Packet Filter)是一种抓取并过滤网络数据包(capture and filter packet)的内核结构(kernel architecture)。BPF包含2个重要的组成部分:网络分流器(network tap)和包过滤器(packet filter)。网络分流器负责从网络驱动拷贝数据包,而包过滤器则过滤掉不符合条件的数据包,只把符合需求的数据包上报给应用程序。下图摘自UNP

BPF

当数据包到达网卡时,正常情况下,数据链路层的驱动程序会把包转给协议栈。但当有BPF监听网卡时,驱动程序会首先把包发给BPFBPF会把包发给不同程序的包过滤器,再由过滤器决定哪些包并且包里的哪些内容应该保存下来。对于符合条件的数据包,BPF会把数据拷贝到和包过滤器对应的缓存(buffer)。然后驱动程序继续执行。

在用tcpdump命令过滤数据包时:

tcpdump -p -ni eth0 -d "ip and udp"

实际就用到了BPF

Powered by WordPress & Theme by Anders Norén