【问题标题】:Packet modification with netfilter queue?使用 netfilter 队列修改数据包?
【发布时间】:2015-09-02 01:55:18
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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 头数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多