From 0c761f319de0fd4bccc6000420897cd9b2123ce4 Mon Sep 17 00:00:00 2001 From: Nagrind <115041230+nagrind@users.noreply.github.com> Date: Mon, 11 Mar 2024 00:32:50 +0000 Subject: [PATCH] Add tool to parse prefixes from geolocation feeds --- rir-geofeed2prefix | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 rir-geofeed2prefix diff --git a/rir-geofeed2prefix b/rir-geofeed2prefix new file mode 100755 index 0000000..d3bcad3 --- /dev/null +++ b/rir-geofeed2prefix @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Copyright (c) 2024 Nagrind +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +set -euo pipefail + +err() { echo "${@}" 1>&2; exit 1; } +usage() { err "Usage: $(basename "${0}") [-4|-6] "; } + +declare mode="" +while getopts ":46" opts; do + case "${opts}" in + 4) mode+="\." ;; + 6) mode+=":" ;; + *) usage ;; + esac +done +shift $((OPTIND-1)) + +[[ ${#} != 1 ]] && usage + +result="$(curl --silent --user-agent "rir-geofeed2prefix/0.0.1" -- "${1}" | \ + gawk -F ',' '{ if (!/^#/ && tolower($1) ~ /^[0-9a-f].*['"${mode:-\.:}"']/) \ + print $1 }')" + +readarray -t lines <<< "${result}" +# shellcheck disable=SC2015 +[[ ${#lines[@]} != 0 && -n "${lines[0]}" ]] && echo "${result}" || \ + err "No entries found"