gpt4 book ai didi

c++ - 重新创建并发送 nfqueue 捕获的数据包

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:29 25 4
gpt4 key购买 nike

我在 nfqueue 的帮助下捕获了一侧的所有数据包,使用 nfq_get_payload “记录”它们(所有数据:ip 信息、下一个协议(protocol)信息等)和在 udp 的帮助下将它们传送到另一侧。我怎样才能在另一边恢复这个数据包,然后像没有 udp 封装一样发送给自己(2 边)?我应该使用一些 nfqueue API 还是必须实现所有协议(protocol)数据包创建(UDP、ICMP、TCP 等)?我应该如何发送这个恢复的数据包?

最佳答案

好的,我成功地重新创建并转发了封装在 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;
}

希望对大家有帮助

关于c++ - 重新创建并发送 nfqueue 捕获的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34027655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com