D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
sbin
/
modules
/
firewall
/
geoip
/
Filename :
db-ip-lite
back
Copy
#!/bin/bash -e # Free IP Geolocation by DB-IP: https://db-ip.com/db/download/ip-to-country-lite VAR_D="/usr/local/psa/var/modules/firewall/geoip/`basename "$0"`.d" die() { echo "`basename "$0"`: $*" >&2 exit 1 } load_settings() { [ ! -s "$VAR_D/settings.sh" ] || . "$VAR_D/settings.sh" } save_settings() { cat > "./settings.sh" <<-EOT : \${DOWNLOAD_TIMEOUT:=$DOWNLOAD_TIMEOUT} EOT } exists() { [ -s "$VAR_D/db.sqlite3" ] } fetch() { load_settings rm -rf "$VAR_D".* mkdir -p "`dirname "$VAR_D"`" local tgt_d= tgt_d="`mktemp -d "$VAR_D.XXXXXX"`" chmod 700 "$tgt_d" cd "$tgt_d" local url="https://download.db-ip.com/free/dbip-country-lite-`date -d 'now - 1 day' --utc +%Y-%m`.csv.gz" date --utc --rfc-3339=seconds > updated-at save_settings curl ${DOWNLOAD_TIMEOUT:+-m "$DOWNLOAD_TIMEOUT"} -fsSL "$url" | gzip -cd > dbip.csv sqlite3 db.sqlite3 <<-EOT CREATE TABLE ips (ip_from TEXT, ip_to TEXT, country_iso_code TEXT); CREATE INDEX ips_code ON ips (country_iso_code); .mode csv .import dbip.csv ips EOT [ "`sqlite3 db.sqlite3 'SELECT count(*) FROM ips;'`" -gt 0 ] || die "Downloaded DB is empty" rm -f dbip.csv rm -rf "$VAR_D" mv -fT "$tgt_d" "$VAR_D" } list() { local country="$1" [ -n "$country" ] || die "--list requires a single 2-letter ISO country code argument" sqlite3 "$VAR_D/db.sqlite3" \ "SELECT ip_from || '-' || ip_to FROM ips WHERE country_iso_code = '$country';" } case "$1" in --exists) exists ;; --fetch) fetch ;; --list) list "$2" ;; *) die "Unknown command: '$1'" ;; esac