使用netfilter队列修改数据包?

时间:2011-07-19 15:07:26

标签: packet packet-capture packets netfilter packet-mangling

我目前正在尝试在用户空间中使用带有libnetfilter_queue的代码来修改在iptables中的NFQUEUE目标中排队的数据包。但是我不知道如何去做。

我已将其设置为使用NFQNL_COPY_PACKET复制数据包,如果我要修改复制的数据包,是否会通过函数nfq_set_verdict()自动发送回内核?

此外,我之前曾使用从pcap文件中提取数据包,但是我注意到我从nfq_get_payload()获取的数据似乎非常不同。有谁知道如何剖析数据?

1 个答案:

答案 0 :(得分:1)

如果在nfq_set_verdict中你将判决设置为NF_REPEAT,那么数据包(已修改与否)将再次进入iptables mangle OUTPUT链,nat OUTPUT chane,过滤OUTPUT链等(换句话说,它将表现为某些应用已发送它)

要提取数据,请在NFQUEUE处理程序回调中使用此样板:

int queueHandle_input ( struct nfq_q_handle *qh, struct nfgenmsg *nfmsg, struct nfq_data *nfad, void *mdata ){

struct iphdr *ip;
int id;
struct nfqnl_msg_packet_hdr *ph = nfq_get_msg_packet_hdr ( ( struct nfq_data * ) nfad );
if ( ph ) id = ntohl ( ph->packet_id );
nfq_get_payload ( ( struct nfq_data * ) nfad, (char**)&ip );

现在ip包含网络字节顺序的IP头数据。