是否有一种可移植的方式使用unix shell命令来判断是否存在已配置的IPv6接口?

时间:2012-07-05 16:05:41

标签: shell unix ipv6

具体而言,我正在寻找一种方法来判断系统是否具有配置了全局范围的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版本中提供了类似的足够的输出。

我还缺少其他工具吗?

1 个答案:

答案 0 :(得分:0)

现在,看看你是否至少有一些v6连接的好方法是检查

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

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