【问题标题】:Is there a portable way using unix shell commands to tell if there is a configured IPv6 interface?是否有一种可移植的方式使用 unix shell 命令来判断是否有配置的 IPv6 接口?
【发布时间】:2012-07-05 16:05:41
【问题描述】:

具体来说,我正在寻找一种方法来判断系统是否具有配置有 global 范围的 IPv6 地址的网络接口。环回和链接范围的地址“不算数”。

我想要实现的是匹配getaddrinfo() 是否会返回带有AI_ADDRCONFIG 提示标志的任何IPv6 地址。

我可以通过编写一些使用getaddrinfo() 查找 IPv6 环回地址 ("::1") 的代码来做到这一点。但这是一个相当复杂的构建过程的测试的一部分,不必为了测试这个相当简单的东西而构建可执行文件会简单得多。

目前我发现的最好的只适用于 Linux,并使用最近发行版附带的 ip 命令。

if ip -f inet6 -o addr | cut -f 9 -s -d' ' | grep global > /dev/null ; then
    echo "IPv6 addresses configured continuing"
else
    echo "No global IPv6 addresses configured - skipping test"
    exit 0
fi

但是,这依赖于ip 的当前输出格式,我怀疑这是有保证的,并且在其他版本的 Unix(例如 FreeBSD)上不存在。

我不认为 ifconfig 在不同的 Unix 版本之间提供了足够相似的输出以供使用。

我还缺少其他工具吗?

【问题讨论】:

  • 我不认为你能找到一个随处安装并且输出格式一致的工具。不过,也许您可​​以编写一个简单的 Perl 或 Python 脚本。
  • 你肯定需要编写脚本,ifconfig 在 unix 平台上给出相当相似的结果,例如,所有 ipv6 地址都以 inet6 开头。一点 Perl 应该在这里完成这项工作,当然任何以 fe80 或 fec0 开头的 ipv6 地址然后我们就忽略它,因为它是链接本地/站点本地地址。

标签: shell unix ipv6


【解决方案1】:

目前,查看您是否至少有一些 v6 连接的好方法是检查

的结果
ping6 -c 10 ipv6.google.com

然而,这是一个杂牌。但在某种程度上,它应该适用于大多数 unice,甚至更多。

【讨论】:

  • 不幸的是,这并没有真正的帮助。虽然我正在寻找一个全球范围的 IPv6 地址,但这并不意味着机器实际上已连接到互联网本身。它可能位于具有全球地址但与外部世界没有连接的自包含测试网络上。
猜你喜欢
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2015-03-09
  • 2023-04-01
  • 1970-01-01
  • 2011-03-24
  • 2015-09-19
  • 2022-01-03
相关资源
最近更新 更多