1. 程式人生 > >為什麼netfilter規則對RAW socket不起作用?

為什麼netfilter規則對RAW socket不起作用?

使用的開源dhcp client程式碼,其中希望將dscp設定為0xC0,但是發現discovery包可以設定成功,但是renew資料包不能,檢視程式碼發現discovery資料包是跑raw socket的,但是renew則是通過udp socket傳送,檢視核心程式碼發現raw socket不通過netfilter規則,具體如下:

kernel/linux/net/packet/af_packet.c 

packet_sendmsg->dev_queue_xmit 直接進入TC,然後傳送。

udp_sendmsg->udp_push_pending_frames->ip_push_pending_frames->ip_local_out 進入netfilter,所以可以被netfilter規則攔截或修改。

做個記錄,謹防忘記,如有出錯,敬請諒解。