1
skydiver OP 每次都要手动把网上down下来的hosts里面的127.0.0.1全部替换成0.0.0.0。。。太麻烦了。。。
|
2
vking 2012-09-17 23:51:50 +08:00
批量替換127為0衹需要一秒钟。
|
4
fanzeyi 2012-09-18 00:10:02 +08:00
=_= 其实我想问
这两个不一样么.. 我这里 0.0.0.0 == 127.0.0.1 的…… |
6
paloalto 2012-09-18 00:35:20 +08:00
|
7
raptium 2012-09-18 00:38:16 +08:00
@paloalto bind 的時候 0.0.0.0 是指本機所有 interface
連接的時候 0.0.0.0 就不是指本機了 |
8
skydiver OP @paloalto 这个是不一样的。监听0.0.0.0:8080表示在所有可用接口上监听8080端口。实际本地地址还是127.0.0.1:8080
|
9
Air_Mu 2012-09-18 01:03:08 +08:00
可能会有什么问题?比如什么?
|
10
bulldozer 2012-09-18 09:35:38 +08:00
0.0.0.0作为地址,不是一个合法地址。仅仅是屏蔽web,一般不会有问题,浏览器会辨析这个问题。但对于某些第三方程序就可能出现一些意外的错误。 尤其0.0.0.0在不同场合表示不同的含义,完全取决于程序作者的处理方式。
127.0.0.1则不同,它是一个合法地址,而且只要TCPIP协议栈生效,这个地址一般说都存在且无歧义,正常情况下不会导致第三方程序出现意外错误,顶多是端口连接超时。 |
11
bulldozer 2012-09-18 09:38:47 +08:00
一个简单的例子,比如 有人ping www.sina.com.cn,如果解析为0.0.0.0,一些特殊ping实现,会理解为ping所在网段的全部地址。
|
12
bulldozer 2012-09-18 09:46:15 +08:00
在一个大型局域网环境中,应尽量避免使用0.0.0.0作为解析地址,很多程序员在实际中会把这个地址作为广播地址,当碰到这个地址,程序可能发送一个大的广播出去。有可能会引起一些意想不到的事情。
|
13
dingstyle 2012-09-18 10:15:49 +08:00
根据RFC1122,Section 3.1.2.3:
We now summarize the important special cases for Class A, B, and C IP addresses, using the following notation for an IP address: { <Network-number>, <Host-number> } or { <Network-number>, <Subnet-number>, <Host-number> } ... (a) { 0, 0 } This host on this network. MUST NOT be sent, except as a source address as part of an initialization procedure by which the host learns its own IP address. 简单来说,0.0.0.0只在host初始化时可用作源地址,但绝不是一个合法的接收地址。 来源:http://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1 |
14
skydiver OP @bulldozer 0.0.0.0 is a non-routable meta-address used to designate an invalid, unknown or non applicable target.
http://en.wikipedia.org/wiki/0.0.0.0 @dingstyle 因为0.0.0.0不是一个合法的接收地址,所以发送到这个地址的包 MUST NOT be sent。所以0.0.0.0 比较适合作为屏蔽的用途~ |
15
bulldozer 2012-09-18 10:32:59 +08:00
@skydiver
你说的是tcpip标准或rfc中的定义。而0.0.0.0(包括x.x.0.0等)在实际中应用,尤其在一些相对较老应用系统中,歧义非常大。 只要做过网络编程,就知道对这种情况,程序员的处理方法不同的,很多程序员并不是碰到0.0.0.0就当异常抛出,而是作为一个边界情况来进行处理(如广播) 也就是说switch和路由不会处理0.0.0.0,但具体程序碰到0.0.0.0,如ping,程序员有可能把他处理为ping 1.0.0.0,1.0.0.1这样实际地址循环进行下去,而这种情况就是“合法化”了。这个是个非常简化的例子,在较老版本sun unix机器上,ping整个网段是可以做到的。 |
16
bulldozer 2012-09-18 10:47:57 +08:00
我们可以假设,一个监控程序,弹出一个对话框,有一个文本框,上面写着“请输入需要监控的机器的网址,0.0.0.0 表示局域网所有机器”,而你本想监控www.sina.com.cn这台机器,但www.sina.com.cn被解析为0.0.0.0,这个程序会如何操作?非常可能,它会去监控这个网络内部所有可达地址。
又或者,一个程序,需要给某些地址发送消息,而程序员默认0.0.0.0缺省表示所有机器,这个程序会如何处理发往www.sina.com.cn这个误解析的地址? 127.0.0.1是没有歧义的,它就是本机的回环地址。 |
17
bulldozer 2012-09-18 10:55:29 +08:00
192.169.0.0,通常用来表示一个网段内任意主机。而0.0.0.0通常表示任意主机,这实际上是TCPIP的一个事实标准。0.0.0.0不是合法地址,但往往拿来作为一个泛指所有合法地址的通配符。
比如缺省路由,0.0.0.0就是用来泛指任意主机。 |
18
skydiver OP @bulldozer 多谢指点。我觉得这个确实在某些复杂度情况下会导致问题,但是一般修改hosts只是为了屏蔽http访问,使用0.0.0.0应该是没有问题的吧
|
19
chainkhoo 2012-09-18 19:15:53 +08:00
表示一直在用HostX 简单又省心 批量设置
|
20
sophy 2012-09-18 20:11:40 +08:00
0000不好看
|
21
Tang 2012-09-18 20:27:06 +08:00
你可以用0.0.0.1或者::1哦
|
23
regent 2012-09-19 13:27:32 +08:00
这个东西还这么复杂啊……
|
24
likexian 2012-09-19 13:32:07 +08:00
curl -v 0.0.0.0
* About to connect() to 0.0.0.0 port 80 (#0) * Trying 0.0.0.0... connected * Connected to 0.0.0.0 (0.0.0.0) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: 0.0.0.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 19 Sep 2012 05:31:27 GMT < Server: Apache/2.2.14 (Ubuntu) < Last-Modified: Thu, 20 Oct 2011 02:19:35 GMT < ETag: "1214f3-0-4afb1967808ed" < Accept-Ranges: bytes < Content-Length: 0 < Vary: Accept-Encoding < Content-Type: text/html < * Connection #0 to host 0.0.0.0 left intact * Closing connection #0 |