如果我使用libnetfilter_queue对其进行更改,networking数据包将被拒绝

我使用iptables队列捕获一些数据包,并在libnetfilter_queue模块中分析它们,现在我希望对数据包进行一些更改,但是即使更改单个字符,数据包也可能在检查校验和时被拒绝! 有没有办法阻止它被拒绝:

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); } 

如果你改变任何你必须更新校验和以防止拒绝,否则数据包将被认为是损坏的…
编辑:假设您正在处理IP数据包,上述内容仅适用于IP标头的更改,因为只有标头而不是有效负载受IP校验和的保护。