我有一项服务可以根据需求在 127.0.0.0/8 子网上绑定随机环回 IP(如 127.12.34.56)。
它在 Linux 上运行良好,但在 OS X 上却无法运行。
仅有的解决方案我发现是alias
为了每一个地址ifconfig
。但由于我需要全部 16,777,216 个地址,并且无法修改源代码,事实并非如此。
操作系统:
% nc -l 127.12.34.56 1234 nc: Can't assign requested address
Linux:
$ nc -l 127.12.34.56 1234 # it works
答案1
如果您看到CLOSED, FIN_WAIT_1
状态中有许多 TCP 会话并且其他状态类似,则 TCP 关闭计时器太长。
对于所有这些连接都在使用中(不仅仅是关闭,而且还没有删除)的情况,我引用了
埃弗里特的回答,这表明禁用除此以外的所有环回地址
127.0.0.1
都是由标准决定的。
以下是简短的回答:
sudo ifconfig lo0 alias 127.0.0.* up
必须单独添加每个别名(
sudo ifconfig lo0 alias 127.0.0.2 up
,sudo ifconfig lo0 alias 127.0.0.3 up
)。可以手动添加以进行测试,也可以将该子网中其他 250 个可用号码的子集或完整列表制作成 StartupItems 脚本,该脚本将在启动时自动执行此操作。详细回答:根据 RFC3330,127.0.0.0/8 - 此地址块被指定为 Internet 主机环回地址。由更高级别协议发送到此地址块内任意地址的数据报都应在主机内环回。这通常仅使用 127.0.0.1/32 进行环回,但此地址块内的任何地址都不应出现在任何网络上。
但请注意,打开所有 16,777,216 个地址的操作将非常缓慢。