是否可以在它到达libnetfilter_queue中的应用程序之前更改INPUT数据包

时间:2012-10-11 07:28:01

标签: c++ linux network-programming linux-kernel netfilter

我想对包含特定字符串的数据包进行一些更改。我使用iptables匹配字符串来查询数据包。  我试过这个但是数据包一直在循环而没有到达应用程序,只有当新旧字符串完全相同时它才有效:

static int callBack(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,struct nfq_data *nfa, void *data)
{
int len=0,id=0;
char *pktData;
string pktString;
struct nfqnl_msg_packet_hdr *pktHeader;
pktHeader = nfq_get_msg_packet_hdr(nfa);
if (pktHeader) 
{
    id = ntohl(pktHeader->packet_id);
}
len = nfq_get_payload(nfa, &pktData);
if(len) 
{
    int pos;
    pktString.assign(pktData,len);
    pos=pktString.find("oldstring",0);
    if(pos>0)
    {
        pktString.replace(pos,9,"newstring");
        unsigned char* newPktData=(unsigned char*)pktString.c_str();
        len=pktString.size();
        return nfq_set_verdict(qh, id, NF_ACCEPT,len,newPktData);
    }
}   
return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
}

使用的iptable规则是:

   iptables -A INPUT -p tcp -j QUEUE ! -f -m string --to 350 --string "testing" --algo bm

0 个答案:

没有答案