Skip to content

Instantly share code, notes, and snippets.

@YukariChiba
Created December 8, 2025 17:31
Show Gist options
  • Select an option

  • Save YukariChiba/8238538a1cd2a05f12b547dd51e54ece to your computer and use it in GitHub Desktop.

Select an option

Save YukariChiba/8238538a1cd2a05f12b547dd51e54ece to your computer and use it in GitHub Desktop.
#!/bin/bash
mkdir -p cache data
function process_file() {
file=cache/$1
dstfile=data/${1%.*}.json
generated=$(date "+%s")
sort $file | grep -v '^$' | uniq | jq -R 'if contains(":") then {prefix:.,asn:"0",maxLength:128} else {prefix:.,asn:"0",maxLength:32} end' | jq -sr "{meta:{generated:$generated},roas:.}" > $dstfile
}
while true
do
server_cnt=0
alive_cnt=0
while read server; do
[ -n "$server" ] || continue
server_name=$(echo $server | awk -F[/:] '{print $4}')
server_cnt=$((server_cnt + 1))
rm -f cache/$server_name.*
curl -s --max-time 5 "$server/flaps/active/roa" --output cache/$server_name.json
if [ -f cache/$server_name.json ]; then
alive_cnt=$((alive_cnt + 1))
else
echo $server_name failed
fi
done <servers.txt
cat cache/*.json | jq -r '.roas.[].prefix' > cache/all.txt
for minval in 2 3 5; do
sort cache/all.txt | grep -v '^$' | uniq -cd | awk -v limit=$minval '$1 > limit {print $2}' > cache/min_$minval.txt
done
for file in $(ls cache/ | grep txt); do
process_file $file
done
echo "$alive_cnt/$server_cnt fetched successful"
sleep 300
done
wait -n
exit $?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment