gpt4 book ai didi

C++ iptables重定向形成单独的数据包

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:31 26 4
gpt4 key购买 nike

我使用

将所有来自端口 50 的流量重定向到 5050
iptables -t nat -A POSTROUTING -p udp --dport 50 -j REDIRECT --to-port 5050

我在 5050 上使用 RAW Socket 监听,我看到从 0.0.0.0:50 到 0.0.0.0:5050 的 IP 数据包。原始目标地址显然不存在,因为这似乎是一个从端口 50 到端口 5050 的单独重定向数据包。

如果原始数据包应该发送到 a.b.c.d:50,我如何获得该 IP 地址?我怎样才能找出消息应该发送到的目标地址,以便我可以将它转发到那里?

感谢您的帮助。

P.S.:我不想使用 libipq,因为出于某种原因它没有工作,我不希望浪费更多时间让它工作。

最佳答案

Linux netfilter 定义了一个名为SO_ORIGINAL_DST 的套接字选项在<linux/netfilter_ipv4.h> .

首先,您需要使用以下命令之一在您的系统中启用端口转发:

sysctl net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward

然后你可以使用这个:

struct sockaddr_in addr;
socklen_t addr_sz = sizeof(addr);
getsockopt(fd, IPPROTO_IP, SO_ORIGINAL_DST, &addr, &addr_sz);

我找不到 SO_ORIGINAL_DST在任何 Linux 联机帮助页中。您可能会在 netfilter 站点上找到正式文档。

关于C++ iptables重定向形成单独的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3951043/

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