像 libbind 、proxychains 、部分 tsocks 这类基于 LD_PRELOAD 劫持 libc 的办法,不适合 golang 编写的程序
有比较便捷的解决方案吗?
1
lingling47 1 天前 docker 端口映射
|
2
pc10201 OP @lingling47 是客户端程序,不是服务器端的
|
3
smallparking 1 天前 via Android
有代码吗?让 ai 改一下呗
|
4
FabricPath 1 天前
如果你知道你程序的远端 IP ,最简单的就是加路由表:
ip route add 你程序要访问的远端 IP via 你想让你程序用的接口的网关 dev 你想让你程序用的接口 src 你想让你程序用的接口的 IP 如果你内核版本足够高,比如 5.10 往上,那你让 AI 给你写一个 cgroup v2 的 ebpf hook ,去 hook 掉 sockops ,强制给你的进程 bind 到某个接口就行(也许可以,没试过) |
5
v2exgo 1 天前
加路由表,然后 iptables 指定用户 走那个路由表,然后用那个用户 运行你的程序,即可
|
6
ovoo 1 天前 via Android
namespace
|
7
chingyat 1 天前
把接口移到一个 net namespace 里,然后在那个 namespace 里启动你的程序。
|
8
unused 1 天前
简单点就 ip rule 走单独的路由表,规则就看 ip rule 支持的匹配条件,或者 iptables/nftables 打 mark
暴力点就 ptrace syscall 拦截,然后 pidfd_getfd 拿到 socket |
9
yanqiyu 1 天前
1. 写几条规则路由,针对包的 tag 路由到不同网卡
2. 写一个 nft 规则,针对连接的不同 tag 给所有包打 tag ,并且对于某个 cgroups/uid 等等的所有 outbound 连接打连接 tag 。 3. 用 systemd-run/systemd.unit + NFTSet (系统服务)或者手动切换个用户执行相应的命令 |
10
julyclyde 15 小时 54 分钟前
@FabricPath 路由表也可能会影响到其他程序,万一其他程序也和这个服务器有通信呢
@chingyat net namespace 的颗粒度是 interface 吧。但是一个 interface 也可能不止一个 IP 地址哦 |
11
julyclyde 15 小时 53 分钟前
我觉得还是改改程序,别没事找事
你现在这提问,把一切正确答案都排除了,如果不是面试题我都不敢信有这么极端的情况 |
12
tkl 15 小时 8 分钟前
如果你想直接强制 Socket 绑定到某个物理接口(如 eth0 、wlan0 ),而不关心它的 IP 是什么,可以使用 Linux 特有的 setsockopt 选项。
适用场景:当网卡没有固定 IP ,或者在进行底层链路测试时。 注意:通常需要 root 权限(或 CAP_NET_RAW 权限) Go,使用 net.ListenTCP 时指定 LocalAddr,通过 ListenConfig 的 Control 函数调用 setsockopt |
13
pagxir 11 小时 36 分钟前 via Android
|