我去过chrome:// net-internals/#dns并启用了IPV6,但似乎没有让浏览器首先尝试IPV6地址的选项,它默认为IPV4.
在启用IPV6之前,默认地址族为:默认地址族:ADDRESS_FAMILY_IPV4(禁用IPv6)启用IPV6后,它显示为:默认地址族:ADDRESS_FAMILY_UNSPECIFIED
这看起来很有希望,直到它首先抓住IPV4地址.任何帮助将不胜感激甚至确认不可能.
我遇到了iOS应用程序的IPv6问题.最初我在6月1日之前的几天提交了不了解IPv6要求(https://developer.apple.com/news/?id=05042016a).
它们在6月1日进行了审核,因IPv6不兼容/无法连接而被拒绝.我不想建立自己的IPv6网络,因此我更新了代码以符合要求 - 我将Apple提供的Reachability更新为最新版本.几年前我也在使用我自己的下载库,这是由前联合创始人编写的.它没有连接到IP地址,也没有Apple推荐的任何内容,所以我现在没有决定升级它.我也在使用旧版的AFNetworking.
我重新提交了一个应用程序.因同样的原因被再次拒绝.我去买了霹雳适配器并设置了IPv6.现在我连接到该应用程序.我也可以很好地连接到另一个仍然具有非常旧的可达性代码的应用程序.我的主要问题是我希望它能像Apple破解一样突破,所以我可以正确地修复它.
笔记:
- 我最初试图发表关于IPv6 App Store拒绝的评论,但它太长了.我是Twitter上的@andytriboletti,在那个问题上与Sean联系在一起.
- 我在Apple开发者论坛上发布了此内容,但它仍在等待10小时后批准:https: //forums.developer.apple.com/message/141461#141461
- 这就是我在Macbook pro上使用thunderbolt以太网适配器设置IPv6网络的方法.https://developer.apple.com/library/tvos/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html
- 我正在使用运行OS 9.3.2的iPhone 6进行测试.正如Apple链接到我的文章中描述的运行IPv6网络设置的Macbook Pro正在运行10.11.5.
- 我测试了Apple测试的确切版本.我使用buddybuild作为构建自动化工具,他们向我发送了一封电子邮件,其中包含上传到iTunes的版本.
- 该应用程序向https://greenrobot.com发送网络请求(并且还包括广告和分析库).我的代码中没有硬编码的IP地址.GreenRobot看起来像是为IPv6设置的:https://ip6.nl/#greenrobot.com
我试图了解getaddrinfo函数返回的内容:
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
int main (int argc, char *argv[])
{
struct addrinfo *res = 0 ;
getaddrinfo("localhost", NULL ,NULL,&res);
printf("ai_flags -> %i\n", res->ai_flags) ;
printf("ai_family -> %i\n", res->ai_family) ;
printf("ai_socktype -> %i\n", res->ai_socktype) ;
printf("ai_protocol -> %i\n", res->ai_protocol) ;
printf("ai_addrlen -> %i\n", res->ai_addrlen) ;
struct sockaddr_in* saddr = (struct sockaddr_in*)res->ai_addr;
printf("ai_addr hostname -> %s\n", inet_ntoa(saddr->sin_addr));
freeaddrinfo(res);
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
结果:
ai_flags -> 40
ai_family -> 2
ai_socktype -> 1
ai_protocol -> …Run Code Online (Sandbox Code Playgroud) 我应该如何执行从IPv6到long的转换,反之亦然?
到目前为止,我有:
public static long IPToLong(String addr) {
String[] addrArray = addr.split("\\.");
long num = 0;
for (int i = 0; i < addrArray.length; i++) {
int power = 3 - i;
num += ((Integer.parseInt(addrArray[i], 16) % 256 * Math.pow(256, power)));
}
return num;
}
public static String longToIP(long ip) {
return ((ip >> 24) & 0xFF) + "."
+ ((ip >> 16) & 0xFF) + "."
+ ((ip >> 8) & 0xFF) + "."
+ (ip & 0xFF);
} …Run Code Online (Sandbox Code Playgroud) 以下程序及其输出显示INET_ADDRSTRLEN定义为16和INET_ADDRSTRLEN定义为46.
这是程序.
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
printf("%d\n", INET_ADDRSTRLEN);
printf("%d\n", INET6_ADDRSTRLEN);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出.
16
46
Run Code Online (Sandbox Code Playgroud)
我能理解为什么INET_ADDRSTRLEN需要16.IPv4地址的最大可能字符串表示消耗15个字节,例如"255.255.255.255".因此,需要16个字节来存储具有终止空字符的IP地址.
但为什么INET6_ADDRSTRLEN需要46呢?IPv6地址的最大可能字符串表示仅消耗39个字节(根据我的知识),例如"ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff".因此,只需要40个字节来存储具有终止空字符的IP地址.
是否存在可以消耗46个字节的IPv6地址的字符串表示形式?
我试图以有效的方式在MySQL 5.0中存储IPv6地址.我已经阅读了与此相关的其他问题,例如本文.该问题的作者最终选择了两个BIGINT字段.我的搜索也发现了另一种常用机制:使用DECIMAL(39,0)存储IPv6地址.我有两个问题.
如果您的IPv6主机具有多个全局范围地址,那么如何以编程方式识别首选地址bind()?
示例地址列表:
eth0 Link encap:Ethernet HWaddr 00:14:5e:bd:6d:da
inet addr:10.6.28.31 Bcast:10.6.28.255 Mask:255.255.255.0
inet6 addr: 2002:dce8:d28e:0:214:5eff:febd:6dda/64 Scope:Global
inet6 addr: fe80::214:5eff:febd:6dda/64 Scope:Link
inet6 addr: 2002:dce8:d28e::31/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Run Code Online (Sandbox Code Playgroud)
在Solaris上,您可以使用接口标志指示首选地址,并通过SIOCGLIFCONF以下方式以编程方式提供:
/usr/include/net/if.h:
#define IFF_PREFERRED 0x0400000000 /* Prefer as source address */
Run Code Online (Sandbox Code Playgroud)
如界面列表中所列:
eri0: flags=2104841<UP,RUNNING,MULTICAST,DHCP,ROUTER,IPv6> mtu 1500 index 2
inet6 fe80::203:baff:fe4e:6cc8/10
eri0:1: flags=402100841<UP,RUNNING,MULTICAST,ROUTER,IPv6,PREFERRED> mtu 1500 index 2
inet6 2002:dce8:d28e::36/64
Run Code Online (Sandbox Code Playgroud)
但这不适用于OSX,Linux,FreeBSD或Windows.从管理员的角度看,基于UUID的适配器名称(取决于Windows版本)完全没用,因此Windows很容易发布.
对于Linux,本文详细介绍了如何更改"生命周期" 的参数preferred_lft,以便lft内核对选择过程进行加权.此设置不会出现在结果方便可行的SIOCGIFCONF或者getifaddrs()虽然.
所以我想结合eth0,eri0或任何可用的接口名称.选择有点严峻:
[ 我已将此问题标记为由主持人删除,直到我得到回答此问题为止 ]
说话时的Node.js(在Ubuntu上,更多的我的JavaScript客户端工作正常,在这里通过的WebSocket接口IPV4的IP地址)的服务器.
即使我的主机提供商已经准备好为我分配IPV4,但我现在改为使用IPV6,因为现在IPV4供应有限.
使用IPV6 IP时出现此错误:
WebSocket连接到'ws:// [2600:3c00 :: f03c:91ff:fe73:2b08]:31333 /'失败:连接建立错误:net :: ERR_ADDRESS_UNREACHABLE
我已经使用工具检查了端口31333是否确实打开:http://www.subnetonline.com/pages/ipv6-network-tools/online-ipv6-port-scanner.php
我甚至尝试过在IPv6地址中提供解决方案,在internet explorer-10 websocket中给出语法错误 - 即:2600-3c00-0-0-f03c-91ff-fe73-2b08.ipv6-literal.net
我运行此客户端,并且能够在基于Ubuntu的远程服务器上运行时连接到服务器:
var WebSocket = require('ws')
, ws = new WebSocket('ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333');
ws.on('open', function() {
ws.send('something');
});
ws.on('message', function(message) {
console.log('received: %s', message);
});
Run Code Online (Sandbox Code Playgroud)
但是,当我从家用Windows 7运行同一个客户端而服务器是远程Ubuntu时,它无法连接:
> $ node c2.js events.js:85
> throw er; // Unhandled 'error' event
> ^ Error: connect ENETUNREACH
> at exports._errnoException (util.js:746:11)
> at TCPConnectWrap.afterConnect [as oncomplete] …Run Code Online (Sandbox Code Playgroud) 我有2015年和2014年建立的应用程序.如何针对IPv6测试它们?
如果我的应用不支持IPv6,我该怎么办?
我的应用程序正在使用AFNetworking和Alamofire.我主要连接到域(例如api.example.com/v1/...).只有1个应用程序使用IP :(例如:12.12.12.12:3000/api/v1/...).
websockets有问题吗?(WS://12.12.12.12:8080/API/....).
ipv6 ×10
ios ×3
c ×2
default ×1
getaddrinfo ×1
ip ×1
ipv4 ×1
java ×1
javascript ×1
linux ×1
long-integer ×1
macos ×1
mysql ×1
networking ×1
node.js ×1
objective-c ×1
php ×1
reachability ×1
sockets ×1
solaris ×1
swift ×1
websocket ×1