hur*_*n77 4 mac ip-address tcpip macos
这个问题让一位朋友在设置交换式互联网连接时有些头疼,该连接在配置文件中填充了零的 IP 地址,如下所示:
192.168.019.254
无论他如何尝试配置 Mac 网络堆栈,它都不起作用。但是 GUI 也没有抱怨错误。
我后来发现在终端中 ping 这些零填充地址显示“无法解析”,而在没有填充零的情况下 ping 同一个地址(192.168.19.254
vs. 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)
归档时间: |
|
查看次数: |
449 次 |
最近记录: |