一行命令查看ZeroTier网络中设备IP和在线情况


最近我经常需要查看ZeroTier中某个网络的设备在线情况和网络中每个设备的公网IP。由于ZeroTier的Web管理端做的不是很易用,每次都登录my.zerotier.com查看信息特别不方便。调研了一下,发现ZeroTier官方提供的API接口 Returns a list of Members on the network正好能提供我所需要的信息。所以写了一个one-line shell命令在终端用表格展示一下结果。

首先,安装必备的软件。这行命令需要curljq这两个工具。Linux一般默认安装了curljq则需要手动安装。安装命令为:

# jq官方安装文档:https://stedolan.github.io/jq/download/

# Ubuntu
sudo apt-get install jq
# Arch
sudo pacman -S  jq
# Mac
sudo brew install jq

然后,申请一个ZeroTier的管理Token,在 Account页面的API Access Tokens处新建一个Token即可。

最后,执行下面的one-line脚本:

# 请自行替换<Token>和<NetworkID>为你申请的Token和你的网络ID
# bearer和token中间的空格不能省略。这个是ZeroTier官方指定的。
curl -s -X GET -H "Authorization: bearer <Token>" https://my.zerotier.com/api/v1/network/<NetworkID>/member  |  jq -r '(["   NodeID   ", "Online", "ZerotierIP", "  PhysicalIP  ", "Name"] | (., map(length*"-"))),(.[] | [.config.id, .online,.config.ipAssignments[0] , .physicalAddress, .name]) | @tsv'

输出结果类似于:

   NodeID       Online  ZerotierIP        PhysicalIP    Name
------------    ------  ----------      --------------  ----
f481514ad3      true    10.4.1.1        125.155.212.118 A1
f55176bfa2      false   10.4.1.2        125.157.213.8   A2
f765b69b0a      false   10.4.1.3        125.158.146.205 A3