【发布时间】:2015-05-12 04:35:38
【问题描述】:
我使用netfiler_queue 为iptables 创建了一个NFQUEUE 模块,用于处理所有传出的UDP 数据包。
我想修改所有匹配特定模式的UDP数据包,并将它们重新注入网络。
下面是一些示例代码:
...
static int Callback( nfq_q_handle *myQueue, struct nfgenmsg *msg, nfq_data *pkt, void *cbData) {
uint32_t id = 0;
nfqnl_msg_packet_hdr *header;
if ((header = nfq_get_msg_packet_hdr(pkt))) {
id = ntohl(header->packet_id);
}
// Get the packet payload
unsigned char *pktData;
int len = nfq_get_payload(pkt, &pktData);
// The following is an example.
// In reality, it involves more parsing of the packet payload.
if (len && pktData[40] == 'X') {
// Modify byte 40
pktData[40] = 'Y';
}
// Pass through the (modified) packet.
return nfq_set_verdict(myQueue, id, NF_ACCEPT, 0, NULL);
}
...
int main(){
...
struct nfq_handle nfqHandle;
nfq_create_queue(nfqHandle, 0, &Callback, NULL)
...
return 0;
}
修改后的数据包不会重新注入到流中。我将如何注入数据包的修改版本?
【问题讨论】:
-
示例代码纯属示例,视为伪代码。
标签: c++ linux udp iptables netfilter