如何在Linux中获取IPv6 IP地址


35

我有一台Linux服务器,我想通过一个命令行找到主要的IPv6地址。

到目前为止,我的命令是:

$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

这表现了:

2001:410:0:39:221:28ff:fe46:eef4
fe80::221:28ff:fe46:eef4

但是我希望出现一次,因此输出为:

2001:410:0:39:221:28ff:fe46:eef4

编写一个shell脚本并将这些命令放在其中:瞧,您现在已经创建了一个“单个”命令。
akira 2012年

4
在处理IPv6时,实际上不建议限制为单个地址。可以有多个全局地址,多个链接本地地址,多个站点本地地址...
grawity

Answers:


31
ip -6 addr

将显示您的IPv6地址。


% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever...仍然可以抓获
akira

1
这不能解决所述问题。OP希望一个命令行来检索一个IPv6(这可能意味着主要的公共IPv6)。因此,可以将ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'ip -6 addr show dev eth0 | awk '/inet6/{print $2}'用作基础,OP可以针对他的特定用例扩展/编辑它们。
rwenz3l

6

/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80

的输出/sbin/ip -6 addr | grep inet6看起来像这样:

inet6 ::1/128 scope host 
inet6 2001:123:456:55f::1/64 scope global 
inet6 fe80::62eb:69ff:fed2:d2a6/64 scope link 

awk -F '[ \t]+|/' '{print $3}'将每个行设置定界符拆分为一个或多个空格或正斜杠。我们需要的部分是3美元。

grep -v ^::1 | grep -v ^fe80排除以::1或开头的任何行fe80


grep进入awk的方式太多了,这可能会变成单个awk`awk -F'[\ t] + | /''$ 3 ==“ :: 1” {next;} $ 3〜/ ^ fe80 ::/ { 下一个 ; } / inet6 / {print $ 3}'`
Archemar

3
$ /sbin/ifconfig | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
      inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
      inet6 addr: ::1/128 Scope:Host

如果要随机选择一个IPv6地址

$ /sbin/ifconfig | grep inet6 | head -n 1
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

如果要第一个以太网适配器的最通用名称的IPv6地址

$ /sbin/ifconfig eth0 | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

如果你只想要地址

$ /sbin/ifconfig eth0 |  awk '/inet6/{print $3}'
fe80::2ff:19ff:fe60:1a00/64

2

使用以下命令在Linux上查看您的IP地址:

ifconfig

通常,IPv6地址看起来像 2001:5c0:9168::/48。如果您的IP遇到任何冲突,请按照以下步骤重新设置IP地址:

  1. 要分配IPv6 IP,请确保已安装iproute2工具。
  2. 使用它们,让我们开始分配您的IP。
  3. 确保是否安装了ipv6模块。

然后,使用以下命令添加新的ip:

ip -f inet6 addr add 2001:5c0:9168::2/64 dev eth0

然后,通过添加默认IP

ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0

完成安装后,只需重新配置/重新启动启用IPv6的服务,例如Apache,SSH等。


ifconfig在Linux上已过时,不应再使用。现代Linux发行版甚至不再默认安装它(除非某些古老的软件包需要它)。
迈克尔·汉普顿

1

进行一些小调整,您最初的尝试就可以了:

ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'

最大的变化是添加了-o标志,以使条目被打印出来(每行一个),这使得在它们上运行sed更容易。


0

首先,您需要记住,使用IPv6的任何计算机都可能具有多个IPv6地址,并且它们可能位于单独的网络上,并且可能要使用其中的任何一个,具体取决于您要到达的位置。

因此,在回答源IP地址是什么之前,您必须确定将流量发送到哪里。然后,您可以要求Linux告诉您,当您向该目标发送流量时,哪个IPv6地址将成为源。

如果您将其发送到“ Internet”,则只需随机选择一个全球IPv6地址,例如Google的Public DNS地址。

ip r get to 2001:4860:4860::8888 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
2001:db8:f387:c818:5:2:0:1000

这要求Linux提供到该目的地的路由。Perl解析寻找的结果src,然后打印下一个字段。

通过提供不同的目的地,您可能会收到不同的源地址:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1

0
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.