cURL 为什么会把十进制数字转为 IP?

2021-04-16 19:07:17 +08:00
 zhoudaiyu

curl 8000 会转换为 curl 0.0.31.64 ,后面的 IP 就是把 8000 转为二进制高位补 0,然后再从高位到低位 8 个数字一切割转为十进制。不太明白 curl 为啥这么设计?

2926 次点击
所在节点    cURL
12 条回复
phpfpm
2021-04-16 19:08:10 +08:00
ip 就是这样啊。。。。
xiri
2021-04-16 19:10:14 +08:00
不止 curl,ping 也是一样的
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 只是便于人类阅读使用的格式而已
Tink
2021-04-16 19:32:52 +08:00
没毛病呀
iseki
2021-04-16 19:39:35 +08:00
小时候还看有教程教过把 IP 转写成十进制,迷惑不懂的人的小把戏(
crclz
2021-04-16 19:47:35 +08:00
《计算机网络》谢希仁
weyou
2021-04-16 20:03:25 +08:00
ip 地址在计算机内部本来就是用 32bit 的整数来表达的啊。不止 curl,ping,很多网络工具都这样,最常见的比如浏览器。其实这不是这些网络工具的功能,其根本原因是 socket 库里的 inet_aton 函数就支持这个特性。也就是你自己写个需要用到 ip 地址的工具,也会天然支持这个特性。
nightwitch
2021-04-16 21:18:00 +08:00
因为 ip 地址的合法表示就是一个 uint32.
表示成你熟悉的 xxx.xxx.xxx.xxx 只是为了方便人类好读。
ericls
2021-04-16 21:27:57 +08:00
用户输入的永远是 string
ch2
2021-04-16 21:31:54 +08:00
ip 地址本来就是个数字,点分十进制是转化的结果
TyteKa
2021-04-17 02:06:25 +08:00
是 libc 做的
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……
这里面坑是真多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/771159

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX