Java IPv6-InetAddress.getAllByName返回不一致的作用域id
我是IPv6新手。 我有一个非常简单的代码片段,如下面的示例程序,用于获取和打印主机的IP地址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
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