我已经使用netfiler_queue为iptables创建了一个NFQUEUE模块,该模块处理所有出站的UDP数据包。在netfilter模块中重新注入修改的数据包
我想修改所有匹配特定模式的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;
}
修改的数据包并没有得到重新注入流。我将如何注入数据包的修改版本?
2015-05-09
Excl
+0
示例代码纯粹是一个示例,将其视为伪代码。 –