curl 8000 会转换为 curl 0.0.31.64 ,后面的 IP 就是把 8000 转为二进制高位补 0,然后再从高位到低位 8 个数字一切割转为十进制。不太明白 curl 为啥这么设计?
学到了学到了,谢谢大家
1
phpfpm 2021-04-16 19:08:10 +08:00
ip 就是这样啊。。。。
|
2
xiri 2021-04-16 19:10:14 +08:00
不止 curl,ping 也是一样的
|
3
0ZXYDDu796nVCFxq 2021-04-16 19:21:47 +08:00
IPv4 地址是 4 个字节
可以转换成 integer 的表达形式,取值是 [0, 4294967295], [2^0 - 1, 2^32 - 1] 在网络数据包中都是用 4 个字节来存储 1.1.1.1 只是便于人类阅读使用的格式而已 |
4
Tink 2021-04-16 19:32:52 +08:00 via Android
没毛病呀
|
5
iseki 2021-04-16 19:39:35 +08:00 via Android
小时候还看有教程教过把 IP 转写成十进制,迷惑不懂的人的小把戏(
|
6
crclz 2021-04-16 19:47:35 +08:00
《计算机网络》谢希仁
|
7
weyou 2021-04-16 20:03:25 +08:00 via Android
ip 地址在计算机内部本来就是用 32bit 的整数来表达的啊。不止 curl,ping,很多网络工具都这样,最常见的比如浏览器。其实这不是这些网络工具的功能,其根本原因是 socket 库里的 inet_aton 函数就支持这个特性。也就是你自己写个需要用到 ip 地址的工具,也会天然支持这个特性。
|
8
nightwitch 2021-04-16 21:18:00 +08:00
因为 ip 地址的合法表示就是一个 uint32.
表示成你熟悉的 xxx.xxx.xxx.xxx 只是为了方便人类好读。 |
9
ericls 2021-04-16 21:27:57 +08:00 via iPhone
用户输入的永远是 string
|
10
ch2 2021-04-16 21:31:54 +08:00
ip 地址本来就是个数字,点分十进制是转化的结果
|
11
TyteKa 2021-04-17 02:06:25 +08:00
是 libc 做的
|
12
krixaar 2021-04-17 15:41:35 +08:00
当年 COD:MW3 刚出的时候,想在寝室打 Spec OPs 局域网联机,等 teknogods 做补丁,然后他们出的补丁为了好看,IP 地址分成四段还补零,然后寝室就有特定的人连不上,最后发现至少在 Win 上,IP 地址前头带零的当作八进制( ping 127.0.0.9 是可行的,ping 127.000.000.009 是不可行的,因为八进制没有 9 ),还专门跑他们网站上去提了 bug……
这里面坑是真多。 |