标签: ipv6

Flask应用程序中的双IPv4和IPv6支持

是否可以运行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)

ipv6 flask

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

IPv6绑定失败

我有一个服务器实现,我需要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,绑定成功.

我不确定为什么我会看到这个问题.有人可以帮忙吗?

c sockets linux ipv6

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

为ipv6实现最长前缀匹配的最佳方法是什么?

ipv6路由器存储多个路由作为n地址的第一位.2000年,研究人员在1500条ipv6路线中发现只有14种不同的前缀长度.传入数据包根据最长前缀匹配路由到不同的传出端口,因此如果数据包x的前8位与8位路由匹配,但同一数据包的前48位与48位路由匹配,则路由器必须选择48位路线.

我的路由器正在处理如此多的数据包,因此查找路由表的内存速度是一个限制因素.在路由表中找到最长匹配前缀的好算法是什么?

algorithm ipv6

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

Python:获取IPv6套接字以接收发往Subnet-Routers任播地址的数据包

如何获得套接字接收发往IPv6子网路由器任播地址的数据包?

我无法找到有关如何执行此操作的任何信息.

在一个解决方案中,我尝试使用socket.setsockopt,就像加入多播组一样:

# 7 is the interface number 
s = socket(AF_INET6, SOCK_DGRAM)
packed_iface_num = struct.pack("I", 7) 
group = inet_pton(AF_INET6, 'fd36:d00d:d00d:47cb::') + packed_iface_num

# socket.error: (22, 'Invalid argument')
s.setsockopt(IPPROTO_IPV6, IPV6_JOIN_GROUP,  group)
Run Code Online (Sandbox Code Playgroud)

并且还使用bind

# socket.error: (99, 'Cannot assign requested address')
s.bind(('fd36:773e:6b4c:47cb::', 9876))
Run Code Online (Sandbox Code Playgroud)

正如所料,这些都没有奏效.有没有办法做到这一点?

python networking ipv6

5
推荐指数
1
解决办法
1963
查看次数

用于将长IPv6地址转换为压缩形式的Java库

我想知道,是否有一个库可用于将长IPv6地址(例如2002:9876:57AB:0000:0000:0000:0000:0001)的表示转换为压缩的IPv6格式(在这种情况:2002:9876:57AB :: 1).

我找不到这样的图书馆.此库不应使用任何IP Api,不得进行网络连接.

我已经试过了

return Inet6Address.getByName(longAdress).toString();
Run Code Online (Sandbox Code Playgroud)

但这只是将4个零替换为1(在本例中为2002:9876:57AB:0:0:0:0:1).

有什么建议?

java ipv6

5
推荐指数
2
解决办法
7923
查看次数

如何在C#中使用ResolveIpNetEntry2

我试图在C#中检索IPv6主机的MAC地址.我发现这个问题提到使用ResolveIpNetEntry2.经过一些谷歌搜索,并参考MSDN,我还没有找到如何从C#调用此函数的示例.此函数也在pinvoke.net上不公开.

有没有人有一个如何从C#调用ResolveIpNetEntry2的例子?

c# network-programming ipv6

5
推荐指数
1
解决办法
1290
查看次数

IPv6和IPv4的套接字侦听器

我使用流行的教程移植了一个支持IPv6的应用程序.我决定只为这两个协议使用一个套接字监听器.现在我意识到我必须IPV6_V6ONLY正确设置(它只能在我的x86 linux上开箱即用,但不能在我的ARM上运行).

这真的是要走的路吗?有人说不IPV6_V6ONLY应该使用(显然它已经过时了,因为通过线路进行IPv4映射),有人说使用一个套接字用于两种协议都没问题.

所以,我很困惑.这个问题的当前状态是什么?我误解了这个问题吗?

c++ sockets ipv4 ipv6

5
推荐指数
1
解决办法
2160
查看次数

NodeJS数据报 - 接收IPv6多播

我正在尝试在node.js中通过IPv6接收多播数据报.我在IPv4(udp4)上完全相同的方式没有问题,但尝试为udp6做同样的事情让我在socket.addMembership调用时出现EINVAL错误.这是我的代码:

var dgram = require('dgram');
var server = dgram.createSocket('udp6');

var PORT = 12345;
var MULTICAST_ADDRESS = 'ff7e:230::1234';

server.on('message', function (message, remote) {
    console.log('Message from: ' + remote.address + ':' + remote.port +' - ' + message);
});

server.on('listening', function () {
  var address = server.address();
  console.log('UDP listening on ' + address.address + ":" + address.port);
  server.addMembership(MULTICAST_ADDRESS);
});

server.bind(PORT);
Run Code Online (Sandbox Code Playgroud)

这导致:

    Error: addMembership EINVAL
            at new errnoException (dgram.js:454:11)
            at Socket.addMembership (dgram.js:396:11)
            at Socket.<anonymous> (/media/sf_projects/ipv6_multicast/server.js:57:10)
            at Socket.EventEmitter.emit (events.js:92:17)
            at startListening (dgram.js:141:10) …
Run Code Online (Sandbox Code Playgroud)

javascript sockets datagram ipv6 node.js

5
推荐指数
1
解决办法
1494
查看次数

哪里可以获得支持IPv6的最新版本的libWebRTC.a for iOS?

我正在维护一个使用WebRTC构建的iOS应用程序.最初的开发人员在项目中包含了一个预先构建的"libWebRTC.a".但是,自2016年6月起,Apple已强制要求所有iOS应用程序都支持IPv6.

我当前的实现不适用于IPv6.在搜索更多主题时,我遇到了这个问题:

https://bugs.chromium.org/p/webrtc/issues/detail?id=5871

这似乎表明WebRTC库存在仅在2016年6月修复的IPv6网络问题.

不幸的是我无法找到最新版本的libWebRTC.我在GitHub上遇到了多个项目,这似乎指向了这个项目:

https://github.com/pristineio/webrtc-build-scripts

但似乎这个项目可能不起作用,因为谷歌从GYP转向GN作为构建工具之一.

很高兴知道你们中是否有人设法解决这个问题并让WebRTC调用在仅支持IPv6的网络上的iOS上工作.

ipv6 ios webrtc

5
推荐指数
1
解决办法
1181
查看次数

IP地址二进制到人类可读

我使用如下命令将IP地址存储在数据库中:

cast(INET6_ATON(trim(:ipbinary)) as binary(16)))
Run Code Online (Sandbox Code Playgroud)

我的专栏是:

varbinary(16)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用mysql函数INET6_NTOA将其转换回IPv4格式,但没有任何运气.

我需要的IP是:

66.249.64.90
Run Code Online (Sandbox Code Playgroud)

DB值是:

42f9405a000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

INET6_NTOA给我:

42f9:405a::
Run Code Online (Sandbox Code Playgroud)

INET6_NTOA(UNHEX(给我一个NULL回应.我使用PHP作为我的脚本语言,所以如果有一个函数,我也可以使用它.

这是我的完整查询:

SELECT delete_ip, INET6_NTOA(ip_binary), ip_binary FROM `stats`
Run Code Online (Sandbox Code Playgroud)

这是回复:

phpmyadmin输出

谢谢.

(我不能只使用delete_ip因为顾名思义列将被删除.)

mysql binary ipv4 ipv6

5
推荐指数
1
解决办法
1023
查看次数

标签 统计

ipv6 ×10

sockets ×3

ipv4 ×2

algorithm ×1

binary ×1

c ×1

c# ×1

c++ ×1

datagram ×1

flask ×1

ios ×1

java ×1

javascript ×1

linux ×1

mysql ×1

network-programming ×1

networking ×1

node.js ×1

python ×1

webrtc ×1