gpt4 book ai didi

firewall - 如何在 FreeBSD 上使用 pf 获取重定向连接的原始目标 IP?

转载 作者:行者123 更新时间:2023-12-02 01:44:16 26 4
gpt4 key购买 nike

当我使用 -j REDIRECT 规则在 Linux 上重定向与 iptables 的连接时,接收重定向连接的程序可以执行 getsockopt(sockfd, SOL_IP, SO_ORIGINAL_DST, &val, &len); 获取连接的原始、预重定向目标 IP。当我在 FreeBSD 上使用 rdr 规则重定向与 pf 的连接时,如何执行相同的操作?

最佳答案

昨天刚在 MacOS 上解决了这个问题,没有在 FreeBSD 上测试,我认为是类似的。

您需要来自 net/pfvar.h 的 pfioc_natlook 结构。

一般步骤是:

  • pfioc_natlook初始化为pnl
  • 用客户端套接字的IP和端口(saddr,sxport),代理服务器的绑定(bind)IP和端口(daddr,dxport)填充pnl
  • open('/dev/pf'),获取其fd
  • do ioctl(fd, C.DIOCNATLOOK, *pnl),那么pnl的rdxportrdaddr将是连接的原始端口和IP

任何对此问题仍然感兴趣的人可以检查这个要点:https://gist.github.com/gkoyuncu/f8aad43f66815dac7769

我用golang(CGO包装器)做了一个迷你POC程序,它可以在MacOS上运行:https://github.com/monsterxx03/pf_poc

关于firewall - 如何在 FreeBSD 上使用 pf 获取重定向连接的原始目标 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46675715/

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