patricia trie是众所周知的推荐数据结构,用于存储IPv4分配/分配和执行查找.
这对IPv6地址也是如此吗?只是更深/更高的trie来容纳额外的96位?特里仍然是帕特里夏,还是一个不同的基数特里?
尝试了所有可能的方法无法找到解决此问题的方法.我有一台带有两个接口eth0和eth2的机器.我想要所有ff38:40:2001:dead:beef:cafe ::/96包继续使用eth2.我尝试了以下所有,但是当我做ping6 ff38:40:2001:dead:beef:cafe :: 1数据包总是在eth0上.我尝试过但没有工作的东西(例如,数据包仍然在eth0上发布).
$> route add --inet6 ff38:40:2001:dead:beef:cafe::/96 gw 2003::100 dev eth2
$> route add --inet6 ff38:40:2001:dead:beef:cafe::/96 dev eth2
$> route add --inet6 ff38:40:2001:dead:beef:cafe::/96 metric 1 gw 2003::100 dev eth2
Run Code Online (Sandbox Code Playgroud)
我的路由表是
[root@dev ~]# route --inet6 |grep eth0
fe80::/64 * U 256 0 0 eth0
ff00::/8 * U 256 0 0 eth0
[root@dev ~]# route --inet6 |grep eth2
2003::/64 * U 256 68 0 eth2
fe80::/64 * U 256 0 0 eth2
ff38:40:2001:dead:beef:cafe::/96 2003::100 UG 1 0 0 eth2 …Run Code Online (Sandbox Code Playgroud) 我正在使用Directory.Exists(uncPath)UNC路径,现在如果我使用标准IPv6地址则失败.是否有代码可以处理所有格式的unc - ipv4/ipv6/machiname.
目前我将我的ipv6地址转换为类似的东西2001-0-234-c1ab-0-a0-aabc-3e.ipv6-literal.net并且它可以工作,但是Ipv6本身可以用多种格式表示.我需要能处理所有格式的东西.
我正在尝试编写一个lex模式,这将允许我识别IPV6地址,包括带有CIDR表示法的IPV6地址.我使用的模式如下所示.
IPV4ADDRESS_CIDR [ \t]*(((2(5[0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)\.){3}(2(5[0-5]|[0-4][0-9])|[01]?[0-9][0-9]?)(\/(3[012]|[12]?[0-9])))[ \t]*
IPV4ADDRESS [ \t]*(([[:digit:]]{1,3}"."){3}([[:digit:]]{1,3}))[ \t]*
hex4 ([[:xdigit:]]{1,4})
hexseq ({hex4}(:{hex4})*)
hexpart ({hexseq}|({hexseq}::({hexseq}?))|::{hexseq})
IPV6ADDRESS [ \t]*({hexpart}(":"{IPV4ADDRESS})?)[ \t]*
IPV6ADDRESS_CIDR [ \t]*(IPV6ADDRESS)(\/(1[01][0-9]|12[0-8]|[0-9]{1,2}))[ \t]*
Run Code Online (Sandbox Code Playgroud)
IPV6ADDRESS_CIDR的正则表达式没有按预期工作.我正在测试
2001:1234::5678:5:6:7:8/64
Run Code Online (Sandbox Code Playgroud)
它似乎没有正确识别它.我在这里犯了一些错误?
我正在尝试测试我写的一个新的电子邮件验证功能,基于这个.,但有一些小的调整.
从大量有效和无效条目中,该函数只找到一个假阴性 - 一个具有IPv6地址而不是域的地址.
user@[IPv6:2001:db8:1ff::a0b:dbd0]
Run Code Online (Sandbox Code Playgroud)
来源是这个维基百科页面:电子邮件地址
但是,System.Net.IPAddress无法解析IPv6:2001:db8:1ff::a0b:dbd0,我在RFC4291中找不到任何IPv6前缀的引用.
显然,IPv6:2001:db8:1ff::a0b:dbd0它不是有效的IPv6地址,但在电子邮件地址中是否有效?或维基百科错了?
实际的电子邮件是否应该user@[2001:db8:1ff::a0b:dbd0]知道?
我想知道是否有办法使用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]时并没有给我任何回报,没有错误,没有反应,没有.
任何人都可以对这个问题有所了解吗?
是否可以运行Flask来侦听IPv4和IPv6(即双IP堆栈)?据我检查,可以使用以下方式在IPv4中运行:
app.run(host='0.0.0.0', port=port, debug=True)
Run Code Online (Sandbox Code Playgroud)
或使用IPv6
app.run(host='::', port=port, debug=True)
Run Code Online (Sandbox Code Playgroud)
但是我没有找到同时在两者中运行的方法(可以让我的Flask应用程序的实例监听IPv4而另一个实例监听IPv6,但两者都不能监听同一个端口).
谢谢!
更新(附加信息):
接着Sander Steffann的评论(谢谢!),我已经开始在IPv6中监听我的应用了:
* Running on http://[::]:1028/
* Restarting with reloader
Run Code Online (Sandbox Code Playgroud)
然后使用IPv6和IPv4 curls进行测试:
curl -g [::1]:1028/notify
curl 127.0.0.1:1028/notify
Run Code Online (Sandbox Code Playgroud)
分别获得:
::1 - - [10/Feb/2014 12:04:51] "GET /notify HTTP/1.1" 200 -
::ffff:127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
我对第二行的解释是"某人"(操作系统?Flask所依赖的底层网络库?)正在将IPv4请求转换为IPv6请求.但是,据我所知,在经典的双栈设置中支持IPv4"本机"是不一样的,即我本来期望有什么能够解决这个问题(这是我运行应用程序时得到的Running on http://0.0.0.0:1028/)()
127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud) 我有一个服务器实现,我需要2个独立的套接字 - 1个IPv4套接字套接字监听特定的IPv4地址和服务器端口X,以及一个IPv6套接字监听特定的IPv6地址和相同的服务器端口X.IPv4和IPv6地址打开相同的界面.
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(v4addr);
sin.sin_port = htons(tcp_port);
Run Code Online (Sandbox Code Playgroud)
我正在使用evconnlistener_new_bind创建ipv4套接字并绑定到它.对于IPv6侦听器,代码如下.
memset(&sin6, 0, sizeof(sin6));
sin6.sin6_family = AF_INET6;
memcpy(sin6.sin6_addr.s6_addr, v6addr_bytes, IPV6_ADDR_LEN);
sin6.sin6_port = htons(tcp_port);
fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
evutil_make_socket_nonblocking(fd)
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on))
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&on, sizeof(on))
evutil_make_listen_socket_reuseable(fd) /* Libevent call to set SO_REUSEADDR */
evutil_make_socket_nonblocking(fd) /* Libevent call to set fd non-blocking */
bind(fd, (const struct sockaddr *)&sin6, sizeof(sin6))
Run Code Online (Sandbox Code Playgroud)
当我将fd绑定到特定的ipv6地址时,我会间歇地看到绑定失败.
绑定v6失败sin6 3ffe :: a00:513 - 错误99 - 无法分配请求的地址
我尝试了gdb,但每次我gdb,绑定成功.
我不确定为什么我会看到这个问题.有人可以帮忙吗?
我正在存储sockaddr_in6支持四个32位数组addr [4]的IP地址.基本上是一个128位的数字.
我正在尝试计算给定IPv6范围内的IP数量(两者之间的IP数).所以这是使用两个长度为4的数组从一个减去另一个的问题.
问题是因为没有128位数据类型,我无法转换为十进制.
万分感谢!
关于苹果关于iPv6 -only网络的公告,我有一些疑问.
https://developer.apple.com/news/?id=05042016a
1)如果我的应用程序已经上传而没有支持ipv6,会发生什么?
2)我正在使用旧的Reachability类,它会创建任何问题吗?
3)我正在使用使用NSURLConnection的ASIHTTP库.
4)如果我的代码中没有使用任何静态iP,但我的服务器支持iPV4,那么它会造成任何麻烦吗?
谢谢