[英]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.