【问题标题】:How to detect if system has IPv6 enabled in a UNIX shell script?如何检测系统是否在 UNIX shell 脚本中启用了 IPv6?
【发布时间】:2017-02-20 08:12:05
【问题描述】:

我有一个 shell 脚本,它正在各种 POSIX 环境中执行,例如 Linux、Mac OSX 甚至 Cygwin。该脚本需要可靠地检测给定系统是否启用了 IPv6。例如。我至少可以使用 IPv6 本地环回 (::1)。 所以问题是: 如何检测系统是否以 POSIX 兼容的方式在 UNIX shell 中启用了 ipv6?

【问题讨论】:

  • 它们都支持 IPv6。你的意思是测试他们是否启用?或者有一个全球地址?还是默认路由?还是别的什么?
  • 好点。谢谢你。 启用 IPv6 是要求 - 我编辑了问题。
  • 可以为每个设备单独启用 IPv6。当我断定检查是否为环回设备启用了 IPv6 是您所追求的时,我是否正确阅读了您的问题?
  • @ᴠɪɴᴄᴇɴᴛ 我在问题中添加了该信息,启用了 ipv6 的环回设备就足够了。

标签: linux macos shell unix ipv6


【解决方案1】:

这可以通过检查/proc/net/if_inet6的存在来测试,如下:

test -f /proc/net/if_inet6 && echo "IPv6 supported" || echo "IPv6 not supported"

我已经在 Windows 的 Ubuntu、Mint、Raspberry PI 和 Bash shell 上对其进行了测试,并且它在所有这些环境中都可以正常工作。

【讨论】:

  • 谢谢。在 Mac OSX 上,它错误地显示“不支持 IPv6” - 因为 '/proc/net/if_inet6' 是 Linux 特定的。
  • sysctl -a | grep disable_ipv6 呢?
  • OSX 中的其他路径可以在||ed 测试之前作为&& 进行测试?祝大家好运。
  • ifconfig -a | grep inet6 返回在 Mac 上可用的东西。 sysctl 没有。
  • 适用于 OS X/macOS 的特定测试是 networksetup -listallnetworkservices | while read ns; do networksetup -getinfo "${ns}" | grep IPv6; done。您可以在 which sw_vers &> /dev/null ; if [ $? -eq 0 ]; then … 之后有条件地使用它。
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 2012-03-29
  • 1970-01-01
  • 2013-01-30
  • 2018-03-16
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多