标签: ipv6

IPv6地址范围

本文之后,我有兴趣搜索IPv6地址范围.

在IPv4下,我将能够确定ISP提供的起始和结束IP地址,并使用这些整数值作为范围界限,快速搜索数据库以查看数据库中的任何条目是否落入该范围.

这将如何受到IPv6的影响?ISP仍然会像现在这样在范围内拥有IPv6地址吗?如果将IPv6地址存储为SQL Server数据库中的两个bigint,您将如何有效地搜索这些范围?

ipv4 ipv6

6
推荐指数
1
解决办法
1万
查看次数

用于接受有效主机名,IPv4或IPv6地址的Java正则表达式

任何人都有一个好的(最好是经过测试的)正则表达式,只能使用有效的DNS主机名,IPv4或IPv6地址?

java regex hostname ipv4 ipv6

6
推荐指数
2
解决办法
2万
查看次数

Java应用程序希望同时使用Inet4Address和Inet6Address

我有一个Java应用程序需要通过套接字连接到两台不同的机器上的两个不同的服务器.一台服务器已配置为侦听IPv4连接,而另一台服务器已配置为侦听IPv6连接.

现在,假设"host1"是侦听IPv4连接的服务器的计算机名称,而"host2"是侦听IPv6连接的服务器的计算机名称.我需要Inet4Address为"host1"和Inet6Address"host2"创建一个到每个服务器的套接字连接,如下所示:

Inet4Address inet4 = (Inet4Address)InetAddress.getByName("host1");
InetSocketAddress soc4 = new InetSocketAddress(inet4, 7777);
...

Inet6Address inet6 = (Inet6Address)InetAddress.getByName("host2");
InetSocketAddress soc6 = new InetSocketAddress(inet6, 7777);
...
Run Code Online (Sandbox Code Playgroud)

但是,出于向后兼容性原因,默认情况下,JVM优先使用IPv6地址上的IPv4地址.因此,在上面的代码中,第一次尝试连接到"host1"成功,但第二次尝试连接到"host2"失败,因为InetAddress.getByName("host2")返回an Inet4Address而不是Inet6Address.

我知道我可以将系统属性设置java.net.preferIPv6Addresses为true以优先选择IPv4上的IPv6地址,但这反过来导致第二次尝试连接到"host2"成功,但第一次尝试连接到"host1"失败(!)因为InetAddress.getByName("host1")返回一个Inet6Address代替Inet4Address.

系统属性java.net.preferIPv6Addresses只被读取一次(参见InetAddress line 212-218),因此即使我将其值设置为true后将其值更改为false也不会产生任何影响.

那么在这种情况下我能做些什么呢?这似乎是一个普遍的问题,所以必须有一种方法可以做到这一点.

请注意,我当然可以使用InetAddress.getByAddress(),并提供每台机器的IP地址,而不是明确要回的Inet4AddressInet6Address,但我并不想这样做,除非我真的要.请其他解决方案.

哦,我正在使用java 1.6.0_19以防万一.

谢谢!

java sockets ipv4 ipv6 inetaddress

6
推荐指数
1
解决办法
1万
查看次数

InetAddress.getHostAddress()是否符合ipv6?

InetAddress.getHostAddress()的IPv6兼容的JDK 1.6?

具体而言我正在做

InetAddress.getLocalHost().getHostAddress()
Run Code Online (Sandbox Code Playgroud)

它是否符合ipv6标准?它对ipv4和v6地址都有效吗?

java ipv6

6
推荐指数
2
解决办法
1万
查看次数

由于IPV6需要128位(16字节),为什么在postgres CIDR数据类型中存储为24字节(8.1)和19字节(9.1)?

我正在使用ipv4和ipv6存储在postgres db中.

因为ipv4需要32位(4字节)而ipv6需要128(16byte)位.那么为什么在postgres中CIDR和INET数据类型的存储分别为IPV4和IPV6(8.1)的12字节和24字节.

对于IPV4和IPV6,它分别有7个字节和19个字节.

我不明白为什么它需要超过16字节的额外字节用于存储IPV6和4字节用于IPV4?

http://www.postgresql.org/docs/8.1/static/datatype-net-types.html

http://www.postgresql.org/docs/9.1/interactive/datatype-net-types.html

postgresql ipv4 ipv6 cidr inet

6
推荐指数
1
解决办法
1550
查看次数

将IPv4更改为IPv6字符串

Sander Steffann我之前的一个问题中提到过:

0000:0000:0000:0000:0000:0000:192.168.0.1这样的地址写为0000:0000:0000:0000:0000:0000:c0a8:0001,这是完全相同的地址,但是以十六进制表示法.

如何在PHP中发现,如果一个地址是这样写的:比如::0000:192.168.0.10000::0000:192.168.0.10000:0000:0000:0000:0000:0000:192.168.0.1等?是否足以检查基于IP的字符串是否具有"." 和':'?

如何将其更改为完整字符串0000:0000:0000:0000:0000:0000:c0a8:0001

我是正确的,将此更改为IPv4将是这样的:

<?php 
$strIP = '0000:0000:0000:0000:0000:0000:192.168.0.1';

$strResult = substr($strIP, strrpos($strIP, ':'));

echo $strResult; //192.168.0.1 ?
?>
Run Code Online (Sandbox Code Playgroud)

...或者是正确的IP字符串表示比这个代码片段更复杂吗?

php string transform ipv6

6
推荐指数
1
解决办法
5960
查看次数

IPv6地址分配

我刚开始使用IPv6,所以在过去的几天里我做了很多阅读.不幸的是,我的一些问题在我的研究中没有得到解答.

我的目标是跟踪分配的地址以及分配的接口.根据我的阅读,接口可以通过几种方式获取IPv6地址,我在下面的子部分中列出了这些方法.我已经突出了我到目前为止所发现的内容,并在这些部分提出了一些问题.如果有人可以对我学到的内容进行任何更正,或者对问题有答案,请这样做.如果有人知道某个地方我可以找到更多信息,我不介意自己研究它.

编辑:我发现前缀委派实际上并没有导致地址分配.DHCP服务器使用它来获取要从其他DHCP服务器使用的前缀.


获取IPv6地址的方法有:

  1. StateLess地址自动配置(SLAAC)
  2. 有状态DHCPv6

SLAAC

SLAAC用于小型网络,为接口生成IPv6地址.它需要(几乎)没有配置,基本上如下工作:

  1. 当接口联机时,客户端将使用其接口ID地址和链接本地前缀(FE80::/10)生成链接本地IPv6地址.
  2. 要验证此地址是唯一的,NS会向该地址发送Neighbor Solicitation()消息.如果有回复,则该地址正在使用中且无法使用.自动配置中止,配置应手动进行. 问题1a:这里真的没有倒退吗?
  3. 假设在超时时段结束时没有收到回复,则假定该地址是唯一的,并将其指定为接口的链路本地地址.

    现在,该节点已连接到此链接上的所有其他节点

  4. 节点等待接收Router Advertisement(RA),或者向RS所有路由器的多播组发送Router Solicitation()消息.当RS路由器收到a时,它会响应RA.在RA将包含一个前缀.

  5. 该节点将生成带有前缀及其接口ID的全球单播地址.
  6. 与创建链接本地地址时类似,节点将向该地址发送消息以确定它是否是唯一的. 问题2:这也是一条NS消息吗? 如果有回复,则该地址已被使用,地址分配必须手动进行. 问题1b:同样,有没有自动恢复方法?
  7. 假设在超时内没有回复,则将该地址指定为接口的全局IPv6地址.

问题3:接口可以有多个地址.实际上,在上述过程结束时,单个接口将具有2个地址 - 链路本地地址和全球单播地址.是否可以使用SLAAC获取此接口的其他地址?或者必须使用其他方法(例如DHCPv6)?

有状态DHCPv6

节点可以使用上面的步骤1-3获得链路本地地址.我相信这是可选的,它可以简单地使用::/128(未指定)作为DHCP请求中的源地址,直到它被分配一个地址.

有两种获取地址的方法 - 正常和快速提交.正常是一个4消息交换(Solicit,Advertise,Request,Reply),和快速是2消息交换(Solicit,Reply).当客户端Rapid-CommitSolicit消息中使用选项请求快速提交时.它与Normal基本相同,因为它对我的使用没有任何影响,我现在暂时忽略它.

此外,消息可能通过中继进行代理.从中继发送到服务器的RELAY_FORW消息是消息,从服务器发送到中继的RELAY_REPL消息是消息.客户端和服务器之间的实际对话框完全封装在一个OPTION_RELAY_MSG选项中.对于以下内容,我只处理非中继消息.如果消息被中继,则很容易对原始消息进行说明,并且以下内容仍然成立.

地址分配如下:

  1. 客户端向Solicit"所有DHCP服务器和中继"多播地址发送消息.此消息的目的是发现本地链路上的DHCP服务器的标识.
  2. DHCP服务器响应Advertise本地多播地址的消息. …

dhcp ipv6

6
推荐指数
1
解决办法
2896
查看次数

使用IPv6地址和javascript从网页获取HTML

我想知道是否有办法使用JavaScript从IPv6地址获取httpGet请求.

我在家用计算机上使用cooja建立了一个虚拟网状网络,每个节点都有一个IPv6地址,aaaa::0212:740x:000x:0x0x其中x是节点号.

使用普通的jquery请求时:

$.ajax({ url: url,
 success: function(data) 
 {console.log(data); } 
});
Run Code Online (Sandbox Code Playgroud)

一个网站,例如http://www.random.org/intergers/?etc,将获得一个随机数并记录下来,但是当输入一个ipv6地址,即[aaaa :: 0212:740x:000x:0x0x]时并没有给我任何回报,没有错误,没有反应,没有.

任何人都可以对这个问题有所了解吗?

javascript http ipv6

6
推荐指数
1
解决办法
933
查看次数

是否启用了InAppBrowser IPv6?

我搜索了几个foruns,如果InAppBrowser启用了IPv6,我没有找到任何具体信息.

当我使用:refWeb = cordova.InAppBrowser.open(url,'_ blank','location = yes','clearcache = yes','clearsessioncache = yes');

使用url = http://192.168.1.210,它正常工作,但如果url = http:// [2001 :: 123:1:2:3]则会显示一个错误的网页:ERR_NAME_NOT_RESOLVED

如果我在同一设备上使用本机浏览器(如Chrome),则这些网址按预期工作.

请帮忙.

ipv6 cordova inappbrowser

6
推荐指数
0
解决办法
501
查看次数

支持仅IPv6网络应该注意哪些事项?

关于苹果关于iPv6 -only网络的公告,我有一些疑问.

https://developer.apple.com/news/?id=05042016a

1)如果我的应用程序已经上传而没有支持ipv6,会发生什么?

2)我正在使用旧的Reachability类,它会创建任何问题吗?

3)我正在使用使用NSURLConnection的ASIHTTP库.

4)如果我的代码中没有使用任何静态iP,但我的服务器支持iPV4,那么它会造成任何麻烦吗?

谢谢

ipv6 reachability ios

6
推荐指数
1
解决办法
297
查看次数