Advertisement
marioq

xparsejsongeoip

Jun 5th, 2023 (edited)
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 9.90 KB | None | 0 0
  1. #!/bin/bash
  2. ###########
  3. # http://ip-api.com/
  4. # ottimo finché rimane free ma non è OPENSOURCE
  5. # da studiare anche per la sezione DNS
  6. # var SERVICE impostata dalla funzione checkCurl
  7.     #SERVICE=http://ip-api.com/json/$MYIP?fields=66830335
  8. #/json/{query}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting,query
  9. # /json/{query}?fields=66846719
  10. # senza "status"
  11. # /json/{query}?fields=66830335
  12. # "message" included only when status is fail
  13. # Can be one of the following: private range, reserved range, invalid query
  14. ###########
  15.  
  16. ###############
  17. function netCheck {
  18.     # controllo i route "default" | ordino il valore di "metric" | awk print il nome dell'interfaccia.
  19.     NET_iface="`ip route | grep -n default | sort -b -k 9 | awk 'NR==1 {print $5}'`"
  20.     if [ -z $NET_iface ]; then
  21.         echo "$0 $1 $2 $3"
  22.         echo "☮-----------------------☮"
  23.         echo "  Non c'è connessione di rete"
  24.         echo "☮-----------------------☮"
  25.         #help
  26.         exit 1
  27.     fi
  28.  
  29.     REMOTE_HOST=gnu.org
  30.     if [ `which fping` ]; then
  31.         PING_bin="fping -I $NET_iface -r1 -b1 -M -qaA $REMOTE_HOST"
  32.         #PING_bin="fping -Aaq $REMOTE_HOST"
  33.         REMOTE_HOSTip="`$PING_bin`"
  34.         PING_EXIT="EXIT $?"
  35.         #echo $REMOTE_HOST $REMOTE_HOSTip
  36.     else
  37.         PING_bin="ping -s 1 -l 1 -c 1 $REMOTE_HOST"
  38.         #REMOTE_HOST="`$PING_bin | grep -o 'from[[:space:]][[:print:]]*)' | tr -d '()' | awk '{print $2" "$3}'`"
  39.  
  40.         #REMOTE_HOSTip="`$PING_bin | grep -io 'ping[[:space:]]'$REMOTE_HOST'[[:print:]]*)' | tr -d '()' | awk '{print $3}'`"
  41.  
  42.         REMOTE_HOSTip="`$PING_bin 2>/dev/null | grep -io 'ping[[:space:]]'$REMOTE_HOST'[[:print:]]*)' | tr -d '()' | awk '{print $3}'`"
  43.  
  44.         #echo $REMOTE_HOST $REMOTE_HOSTip
  45.     fi
  46.  
  47.     if [ -z $REMOTE_HOSTip ]; then
  48.         echo "$0 $1 $2 $3"
  49.         echo "☮-----------------------☮"
  50.         echo "  $PING_EXIT`test -z "$PING_EXIT" && echo ERRORE ` $PING_bin "
  51.         echo "  Non c'è connettivita su Internet"
  52.         echo "☮-----------------------☮"
  53.         #help
  54.         exit 1
  55.     fi
  56.  
  57.     #LOCAL_NET_INFO="`ip route get $REMOTE_HOSTip | awk 'NR==1 {print "LOCAL_IPdev="$5 "\nLOCAL_IP4="$7 "\nLOCAL_GTW="$3}'`"
  58.     #for Q in $LOCAL_NET_INFO; do
  59.         #eval $Q
  60.     #done
  61.  
  62.     LOCAL_IPdev="`ip route | grep -n default | sort -b -k 9 | awk 'NR==1 {print $5}'`"
  63.     LOCAL_IP4="`ip address show $LOCAL_IPdev | grep 'inet[ ][0-9]*.' | awk '{print $2}'`"
  64.     LOCAL_GTW="`ip route | grep -n default | sort -b -k 9 | awk 'NR==1 {print $3}'`"
  65.  
  66.     #echo -e "LOCAL_NET_INFO\n$LOCAL_NET_INFO"
  67.     #echo ---------
  68.     #echo "LOCAL_IPdev $LOCAL_IPdev"
  69.     #echo "  LOCAL_IP4 $LOCAL_IP4"
  70.     #echo "  LOCAL_GTW $LOCAL_GTW"
  71.  
  72.     # controllo i route "default" | ordino il valore di "metric" | awk print il nome dell'interfaccia.
  73.     NET_iface="`ip route | grep -n default | sort -b -k 9 | awk 'NR==1 {print $5}'`"
  74.     if [ -z $NET_iface ]; then
  75.         echo "$0 $1 $2 $3"
  76.         echo "☮-----------------------☮"
  77.         echo "  Non c'è connessione di rete"
  78.         echo "☮-----------------------☮"
  79.         #help
  80.         exit 1
  81.     else
  82.         ping -s 1 -l 1 -c 1 gnu.org &>/dev/null
  83.         PING_EXIT=$?
  84.         if [ $PING_EXIT -gt 0 ]; then
  85.             echo "$0 $1 $2 $3"
  86.             echo "☮-----------------------☮"
  87.             echo "  ping -c 1 $REMOTE_HOST  exit $PING_EXIT"
  88.             echo "  Non c'è connettivita su Internet"
  89.             echo "☮-----------------------☮"
  90.             #help
  91.             exit 1
  92.         fi
  93.     fi
  94.     } #END function netCheck
  95. ###############
  96.  
  97. ################
  98. function curlCheck {
  99.     if [ `which curl` ]; then
  100.         SERVICE=http://ip-api.com/json/$MYIP?fields=66830335
  101.         # Per user-agent di curl
  102.         USER_AGENT="#`basename $0`_$BASHPID#"
  103.         # curl
  104.         # -s Silent
  105.         # -k Allow insecure server connections
  106.         # -L Follow redirects
  107.         # -A Send User-Agent <name> to server
  108.         # -v Make the operation more talkative
  109.         QQ="curl$CURL_v -s -k -L -A$USER_AGENT $SERVICE"
  110.         # per test
  111.         # "status":"success",
  112.         #QQ='{"continent":"Europe","continentCode":"EU","country":"Luxembourg","countryCode":"LU","region":"LU","regionName":"Luxembourg","city":"Luxembourg","district":"","zip":"L-1661","lat":49.6116,"lon":6.13193,"timezone":"Europe/Luxembourg","offset":7200,"currency":"EUR","isp":"GANDI is an ICANN accredited registrar","org":"","as":"AS29169 GANDI SAS","asname":"GANDI-AS","reverse":"xvm-109-80.dc2.ghst.net","mobile":false,"proxy":false,"hosting":true,"query":"46.226.109.80"}'
  113.     else
  114.         echo $0 $1 $2 $3
  115.         echo ☮---------------------☮
  116.         echo "    installa \"curl\""
  117.         echo ☮---------------------☮
  118.         exit 1
  119.     fi
  120. } #END function curlCheck
  121. #############
  122.  
  123. ###############
  124. function start {
  125. #echo argomenti ${#@}
  126. COUNT=0
  127. for ARG in $@ ; do
  128.     COUNT=$(($COUNT+1))
  129.     # solo i primi 3 argomenti in qualsiasi ordine per $@
  130.     if [ "$COUNT" -le "3" ]; then
  131.         case $ARG in
  132.         v | -v )
  133.             CURL_v=" -v"
  134.         ;;
  135.         h | -h )
  136.             help $@
  137.         ;;
  138.         *)
  139.             # ipAddress nomeDns da controllare
  140.             # viene verificato da QQ="curl$CURL_v -s -k -L -A$USER_AGENT $SERVICE"
  141.             # json "message":
  142.             MYIP="$ARG"
  143.         ;;
  144.         esac
  145.     fi
  146. done
  147. COUNT=
  148. } #END function start
  149. ################
  150.  
  151.  
  152. ##############
  153. function help {
  154.     cat <<WRITEhelp
  155. `echo $0 $@`
  156. ☮----   HELP  ----------☮
  157. # solo i primi 3 argomenti in qualsiasi ordine per \$@
  158. # `basename $0` [ -v | IPaddress-NomeDNS ]
  159. #     -v imposta --verbose per la risposta di "curl"
  160. #     "IPaddress" oppure "NomeDNS" per il check online
  161. #
  162. # `basename $0` [ IPaddress-NomeDNS ]
  163. #     per il check online per l'indirizzo fornito
  164. #
  165. # `basename $0`
  166. #      senza parametri check on line della connessione internet.
  167. #
  168. # `basename $0` [ -h ]
  169. #      questo help
  170. #
  171. # -v imposta curl --verbose
  172. # -h chiama la funzione help
  173. # - indirizzo da controllare, se non fornito
  174. #   la risposta di $SERVICE si riferisce alla
  175. #   connessione internet in uso"
  176. ☮-----------------------☮
  177. WRITEhelp
  178.     exit 1
  179. } #END function help
  180. ###############
  181.  
  182. ##################
  183. # prepara i valori "json" per eval "$E=$C"
  184. function var_value { # https://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash
  185.     local IFS=:
  186.     read -d \| E C # E=Entity C=Content
  187. } # END function var_value
  188. ##################
  189.  
  190.  
  191. start $@
  192. netCheck $@
  193. curlCheck $@
  194.  
  195.  
  196. #############################
  197. echo $0 $1 $2 $3
  198. echo "☮ ####################### ☮"
  199. echo " $QQ "
  200. echo "☮ ####################### ☮"
  201. #############################
  202. QQ="`$QQ`"
  203. # aggiusto l'output di "curl" per elaborarlo
  204. QQ=`echo -e "$QQ" | sed 's|,"|\|"|g' | tr -d '{'  | tr '}' '\|'`
  205.  
  206. while var_value ; do
  207.     # nome della VAR tutto upper senza apici
  208.     X=`echo ${E^^}  | sed 's|"||g'`
  209.     #X="${E^^}"
  210.     #X="${X//\"/}"
  211.  
  212.     if [ $X == OFFSET ]; then
  213.         OFFSETh=`eval TZ=$TIMEZONE date +%Z%::z`
  214.         #C="$C tz:$(($C/3600))"
  215.         C="$C tz:$OFFSETh"
  216.     fi
  217.  
  218.     eval "$X='$C'"
  219.     echo  "$X=$C"
  220. done <<<"$QQ"
  221.  
  222.     if [ -n "$MESSAGE" ]; then
  223.             echo "----------------------------"
  224.             echo " `basename $0` $1 $2 $3"
  225.             echo " ERROR-$MESSAGE-»»»$QUERY«««"
  226.             echo "----------------------------"
  227.         exit 1
  228.     fi
  229.  
  230. echo \###################
  231.     if [ -n "$QUERY" ]; then
  232.         if [ -z $MYIP ]; then
  233.             if [ `which fping` ]; then
  234.                 LOCAL_GTW=`fping -I $LOCAL_IPdev -r1 -b1 -M -qnaA $LOCAL_GTW`
  235.             fi
  236.             NET_iface_mac="`ifconfig $NET_iface | \
  237.                            grep -ioe 'ether \([[:xdigit:]]*:\)\{5\}[[:xdigit:]]*' | \
  238.                            grep -ioe '\([[:xdigit:]]*:\)\{5\}[[:xdigit:]]*'`"
  239.             ALL_LOCALip="`hostname -I``hostname -i`"
  240.             echo "questo computer-\"$HOSTNAME\""
  241.             echo " iFace $LOCAL_IPdev | mac ${NET_iface_mac^^}"
  242.             echo "    ip $LOCAL_IP4 | gtw $LOCAL_GTW"
  243.             echo "tutti gli IP di \"`hostname -f`\""
  244.             echo " ${ALL_LOCALip// / | }"
  245.             echo "\"`hostname -f`\"$LOCAL_IP4»»$LOCAL_GTW»»$QUERY»»INTERNET««"
  246.         else
  247.             if [ "$MYIP" == "QUERY" ]; then
  248.                 echo $MYIP
  249.             else
  250.                 echo $MYIP -- $QUERY
  251.             fi
  252.         fi
  253.     fi
  254. echo \###################
  255.     if [ `which fping` ]; then
  256.         #FPING="fping -daA -r 1 ${QUERY//\"/}"
  257.         #FPING="fping -I $NET_iface -dA -b8 -c1 -r1 ${QUERY//\"/}"
  258.         FPING="fping -I $NET_iface -dA -r1 ${QUERY//\"/}"
  259.         echo $FPING
  260.         FPING=`$FPING`
  261.         echo "$FPING"
  262.         echo -----
  263.         echo "  prova | host -a ${MYIP//\"/}"
  264.         echo " oppure | host -a ${QUERY//\"/}"
  265.     fi
  266.  
  267.  
  268. if [ -n "$QUERY" ]; then
  269.     echo ---------
  270.     if [[ ${#LAT} -eq 1 && $LAT -eq 0 && \
  271.           ${#LON} -eq 1 && $LON -eq 0 ]]; then
  272.         LAT=NOLatitude ; LON=NOLongitude
  273.     else
  274.         LAT=$LAT; LON=$LON
  275.     fi
  276.     #ISNUMBER=^-?[0-9\.0-9]+$
  277.     ISNUMBER=^[+-]?[[:digit:]]
  278.     if [[ $LAT =~ $ISNUMBER && $LON =~ $ISNUMBER ]]; then
  279.  
  280. ########
  281. # parameter-substitution
  282. # http://www.pluto.it/files/ildp/guide/abs/parameter-substitution.html
  283.         if [ -n "$CITY" ]; then
  284.             CITY=${CITY// /+}
  285.             CITY=${CITY//(/}
  286.             CITY=${CITY//)/}
  287.             CITY=${CITY//\"/}
  288.             PLACE=/place/$CITY
  289.  
  290.             if [ -n "$REGIONNAME" ]; then
  291.                 REGIONNAME=${REGIONNAME// /+}
  292.                 REGIONNAME=${REGIONNAME//\"/}
  293.                 PLACE=$PLACE+$REGIONNAME
  294.             fi
  295.  
  296.             if [ -n "$COUNTRY" ]; then
  297.                 COUNTRY=${COUNTRY// /+}
  298.                 COUNTRY=${COUNTRY//\"/}
  299.                 PLACE=$PLACE+$COUNTRY
  300.             fi
  301.  
  302.         else
  303.             PLACE=
  304.         fi
  305.  
  306.         echo " url-OSM=https://www.openstreetmap.org/?mlat=$LAT&mlon=$LON&zoom=10"
  307.         echo " url-ORS=https://classic-maps.openrouteservice.org/directions?n1=$LAT&n2=$LON&n3=14&b=1c&c=0&k1=en-US&k2=km"
  308.         echo "url-GMap=https://www.google.com/maps$PLACE/@$LAT,$LON,3.71z"
  309.         #echo "https://classic-maps.openrouteservice.org/directions?n1=$LAT&n2=$LON&n3=10&b=1c&c=0&k1=en-US&k2=km"
  310.         #echo "https://classic-maps.openrouteservice.org/directions?n1=$LAT&n2=$LON&n3=14&b=1c&c=0&k1=en-US&k2=km"
  311.  
  312.         echo ------
  313.     fi
  314.  
  315.  
  316. else
  317.     echo ------
  318.     echo -e "   forse il nome di dominio \"$1\" non é corretto"
  319.     echo -e "\t$SERVICE$1"
  320.     echo -e "   $QQ" | head -n 5
  321.     echo ------
  322. fi
  323.  
  324.  
  325.  
  326.  
  327. exit 0
  328. ############################################################################
  329. ############################################################################
  330. ############################################################################
  331. ############################################################################
  332. ############################################################################
  333.  
Tags: BASH geoip
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement