這篇文章主要介紹如何使用bpf過濾固定特徵報文前兩篇文章分別介紹了bpf在android中的運用例項,以及bpf規則指令的解析,相信大家對bpf及其規則都有了大致的了解。現在我們來看看如何運用bpf來過濾固定特徵的報文,從這個過程中加深對bpf規則的了解和運用。參考文章: | 4.7-release
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學習之效能分析
效能分析前我們需要先明確目標,有的放矢.明確了目標後,進一步的分析工作就有了上下文,不至於跑偏.一般來說,效能分析的目標是改進使用者最終體驗和降低執行成本.有了目標,最好能將其進行量化 這種量化能夠表明是否已經達到優化的目標,還可以定義離目標的差距有多遠.可測量的指標 終端使用者眼中的效能,是端到端...