Я использовал netfiler_queue для создания модуля NFQUEUE
для iptables
, который обрабатывает все исходящие пакеты UDP
.Reinjecting измененных пакетов в модуле 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;
}
Модифицированный пакет не получает закачивается в поток. Как бы я ввел модифицированную версию пакета?
Пример кода - это просто пример, рассматривающий его как psuedo-code. – Excl