102 lines
No EOL
2.7 KiB
Bash
102 lines
No EOL
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
function net::exists() {
|
|
local name="${1:?}"
|
|
local result
|
|
result=$(json::net_exists "$(ctx::net)" "$name")
|
|
[[ "$result" == "true" ]]
|
|
}
|
|
|
|
function net::require_exists() {
|
|
local name="${1:?}"
|
|
if ! net::exists "$name"; then
|
|
log::error "Service not found: ${name}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function net::resolve() {
|
|
local name="${1:?}"
|
|
json::net_resolve "$(ctx::net)" "$name"
|
|
}
|
|
|
|
function net::reverse_lookup() {
|
|
local ip="${1:-}" port="${2:-}" proto="${3:-}"
|
|
[[ -z "$ip" ]] && return 0
|
|
json::net_reverse_lookup "$(ctx::net)" "$ip" "$port" "$proto"
|
|
}
|
|
|
|
function net::annotation() {
|
|
# Returns " → service:port" or "" — for display use
|
|
local ip="${1:-}" port="${2:-}" proto="${3:-}"
|
|
local match
|
|
match=$(net::reverse_lookup "$ip" "$port" "$proto")
|
|
[[ -n "$match" ]] && echo " → ${match}" || echo ""
|
|
}
|
|
|
|
function net::annotate() {
|
|
# Returns " → service:port-name" or "" for display use
|
|
local entry="${1:-}"
|
|
[[ -z "$entry" ]] && return 0
|
|
|
|
local ann=""
|
|
if [[ "$entry" == *:*:* ]]; then
|
|
# ip:port:proto
|
|
local b_ip b_port b_proto
|
|
IFS=":" read -r b_ip b_port b_proto <<< "$entry"
|
|
ann=$(net::reverse_lookup "$b_ip" "$b_port" "$b_proto")
|
|
else
|
|
# ip or ip/cidr
|
|
local ip="${entry%%/*}"
|
|
ann=$(net::reverse_lookup "$ip")
|
|
fi
|
|
|
|
[[ -n "$ann" ]] && echo "${ann}" || echo ""
|
|
}
|
|
|
|
# function net::print_entry() {
|
|
# local sign="${1:-}" entry="${2:-}" indent="${3:-6}"
|
|
|
|
# local ann
|
|
# ann=$(net::annotate "$entry")
|
|
|
|
# local color
|
|
# [[ "$sign" == "+" ]] && color="\033[0;32m" || color="\033[0;31m"
|
|
|
|
# local spaces
|
|
# spaces=$(printf '%*s' "$indent" '')
|
|
# printf "%s%b%s\033[0m %s\033[0;37m%s\033[0m\n" \
|
|
# "$spaces" "$color" "$sign" "$entry" "${ann:+ → ${ann}}"
|
|
# }
|
|
|
|
function net::print_entry() {
|
|
local sign="${1:-}" entry="${2:-}" indent="${3:-6}"
|
|
local ann
|
|
ann=$(net::annotate "$entry")
|
|
local color
|
|
[[ "$sign" == "+" ]] && color="\033[0;32m" || color="\033[0;31m"
|
|
local spaces
|
|
spaces=$(printf '%*s' "$indent" '')
|
|
printf "%s%b%s\033[0m %-20s\033[0;37m%s\033[0m\n" \
|
|
"$spaces" "$color" "$sign" "$entry" \
|
|
"${ann:+ → ${ann}}"
|
|
}
|
|
|
|
function net::print_dns_redirect() {
|
|
local ip="${1:-}" indent="${2:-6}" label="${3:-DNS}"
|
|
local spaces
|
|
spaces=$(printf '%*s' "$indent" '')
|
|
local ann
|
|
ann=$(net::annotate "$ip")
|
|
printf "%s\033[0;36m↺\033[0m %s → %s\033[0;37m%s\033[0m\n" \
|
|
"$spaces" "$label" "$ip" "${ann:+ → ${ann}}"
|
|
}
|
|
|
|
function net::print_dns_redirect_full() {
|
|
# For rule::show — slightly different prefix
|
|
local ip="${1:-}"
|
|
local ann
|
|
ann=$(net::annotate "$ip")
|
|
printf " \033[0;36m↺\033[0m Redirect all DNS → %s\033[0;37m%s\033[0m\n" \
|
|
"$ip" "${ann:+ → ${ann}}"
|
|
} |