在 GitHub 官方文件「About GitHub's IP addresses」中,是有提到 https://api.github.com/meta 這組 API endpoint,可以取得當下的 GitHub Actions 所使用的連外 IP address,不過如果你實際掃下來後會發現量相當大,以現在的情況來說,IPv4 address 有 3708 筆,IPv6 address 則有 801 筆:
$ cat github-actions-ipv4.txt | wc 3708 3708 58233 $ cat github-actions-ipv6.txt | wc 801 801 17522
實際去看的時候會看到一些吐血的,像是這包 /31
的:
13.105.49.0/31 13.105.49.2/31 13.105.49.4/31 13.105.49.6/31 13.105.49.8/31 13.105.49.10/31 13.105.49.12/31 13.105.49.14/31 13.105.49.16/31
這包還真的就整整 128 筆,你就不能輸出個 13.105.49.0/24
嗎...
用 ChatGPT 問了要怎麼解決,被提示有 netmask 這個工具可以用,不需要另外自己編譯,可以直接用 apt 裝起來然後倒進去讓他跑就好,整包搭配 jq 與 HTTPie 處理掉 (換 curl 基本上也沒問題):
netmask --cidr -- $(http https://api.github.com/meta | jq -r '.actions[]')
Update:看到資安的朋友按讚突然想到,這邊用了 $()
把資料丟到 command line 包裝,可能會有安全上的顧慮,請自己斟酌...
不過整包 (IPv4 + IPv6) 還是有 3187 行,但總是有個方法可以整理起來用,不用自己刻一堆程式處理...