BPF高階 使用BPF過濾固定特徵報文

2021-08-20 05:56:54 字數 2088 閱讀 7453

這篇文章主要介紹如何使用bpf過濾固定特徵報文

參考文章: | 4.7-release

前兩篇文章分別介紹了bpf在android中的運用例項,以及bpf規則指令的解析,相信大家對bpf及其規則都有了大致的了解。現在我們來看看如何運用bpf來過濾固定特徵的報文,從這個過程中加深對bpf規則的了解和運用。

ip過濾

/**

* 構建源ip和目標ip過濾的socket filter,並繫結在建立的socket上

* @param socket_fd 已建立的socket fd

* @param src_ip 需要過濾的源ip

* @param dest_ip 需要過濾的目標ip

*/void attachsocketfilter(int socket_fd, uint32_t src_ip, uint32_t dest_ip) ;

if (setsockopt(socket_fd, sol_socket, so_attach_filter, &filter, sizeof(filter)) != 0)

}

傳輸層協議過濾

/**

* 構建傳輸層協議過濾的socket filter,並繫結在建立的socket上

* @param socket_fd 已建立的socket fd

* @param protocol 傳輸層協議 ipproto_udp | ipproto_tcp | ipproto_icmp

*/void attachsocketfilter(int socket_fd, uint32_t protocol) ;

if (setsockopt(socket_fd, sol_socket, so_attach_filter, &filter, sizeof(filter)) != 0)

}

埠過濾

/**

* 構建源埠和目標埠過濾的socket filter,並繫結在建立的socket上

* @param socket_fd 已建立的socket fd

* @param src_port 需要過濾的源埠

* @param dest_port 需要過濾的目標埠

*/void attachsocketfilter(int socket_fd, uint32_t src_port, uint32_t dest_port) ;

if (setsockopt(socket_fd, sol_socket, so_attach_filter, &filter, sizeof(filter)) != 0)

}

資料內容過濾

/**

* 構建資料過濾的socket filter,並繫結在建立的socket上

*@param socket_fd 已建立的socket fd

*@param idents 需要過濾的資料段

*@param ident_offset_in_data 需要過濾的資料在包資料中的偏移

*@param ident_len 需要過濾的資料長度

*/void attachsocketfilter(int socket_fd, uint8_t *idents, uint32_t ident_offset_in_data

, uint_32 ident_len)

// fail or success

filter_code.push_back(bpf_stmt(bpf_ret | bpf_k, 0xffff));

filter_code.push_back(bpf_stmt(bpf_ret | bpf_k, 0));

struct sock_fprog filter = ;

if (setsockopt(socket_fd, sol_socket, so_attach_filter, &filter, sizeof(filter)) != 0)

}

BPF程式型別

跟蹤類程式可以提供系統行為和系統硬體的直接資訊。它們可以訪問特定記憶體區域,從執行程序中提取執行跟蹤資訊。還可以直接訪問為每個特定程序分配的資源,包括檔案描述符 cpu和記憶體。網路類程式可以檢測和控制系統的網路流量。它們可以對網路介面的資料報進行過濾,甚至可以完全拒絕資料報。可以將bpf程式附加到...

BPF技術學習分享

bpf is a highly flexible and efficientvirtual machine like constructin thelinux kernelallowing toexecute bytecodeat varioushook pointsin a safe manner...

BPF學習之效能分析

效能分析前我們需要先明確目標,有的放矢.明確了目標後,進一步的分析工作就有了上下文,不至於跑偏.一般來說,效能分析的目標是改進使用者最終體驗和降低執行成本.有了目標,最好能將其進行量化 這種量化能夠表明是否已經達到優化的目標,還可以定義離目標的差距有多遠.可測量的指標 終端使用者眼中的效能,是端到端...