最近我经常需要查看ZeroTier中某个网络的设备在线情况和网络中每个设备的公网IP。由于ZeroTier的Web管理端做的不是很易用,每次都登录my.zerotier.com
查看信息特别不方便。调研了一下,发现ZeroTier官方提供的API接口
Returns a list of Members on the network正好能提供我所需要的信息。所以写了一个one-line shell命令在终端用表格展示一下结果。
首先,安装必备的软件。这行命令需要curl
和jq
这两个工具。Linux一般默认安装了curl
,jq
则需要手动安装。安装命令为:
# 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