hur*_*n77 4 mac ip-address tcpip macos
这个问题让一位朋友在设置交换式互联网连接时有些头疼,该连接在配置文件中填充了零的 IP 地址,如下所示:
192.168.019.254
无论他如何尝试配置 Mac 网络堆栈,它都不起作用。但是 GUI 也没有抱怨错误。
我后来发现在终端中 ping 这些零填充地址显示“无法解析”,而在没有填充零的情况下 ping 同一个地址(192.168.19.254vs. 192.168.019.254)显示“无法到达”,这给这个谜团带来了很多光明。删除无用的零使一切正常。
这是错误还是功能?我以前从未经历过这种奇怪的行为——无论我是使用 GUI 还是 CLI 来配置或测试 IP 内容。
mar*_*k4o 10
从字符串到地址的转换通常由 POSIX 函数执行getaddrinfo()。此函数首先使用 来检查数字 IP 地址inet_addr(),如果失败,它将尝试将该字符串解析为域名。 inet_addr()将带有前导 0 的数字解释为八进制,因此例如010将变为8,并且019将是一个错误(因此将被解析为域名)。同样的行为也发生在 Linux 和 Solaris 上。
如果指定的地址族是 AF_INET 或 AF_UNSPEC,则使用 中指定的 Internet 标准点表示法的地址字符串
inet_addr()有效。
来自inet_addr():
在 IPv4 点分十进制表示法中作为部分提供的所有数字可以是 ISO C 标准中指定的十进制、八进制或十六进制(即,前导 0x 或 0X 表示十六进制;否则,前导“0”表示八进制;否则,该数字被解释为十进制)。
请注意括号中的地址 192.168.8.254:
$ ping 192.168.010.254
PING 192.168.010.254 (192.168.8.254): 56 data bytes
Request timeout for icmp_seq 0
Run Code Online (Sandbox Code Playgroud)