2

iptables キューを使用していくつかのパケットをキャプチャし、それらを libnetfilter_queue モジュールで分析しています。パケットにいくつかの変更を加えたいのですが、1 文字を変更しても、チェックサムのチェック中にパケットが拒否される可能性があります! 拒否されないようにする方法はありますか。

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

1 に答える 1

5

拒否を防ぐためにチェックサムを更新する必要があるものを変更した場合、パケットは破損していると見なされます...
編集: IP パケットで作業していると仮定すると、上記は IP ヘッダーの変更にのみ適用されます。ペイロードではなくヘッダーが IP チェックサムによって「保護」されます。

于 2012-10-12T12:39:06.847 に答える