这不是一个编程问题,而是一个关于NetBSD的问题。
Linux、FreeBSD 和 OpenBSD 具有相互排斥但相似的接口,允许将连接的本地端绑定到任何本地接口上都不存在的地址。例如建立连接从8.8.8.8。我一直在 NetBSD 中探索,但没有成功,看看是否有相同效果的东西。有没有?
这是(我的)示例代码,供参考:
https://github.com/UlricE/pen/blob/master/server.c
函数 spoof_bind,第 ~250 行。
大大简化的例子来说明这个概念:
Linux:
setsockopt(upfd, SOL_IP, IP_TRANSPARENT, &one, sizeof one);
bind(upfd, (struct sockaddr *)&addr, sizeof addr);
自由BSD:
setsockopt(upfd, IPPROTO_IP, IP_BINDANY, &one, sizeof one);
bind(upfd, (struct sockaddr *)&addr, sizeof addr);
打开BSD:
setsockopt(upfd, SOL_SOCKET, SO_BINDANY, &one, sizeof one);
bind(upfd, (struct sockaddr *)&addr, sizeof addr);
再次强调,这不是一个编程问题,而是一个 NetBSD 上是否存在这样的接口的问题。