标签: link-local

添加链接本地地址

如果在接口上手动删除了IPv6链路本地地址,是否有办法在不关闭接口的情况下获取链路本地地址?该要求源于需要在接口上保留(IPv4)现有连接,但也需要在其上获取链路本地地址.

linux networking ipv6 linux-kernel link-local

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

IPV6链接本地多播

我试图弄清楚如何使用IPV6进行相当于IPV4的广播.

我正在创建一个非阻塞的IPV6 UDP套接字.

从侧面广播我实际上只是在端口12346上执行sendto"FF02 :: 1".

在听力方面,我发现我需要加入小组,所以我做了以下事情:

    ipv6_mreq membership;
    memset( &membership.ipv6mr_multiaddr, 0, sizeof( in6_addr ) );
    membership.ipv6mr_multiaddr.u.Word[0]   = htons( 0xff02 );
    membership.ipv6mr_multiaddr.u.Word[7]   = htons( 0x0001 );
    membership.ipv6mr_interface             = 0;

    if( enable )
    {
        if ( 0 != setsockopt( m_Socket, SOL_SOCKET, IPV6_JOIN_GROUP, (char*)&membership, sizeof( ipv6_mreq ) ) )
        {
            DisplayError();
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是setsockopt总是返回"WSAENOPROTOOPT".为什么?任何人都可以帮我这个吗?我完全失去了.

编辑:我将级别更改为"IPPROTO_IPV6"但现在我得到了"WSAEINVAL".

c++ multicast ipv6 link-local

8
推荐指数
1
解决办法
3071
查看次数

为什么%en0后缀不能用于连接Python中的链接本地IPv6 TCP套接字?

大约一周前,有人在StackOverflow上询问为什么他们用于连接到IPv6链接本地地址的Python代码无效,我回答说,因为它是一个链接本地地址,所以需要添加%en0(或者其他任何所需的local-interface-name是其目标IP地址的后缀.我以为我知道我在说什么,所以在回答之前我没有真正测试过我的建议(对我感到羞耻!).

今天我为自己使用了同样的技术,却发现它似乎不起作用.:^(也就是说,此代码不起作用:

>>> from socket import *
>>> s = socket(AF_INET6, SOCK_STREAM)
>>> s.connect(('fe80::21f:5bff:fe3f:1b36%en0', 2001))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in connect
socket.error: [Errno 65] No route to host
Run Code Online (Sandbox Code Playgroud)

另一方面,以下代码可以工作(带或不带%en0后缀):

>>> from socket import *
>>> s = socket(AF_INET6, SOCK_STREAM)
>>> s.connect(('fe80::21f:5bff:fe3f:1b36%en0', 2001, 0, 6))
>>> 
Run Code Online (Sandbox Code Playgroud)

...但我不喜欢这样做,因为为了弄清楚要为最后一个参数提供哪个范围ID整数,我必须执行一堆不可移植的代码来迭代本地接口list,找到名为'en0'的接口,并提取其范围ID,这比我想要的更复杂.

鉴于connect()正在接受IP地址的%en0后缀,为什么不按预期使用它来确定范围ID?

FWIW,我正在使用MacOS/X 10.6.4下的Python 2.6.1进行测试.

python tcp ipv6 link-local scope-id

7
推荐指数
1
解决办法
2971
查看次数

如何使用链接本地 IPv6 地址访问 Web 服务器或网站?

以下是托管 Web 服务器的机器的 ipconfig 输出:

以太网适配器本地连接:

特定于连接的 DNS 后缀。:链路本地 IPv6 地址。. . . . : fe80::f85b:4256:ee76:24a4%11 IPv4 地址。. . . . . . . . . . :10.213.254.119 子网掩码。. . . . . . . . . . :255.255.255.0 默认网关。. . . . . . . . : 10.213.254.252

我可以使用以下语句访问该网站:“ http://10.213.254.119/test ” 现在我很想知道如何使用链接本地 IPv6 地址访问同一页面?

webserver ipv6 link-local

7
推荐指数
2
解决办法
7557
查看次数

如何从浏览器访问具有IPV6链接本地地址的设备(如IE,Firefox等)?

我的设备和我尝试访问的主机都位于同一子网中.

场景:

我在同一子网中有一台交换机和一台服务器.我必须从我服务器中的浏览器使用ipv6链接本地地址访问交换机.任何人都可以告诉我确切的语法?

ipv6 subnet link-local server

3
推荐指数
2
解决办法
5310
查看次数

IPv6:connect()总是以errno 22失败

操作系统是Ubuntu.我正在为基本的IPv6操作做一个简单的测试.PC通过集线器与IP摄像机(支持IPv6)连接.ping6测试成功.

$ ping6 -I eth1 fe80::240:8cff:fe94:451e
PING fe80::240:8cff:fe94:451e(fe80::240:8cff:fe94:451e) from fe80::224:8cff:fe90:ad3b eth1: 56 data bytes
64 bytes from fe80::240:8cff:fe94:451e: icmp_seq=1 ttl=64 time=3.86 ms
64 bytes from fe80::240:8cff:fe94:451e: icmp_seq=2 ttl=64 time=0.471 ms
Run Code Online (Sandbox Code Playgroud)

代码如下:

#include <linux/in6.h>
#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>

void main()
{
  int s, ret, err;
  struct sockaddr_in6 addr;

  s = socket(AF_INET6, SOCK_STREAM, 0);
  addr.sin6_family = AF_INET6;
  addr.sin6_port = htons(554);
  addr.sin6_flowinfo = 0;
  addr.sin6_scope_id = 0;
  addr.sin6_addr.s6_addr[0] = 0xfe;
  addr.sin6_addr.s6_addr[1] = 0x80;
  addr.sin6_addr.s6_addr[2] = 0x00;
  addr.sin6_addr.s6_addr[3] = 0x00;
  addr.sin6_addr.s6_addr[4] = …
Run Code Online (Sandbox Code Playgroud)

c linux ipv6 link-local

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

openssl 是否理解本地链路 IPv6 地址?

我无法理解为什么这个命令不起作用:

openssl s_client -connect [fe80::xxxx:xxxx:xxxx:xxxx]:yyyy
Run Code Online (Sandbox Code Playgroud)

注意:我已经用 's 混淆了上面的链接本地地址x,但我有一些有效的链接本地 ipv6 地址。 yyyy是端口号。

我收到错误:

1995535248:error:02002016:system library:connect:Invalid argument:../crypto/bio/b_sock2.c:108:
1995535248:error:2008A067:BIO routines:BIO_connect:connect error:../crypto/bio/b_sock2.c:109:
connect:errno=22
Run Code Online (Sandbox Code Playgroud)

我也尝试过添加单引号/双引号,但导致了同样的错误:

openssl s_client -connect '[fe80::xxxx:xxxx:xxxx:xxxx]:yyyy'
Run Code Online (Sandbox Code Playgroud)

我使用的是 OpenSSL 1.1.0f 版本,它应该支持 IPv6。

使用 IPv4 地址,它可以工作。

openssl ipv6 link-local

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