Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IPv6-InetAddress.getAllByName返回不一致的作用域id_Java_Ipv6_Inetaddress - Fatal编程技术网

Java IPv6-InetAddress.getAllByName返回不一致的作用域id

Java IPv6-InetAddress.getAllByName返回不一致的作用域id,java,ipv6,inetaddress,Java,Ipv6,Inetaddress,我是IPv6新手。 我有一个非常简单的代码片段,如下面的示例程序,用于获取和打印主机的IP地址 public class networkinterfacetest { public static void main(String...args) { String host="BGL-351L"; try { InetAddress[] a = InetAddress.getAllByName(host); for(InetAddress i

我是IPv6新手。 我有一个非常简单的代码片段,如下面的示例程序,用于获取和打印主机的IP地址

public class networkinterfacetest {
  public static void main(String...args) {
  String host="BGL-351L";   

    try {
        InetAddress[] a = InetAddress.getAllByName(host);
        for(InetAddress ip:a) {
        System.out.println("ip all:" + ip);
        }
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }
}
输出还具有作用域id的IPv4和IPv6地址

我想知道这个作用域id是如何分配的。因为它并不总是一致的。它一直在变化

昨天,当我运行该程序时,我得到了作用域id为“%2”的输出,如下所示

今天如果运行相同的程序,那么我得到“%3”作为作用域id

ip all:BGL-351L/10.10.64.86
ip all:BGL-351L/fe80:0:0:0:5e26:aff:fe77:e4fd%3
ip all:BGL-351L/fcff:3:10:64:5e26:aff:fe77:e4fd%3

有人能帮我理解这个作用域id是如何分配的吗。

从java文档中我得到了以下内容,我可以说每个接口都可以配置不同的作用域id值

IPv6地址是如上所述的文字IPv6地址。scope_id指的是本地系统上的接口,可以通过两种方式指定

作为数字标识符。这必须是一个正整数,用于标识系统所理解的特定接口和范围。通常,可以通过系统上的管理工具确定数值每个接口可能有多个值,每个范围一个。如果未指定范围,则使用的默认值为零

一串。这必须是NetworkInterface.getName()为特定接口返回的确切字符串。以这种方式创建Inet6Address时,通过查询相关的NetworkInterface在创建对象时确定数值范围id

还请注意,可以从NetworkInterface类返回的Inet6Address实例中检索数字范围\ id。这可用于查找系统上配置的当前作用域ID


所以你会得到不同的值。

经过一点挖掘,我发现了这个作用域id是如何获取的。这是分配给系统中可用网络接口的整数id。可以使用“ip地址”或“ip链接”命令找到此接口id

我有一个ip地址输出如下的系统

[user@BGL-351L tch]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
  link/ether 08:11:96:09:04:04 brd ff:ff:ff:ff:ff:ff
3: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 5c:26:0a:77:e4:fd brd ff:ff:ff:ff:ff:ff
  inet 10.10.64.86/22 brd 10.10.67.255 scope global em1
  inet6 fcff:3:10:64:5e26:aff:fe77:e4fd/64 scope global dynamic 
   valid_lft 2591601sec preferred_lft 604401sec
  inet6 fe80::5e26:aff:fe77:e4fd/64 scope link 
   valid_lft forever preferred_lft forever
在另一台机器中,“ip地址”和程序输出如下所示:

[user@BGL-341L]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:64:61:4a brd ff:ff:ff:ff:ff:ff
  inet 10.10.68.24/22 brd 10.10.71.255 scope global eth0
  inet6 3002::20c:29ff:fe64:614a/64 scope global dynamic 
   valid_lft 2591981sec preferred_lft 604781sec
  inet6 fe80::20c:29ff:fe64:614a/64 scope link 
   valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
  link/ether 9a:ee:72:78:fc:cc brd ff:ff:ff:ff:ff:ff
  inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

因此,在上述两种情况下,分配给em1或eth0的id作为作用域id与java程序输出中的ipv6地址一起出现。

这是Windows上的吗?如果是,作用域ID是否与“ipconfig”中的作用域ID的输出匹配?@JeremyVisser我正在使用linux。正如您所提到的,它与“ipaddr”命令相匹配。我在回答中更新了这一点
ip all:BGL-351L/10.10.64.86
ip all:BGL-351L/fe80:0:0:0:5e26:aff:fe77:e4fd%3
ip all:BGL-351L/fcff:3:10:64:5e26:aff:fe77:e4fd%3
[user@BGL-341L]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  link/ether 00:0c:29:64:61:4a brd ff:ff:ff:ff:ff:ff
  inet 10.10.68.24/22 brd 10.10.71.255 scope global eth0
  inet6 3002::20c:29ff:fe64:614a/64 scope global dynamic 
   valid_lft 2591981sec preferred_lft 604781sec
  inet6 fe80::20c:29ff:fe64:614a/64 scope link 
   valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
  link/ether 9a:ee:72:78:fc:cc brd ff:ff:ff:ff:ff:ff
  inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
ip all:BGL-341L/fe80:0:0:0:20c:29ff:fe64:614a%2
ip all:BGL-341L/3002:0:0:0:20c:29ff:fe64:614a%2
ip all:BGL-341L/10.10.68.24