簡體   English   中英

如何使用 bpf 返回數據包

[英]How can I return the packets using bpf

我想使用 bpf 過濾數據包。 我研究了bpf手冊並編寫了過濾器。 這是我的過濾器的最后一行:

BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 16),

我加載了ip包長度。 現在我想返回sizeof(struct ether_header)加上上面的長度。

我該如何編寫這個過濾器?

在這里,您將數據包中的一個單詞加載到累加器中:

BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 16),

首先,您必須將以太網標頭的大小(14 字節)添加到累加器:

BPF_STMT(BPF_ALU+BPF_ADD+BPF_K, 14),

然后,您在累加器中返回此值以將數據發送到用戶空間:

BPF_STMT(BPF_RET+BPF_A, 0)

筆記:

如果要提取 IP 總長度,則必須在第一個語句中加載一個半字(IP 總長度僅為 16 位值,因此使用BPF_H而不是BPF_W

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM