有很多关于IPv6以及即将从IPv4切换到IPv6的新闻.我对IPv6有一些了解,但我经常想知道IPv6对应用程序开发和设计有多大影响(特别是)?
是否有一些我们今天还没有提供的有形/众所周知的好处?
我知道Windows Vista和Server 2008支持开箱即用的IPv6,今天是否有人使用(或设计使用IPv6),如果是这样,有什么好处?我们是否应该在当前和未来的项目中考虑IPv6?
是否有任何关于IPv6感知应用程序的好例子?
我有一个类似于2001:db8::1标量的地址,并希望得到扩展形式,2001:0db8:0000:0000:0000:0000:0000:0001.主要的Perl软件包是否在其广阔的森林中运送 - /usr/lib/perl5/...一个已经完成此操作的模块?如果没有,有人会有几行会这样做吗?
使用IPv4,我可以将()绑定到特定地址,以选择将用于接收数据包的接口(在某些情况下,也可以发送,但这不是重点).
在双栈IPv6/IPV4机器上我有这个问题:我可以创建一个6套接字并使用它来接收4个流量,但如果我想绑定到特定接口,我必须选择要绑定的IP地址.
如果我绑定到IPv6地址,我将过滤掉所有IPv4流量,反之亦然.
如何从特定接口接收IPv4和IPv6流量?
我有一个程序,它监听连接并处理它们.我知道许多网络堆栈支持通过同一个套接字/端口接受IPv4和IPv6连接,但我也听说Windows XP不是其中之一.为了在所有平台上运行相同的代码,我应该只在单独的端口上监听IPv6连接吗?
$ ifconfig
...
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:16:cb:94:1a:79
inet6 fe80::216:cbff:fe94:1a79%en0 prefixlen 64 scopeid 0x4
inet 192.168.163.200 netmask 0xfffffe00 broadcast 192.168.163.255
media: autoselect (100baseTX <full-duplex,flow-control>)
status: active
...
Run Code Online (Sandbox Code Playgroud)
所以,你可以看到我的机器fe80::216:cbff:fe94:1a79在en0界面上有地址.也,
$ ping6 fe80::216:cbff:fe94:1a79%en0
PING6(56=40+8+8 bytes) fe80::216:cbff:fe94:1a79%en0 --> fe80::216:cbff:fe94:1a79%en0
16 bytes from fe80::216:cbff:fe94:1a79%en0, icmp_seq=0 hlim=64 time=0.153 ms
^C
--- fe80::216:cbff:fe94:1a79%en0 ping6 statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.153/0.153/0.153/0.000 ms
$
Run Code Online (Sandbox Code Playgroud)
但为什么
$ ping6 fe80::216:cbff:fe94:1a79
ping6: UDP connect: No route to …Run Code Online (Sandbox Code Playgroud) 我正在使用一个java.net.InetAddress.getLocalHost().getHostAddress()用于获取本地IP地址的库.但是,这始终会在我的计算机上返回IPv6地址(Gentoo Linux,JDK 1.6.0_37).该地址还用于不支持IPv6地址的上下文中,因此失败.
有没有办法强制getHostAddress()返回IPv4地址(例如通过参数到JVM)?
我想了解如何将MAC地址转换为IPv6.例如:00:01:04:76:2A:5C应该变为FE80 :: 0201:04FF:FE76:2A5C
有人可以详细说明转换吗?我们假设一个没有随机参数的自动配置用于本地机器.
我是swift和xcode的新手,因为IPV6我的应用被拒绝了:
表现 - 2.1
当我们执行以下操作时,您的应用程序在iPad和运行iOS 9.3.5的iPhone上崩溃连接到IPv6网络:
具体来说,当我们触摸应用程序右下角的"更多"按钮时,它会崩溃.
我花了很多时间在ipv6上阅读并得出结论,它可能是我正在使用的可达性类.
我有几个问题,如何修改代码以包含ipv6:
public class Reachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0))
}
var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = …Run Code Online (Sandbox Code Playgroud) 我正在努力寻找有关使Phoenix(以及Cowboy和Ranch)同时收听IPv4和IPv6的信息。
我正在使用Ubuntu 16.04在VPS上运行。它同时具有IPv4和IPv6地址。运行时,netstat -tulpn它表明beam仅侦听具有Phoenix配置中指定端口的IPv4。而其他进程(例如epmd)能够同时监听IPv4和IPv6。
我已经试过指定端口像"::4000"我config.exs,但它崩溃因未能解析为整数。
有人可以指出我正确的方向吗?我是否需要以某种方式添加自定义的Cowboy侦听器?
我宁愿不必在前面运行Nginx来侦听IPv6流量。
我尝试的配置:
config :my_app, MyApp.Endpoint,
http: [port: "[::]:4000"]
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪(看起来像Phoenix只需要一个整数端口):
** (Mix) Could not start application my_app: MyApp.start(:normal, []) returned an error: shutdown: failed to start child: MyApp.Endpoint
** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Server
** (EXIT) an exception was raised:
** (ArgumentError) argument error
:erlang.binary_to_integer("[::]:4000")
(phoenix) lib/phoenix/endpoint/server.ex:32: Phoenix.Endpoint.Server.to_port/1
(phoenix) lib/phoenix/endpoint/server.ex:28: Phoenix.Endpoint.Server.default/3
(phoenix) lib/phoenix/endpoint/server.ex:17: anonymous fn/5 in Phoenix.Endpoint.Server.init/1
(elixir) lib/enum.ex:1623: Enum."-reduce/3-lists^foldl/2-0-"/3
(phoenix) lib/phoenix/endpoint/server.ex:15: Phoenix.Endpoint.Server.init/1 …Run Code Online (Sandbox Code Playgroud)