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

发布于 2024-09-27 18:00:34 字数 417 浏览 2 评论 0原文

我使用 I Listen using a RAW Socket on 5050 将所有来自端口 50 的流量重定向到 5050

iptables -t nat -A POSTROUTING -p udp --dport 50 -j REDIRECT --to-port 5050

,并且我看到从 0.0.0.0:50 到 0.0.0.0:5050 的 IP 数据包。 原始目标地址显然不存在,因为这似乎是从端口 50 到端口 5050 的单独重定向数据包。

如果原始数据包应该发送至 abcd:50,我如何获取该 IP 地址?如何找出消息应该发送到的目标地址,以便我可以将其转发到那里?

我很感激你的帮助。

PS:我不想使用 libipq,因为由于某种原因它不起作用,我希望不要浪费更多时间让它工作。

I have all traffic from port 50 redirected to 5050 using

iptables -t nat -A POSTROUTING -p udp --dport 50 -j REDIRECT --to-port 5050

I listen using a RAW Socket on 5050, and I see IP packets from 0.0.0.0:50 to 0.0.0.0:5050.
The original destination address is obviously not present, since this seems to be a separate redirection packet from port 50 to port 5050.

If the original packet was supposed to go to a.b.c.d:50, how do I get that ip address? How can I figure out the destination address where the message was supposed to be sent to, so that I can forward it there?

I appreciate your help.

P.S.: I do not want to use libipq, since for some reason it didn't work and I wish not to waste more time getting it to work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

睡美人的小仙女 2024-10-04 18:00:34

Linux netfilter 在 中定义了一个名为 SO_ORIGINAL_DST 的套接字选项。

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

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);

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

Linux netfilter defines a socket option called SO_ORIGINAL_DST in <linux/netfilter_ipv4.h>.

First you need to enable port forwarding in your system, using one of these commands:

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

Then you can use this:

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

I cannot find SO_ORIGINAL_DST in any Linux manpage. You may have luck finding formal documentation on the netfilter site.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文