我在 nfqueue 的帮助下捕获所有数据包,并使用 nfq_get_payload “记录”它们(所有数据:ip info,下一个协议信息等)在udp的帮助下将它们带到另一边。如何在另一侧恢复此数据包然后发送给自己(2侧),就像之间没有udp封装一样?我应该使用一些nfqueue API还是我必须实现所有协议数据包创建(UDP,ICMP,TCP等)?我应该如何发送这个恢复的数据包?
答案 0 :(得分:2)
好的,我成功地重新创建并发送了封装在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;
}
我希望这会对某人有所帮助