Воссоздать и отправить пакет, захваченный nfqueue

Я собираю все пакеты в одну сторону с помощью nfqueue, «записать» их (все данные: информация о ip, информация о следующем протоколе и т. д.) с nfq_get_payload и доставить их в другую сторону с помощью UDP. Как я могу восстановить этот пакет на другой стороне и затем отправить самому себе (2 сторона), как будто между ними нет udp-инкапсуляции? Должен ли я использовать какой-либо API nfqueue или мне нужно реализовать создание всех протоколов (UDP, ICMP, TCP и т. Д.)? И как мне отправить этот восстановленный пакет?

0

Решение

Хорошо, я успешно воссоздал и отправил мой пакет, инкапсулированный в UDP. После восстановления мне нужно было отправить этот пакет на другой IP, но вы можете использовать оригинальный адрес назначения. Итак, фрагмент кода:

char *full_packet;
int size;
// some actions to get full_packet and size from UDP packet
// assume you recreated this: int size = nfq_get_payload(nfa, &full_packet);int sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
// also optional string needed in my case:
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, "wlan0", strlen("wlan0"));
if (sock == -1) {
perror("socket() failed");
return 1;
}

struct sockaddr_in to;
struct ip *iph = (struct ip *)full_packet;

to.sin_addr.s_addr = inet_addr("192.168.0.107"); // here you can set IP address where you need send this packet
to.sin_family = AF_INET;

int bytes = sendto(sock, full_packet, size, 0, (struct sockaddr*) &to, sizeof(to));
if (bytes == -1) {
perror("send() failed");
return 1;
}

Я надеюсь, что это поможет кому-то

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]