正如我们都知道的IPv4地址localhost
是127.0.0.1
(环回地址)。什么是IPv6地址localhost
和0.0.0.0
我需要阻止一些广告主机。
Answers:
正如我们都知道IPv4地址
localhost
就是127.0.0.1
(环回地址)。
实际上,其中的任何IPv4地址127.0.0.0/8
都是回送地址。
在IPv6中,环回范围的直接模拟为::1/128
。因此::1
(长格式0:0:0:0:0:0:0:1
)是唯一的IPv6回送地址。
虽然主机名localhost
通常可以解析为127.0.0.1
或::1
,但我看到有人将其绑定到不是环回地址的IP地址的情况。这有点疯狂……但是有时候人们会这么做。
我说“这太疯狂了”,因为这样做很容易破坏应用程序的假设。例如,应用程序可能尝试在回送IP上进行反向查找,但未获得预期的结果。在最坏的情况下,应用程序可能最终会偶然地通过不安全的网络发送敏感流量……尽管您可能还需要犯其他错误才能“实现”。
阻止0.0.0.0
是没有意义的。在IPv4中,它永远不会被路由。IPv6中的等效项是::
地址(长格式0:0:0:0:0:0:0:0
)...,它也从未路由。
该0.0.0.0
和::
地址被保留,表示“任何地址”。因此,例如,提供Web服务的程序可以绑定到0.0.0.0
端口80,以通过主机的任何IPv4地址接受HTTP连接。这些地址不能用作IP数据包的源地址或目标地址。
最后,一些评论被询问::/128
对::/0
对::
。
这有什么区别?
严格来说,前两个是CIDR表示法而不是IPv6地址。他们实际上是在指定IP地址范围。CIDR由IP地址和一个附加数字组成,该数字指定网络掩码中的位数。两者一起指定了地址范围;也就是说,通过忽略从给定地址中屏蔽出来的位形成的地址集。
所以:
::
表示仅IPv6地址 0:0:0:0:0:0:0:0
::/128
表示0:0:0:0:0:0:0:0
具有由128位组成的网络掩码。这样就给出了一个网络范围,其中仅包含一个地址。::/0
表示0:0:0:0:0:0:0:0
具有由0位组成的网络掩码。这样就得出了一个包含2 128个地址的网络范围。即它是整个IPv6地址空间!有关更多信息,请阅读Wikipedia页面上的IPv4和IPv6地址以及CIDR表示法:
::1
是IPv6中的环回地址。
在网址中,使用方括号[]
:
http://[::1]/
http://[::1]:80/
RFC 2732 – URL中的文字IPv6地址格式定义了将IPv6文字括在方括号中以用于URL的定义。
ipv6本地主机是::1
。未指定的地址是::
。这在RFC 4291第2.5节中定义。
仅出于完整性考虑:存在IPv4映射的IPv6地址,您可以在其中将IPv4地址嵌入IPv6地址(可能并非每个IPv6设备都支持)。
示例:我在计算机上运行服务器,可以通过访问该服务器http://127.0.0.1:19983/solr
。如果我通过IPv4映射的IPv6地址访问它,那么我将通过http://[::ffff:127.0.0.1]:19983/solr
(将其转换为http://[::ffff:7f00:1]:19983/solr
)访问它
用于 /etc/hosts
由于文件是一种简单的广告拦截技术,会导致域无法解析,因此0.0.0.0地址已被广泛使用,因为它不是有效地址或可路由的地址,它会导致请求立即失败,甚至不进行尝试。这与在该位置使用127.0.0.1相比,该位置将至少检查您自己的计算机是否在“连接被拒绝”失败之前正在侦听请求的端口80。该域的hosts文件中使用的那些地址中的任何一个都将阻止通过实际网络尝试任何请求,但是0.0.0.0备受青睐,因为由于上述原因,它更“理想”。“ 127”个IP将尝试访问您自己的计算机,而其他任何IP都会导致将请求发送到路由器以尝试对其进行路由,但是对于0.0.0.0而言,
话虽如此,在主机文件中列出任何IP即可阻止该域就足够了,并且您将不需要或也希望在主机文件中放置一个ipv6地址,除非-可能是-完全启用了ipv4。但是,如果真是如此,我会感到非常惊讶。而且,尽管如此,我认为当您未启用ipv4时,将主机显示在/ etc / hosts中且ipv4地址错误的主机仍会为您提供寻找失败的结果,而不是查找真实的DNS,例如adserver-example.com,然后获取v4或v6 IP。