我有一台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
我有一台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
Answers:
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
...仍然可以抓获
ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'
或ip -6 addr show dev eth0 | awk '/inet6/{print $2}'
用作基础,OP可以针对他的特定用例扩展/编辑它们。
/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
。
$ /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
使用以下命令在Linux上查看您的IP地址:
ifconfig
通常,IPv6地址看起来像 2001:5c0:9168::/48
。如果您的IP遇到任何冲突,请按照以下步骤重新设置IP地址:
然后,使用以下命令添加新的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发行版甚至不再默认安装它(除非某些古老的软件包需要它)。
进行一些小调整,您最初的尝试就可以了:
ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'
最大的变化是添加了-o
标志,以使条目被打印出来(每行一个),这使得在它们上运行sed更容易。
首先,您需要记住,使用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