我试图在浏览器中防止冗余的WebSocket连接,只允许从潜在的恶意源接收IPv4和IPv6地址,方法是修改并使用该regex进行验证,然后在连接之前测试是否相等。
但是,我没有使用IPv6的经验,也不知道如何测试是否相等,特别是在IPv4到IPv6映射地址的特殊情况下。
如何比较所有类型的IP地址是否相等?
发布于 2014-06-14 13:07:23
IPv4和IPv6是独立的协议,所以IPv4和IPv6地址之间的映射通常是不可能的。然而,有些转换机制将(部分) IPv4地址放置在IPv6地址中。不过,大多数IPv6用户不会使用这些机制,因此通常根本不可能进行映射。
我会尽我所能列出他们中的很多人。如果我忘了一些相关的东西,请留言!
IPv6 4兼容的IPv6地址
在RFC 4291中定义。引用RFC的话:
定义了“IPv6 4兼容的IPv6地址”以协助IPv6转换。..。现在不再推荐“IPv6 4兼容的IPv6地址”,因为当前的IPv6转换机制不再使用这些地址。
它们看起来像::192.0.2.123 (最后32位写入IPv4地址)或::c000:027b (最后32位像往常一样用十六进制编写)。
IPv6 4-映射的IPv6地址
也在RFC 4291中定义。当软件在内部使用IPv6时,这些地址在软件中使用,但实际上是使用IPv4协议(参见用于IPv6和IPv4的套接字监听器)。它们看起来像::ffff:192.0.2.123 (最后32位写入IPv4地址)或::ffff:c000:027b (最后32位像往常一样用十六进制编写)。它们从未在实际的数据包中使用过,而是一种软件结构,可以使软件更容易同时支持IPv4和IPv6。
6至4地址
在RFC 3056中定义。6to4是一种机制,其中每个公共IPv4地址自动有一个IPv6 /48网络。例如:如果您的家庭路由器有公共IPv4地址192.0.2.123,那么您可以在家中使用IPv6前缀2002:c000:027b::/48 (固定16位前缀2002: + IPv4地址的32位= 48位)。因此,从6到4,您可以再次提取IPv4地址。然后对IPv6流量进行隧道化。当与另一个6-4站点交谈时,您的路由器将直接将流量隧道到另一个站点的IPv4地址。当与“正常”IPv6互联网交谈时,您的路由器将隧道到一个公共的6到4中继。因为这些继电器是由志愿者提供的,质量是不可预测的,所以它可能工作得很好,也可能不好。
第六次
在RFC 5969中定义。6rd就像ISP提供的6to4版本。由于它是由ISP管理的,因此可以保证可靠性。第6rd部署使用的IPv6地址由ISP确定,因此它们与正常的其他IPv6地址没有区别。ISP将部分IPv4地址映射到IPv6地址的一部分,但您必须知道所使用的映射参数( IPv4地址的哪些位被复制到IPv6地址的哪些位,以及IPv4地址的非映射位),才能从IPv6地址确定IPv4地址。
例如,6rd部署可以将IPv4地址192.0.2.123映射到IPv6前缀2001:db8:6d02:7b00::/56。在本例中,我使用了IPv6前缀2001:db8:6d00::/40,然后追加了IPv6地址的最后16位以获得/56前缀。
Teredo
在RFC 4380中定义。Teredo是一种协议,用于向NAT后面的主机获取公共IPv6地址。Teredo IPv6地址包含IPv4地址的模糊版本。Teredo地址可以被识别,因为地址的前32位总是2001:0000:。Teredo地址的最后32位包含IPv4地址,但所有位都翻转了。因此,拥有外部IPv4地址192.0.2.123的NAT设备后面的主机将获得Teredo地址,其中最后32位是:3fff:fd84。
https://stackoverflow.com/questions/24214226
复制相似问题