Advertisement
Guest User

hostresolve.sh

a guest
Oct 31st, 2014
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.02 KB | None | 0 0
  1. [root@enterprise hostresolve]# cat hostresolve.sh
  2. #!/bin/bash
  3.  
  4. function check_ip()
  5. {
  6.     # This function prints 'internal' or 'external' for a given IP address.
  7.     # IP addresses are listed as 'internal' if they fall into the private
  8.     # address space defined by rfc1918.
  9.     local  ip=$1
  10.     local  stat=1
  11.  
  12.     if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
  13.         OIFS=$IFS
  14.         IFS='.'
  15.         ip=($ip)
  16.         IFS=$OIFS
  17.         [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
  18.             && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
  19.         stat=$?
  20.     fi
  21.  
  22.         type=external
  23.  
  24.     if [ $stat == "0" ]; then
  25.         if [ ${ip[0]} -eq 10 ]; then
  26.                 type=internal
  27.         fi
  28.  
  29.         if [ ${ip[0]} -eq 192 ] && [ ${ip[1]} -eq 168 ]; then
  30.                 type=internal
  31.         fi
  32.  
  33.         if [ ${ip[0]} -eq 172 ] && [ ${ip[1]} -gt 15 ]  && [ ${ip[1]} -lt 32 ]; then
  34.                 type=internal
  35.         fi
  36.  
  37.     else
  38.         type="Invalid IP"
  39.     fi
  40.  
  41.         echo $type
  42. }
  43.  
  44.         echo "<table border="1">"
  45.         echo "<tr><td>Lookup Value</td><td>External IP</td><td>Internal IP</td><td>Respond to Ping</td><td>Hostname</td><td>DNS Name for Internal IP</td></tr>"
  46.  
  47. for host in $@; do
  48.         external_ip=""
  49.         external_name=""
  50.         dns=""
  51.         hostname=""
  52.         internal_ip=""
  53.         internal_name=""
  54.         ping=""
  55.         efrom="?"
  56.         ifrom="?"
  57.  
  58.         ciscoconfig="/u01/grabcfgs/configs/comparisons/indcasa1.latest"
  59.  
  60.         #First check if it's an IP address
  61.         if [ "$(check_ip ${host})" == "Invalid IP" ]; then
  62.                 #Look in external (Google) and internal DNS
  63.                 external_ip=$(dig @8.8.8.8 $host a +short | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')
  64.                 internal_ip=$(dig @192.168.10.10 $host a +short +domain=herffjones.hj-int | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')
  65.                 efrom="DNS"
  66.                 ifrom="DNS"
  67.         elif [ "$(check_ip $host)" == "external" ]; then
  68.                 external_ip="$host"
  69.                 efrom="user entry"
  70.         elif [ "$(check_ip $host)" == "internal" ]; then
  71.                 internal_ip="$host"
  72.                 ifrom="user entry"
  73.         fi
  74.  
  75.         # The external IP is empty, lets look it up in the ASA
  76.         if [ "$external_ip" == "" ]; then
  77.                 # If it's in the Cisco config, move on.
  78.                 if grep -q "$host" $ciscoconfig; then
  79.                         # Okay, here's what this does (sorry if you're reading this)
  80.                         # The inside grep looks for the IP address in the file, and a "name" line associated with it
  81.                         # The one outside of that takes the name it found before, and looks for the NAT mapping
  82.                         # The one outside of that one, takes the name it found in the nat mapping, and turns that into an IP
  83.                         external_ip=$(grep " $(grep " $(grep " $host " $ciscoconfig | grep name | awk '{print $3}')" $ciscoconfig | grep static | awk '{print $3}')" $ciscoconfig | grep name | awk '{print $2}')
  84.                        efrom="HQ ASA"
  85.                fi
  86.        fi
  87.  
  88.        # Check if we've got anything.
  89.        if [ "$internal_ip" == "" ] && [ "$external_ip" == "" ]; then
  90.                echo "<tr><td>$host</td><td colspan='5'>Unable to resolve host IP</td></tr>"
  91.                continue
  92.        fi
  93.  
  94.        external_name=$(grep -i " $external_ip " "$ciscoconfig" | grep name | awk '{print $3}')
  95.  
  96.        if [ "$external_name" == "" ] && [ "$internal_ip" == "" ] ; then
  97.                ciscoconfig="/u01/grabcfgs/configs/comparisons/edesign_asa.latest"
  98.                if grep -q $external_ip $ciscoconfig; then
  99.                        internal_ip=$(grep -i " $external_ip " "$ciscoconfig" | grep static | awk '{print $4}')
  100.                        ifrom="SW ASA"
  101.                fi
  102.        fi
  103.  
  104.        if [ "$external_name" != "" ]; then
  105.                internal_name=$(grep -i " $external_name " "$ciscoconfig" | grep static | awk '{print $4}')
  106.        fi
  107.  
  108.        if [ "$internal_name" != "" ] && [ "$internal_ip" == "" ]; then
  109.                internal_ip=$(grep -i " $internal_name" "$ciscoconfig" | grep name | awk '{print $2}')
  110.                ifrom="HQ ASA"
  111.                if [ "$internal_ip" == "" ]; then
  112.                        internal_ip=$internal_name
  113.                        ifrom="HQ ASA"
  114.                fi
  115.        fi
  116.  
  117.        if [ "$internal_ip" == "" ]; then
  118.                if grep -q $external_ip /u01/grabcfgs/configs/comparisons/hj-bigip1.clean; then
  119.                        internal_ip=$external_ip
  120.                        ifrom="HQ F5"
  121.                fi
  122.        fi
  123.  
  124.        if [ "$external_ip" == "" ]; then
  125.                external_ip="None"
  126.        fi
  127.  
  128.        if [ "$internal_ip" == "" ]; then
  129.                internal_ip="None"
  130.        fi
  131.  
  132.        # Reverse DNS Entries
  133.        dns=$(grep -h -e "$external_ip$" -e "${internal_ip:-"null"}$" /u01/grabcfgs/configs/comparisons/dns_*.latest 2>/dev/null | awk '{print $1}')
  134.  
  135.        if [ "$internal_ip" != "" ]; then
  136.                hostname=$(grep -H -e "$internal_ip\$" -e "$internal_ip " hostips/* 2>/dev/null | cut -d "/" -f 2 | cut -d ":" -f 1)
  137.  
  138.                ping=$(ping -c 1 -W 1 ${internal_ip} >/dev/null 2>&1 && echo "Yes" || echo "No")
  139.  
  140.                instanceconfig=$(ssh inxx34.herffjones.hj-int /x01/deploy/instanceinfo.sh ${host})
  141.                if [ "$hostname" == "" ]; then
  142.                        lbfiles=$(grep -H "$internal_ip" /u01/grabcfgs/configs/comparisons/*lb*.clean /u01/grabcfgs/configs/comparisons/hj-bigip1.clean 2>/dev/null | cut -d ":" -f 1 | sort -u)
  143.  
  144.                        for file in $lbfiles; do
  145.                                config=$(./print_bigipconf "$file" "$internal_ip")
  146.  
  147.                                for line in $config; do
  148.                                        item=$(echo $line | cut -d ":" -f 1)
  149.                                        variable=$(echo $line | cut -d ":" -f 2-)
  150.  
  151.                                        nodeip=""
  152.                                        port=""
  153.                                        nstatus=""
  154.                                        servername=""
  155.  
  156.                                        if [ "$item" == "ForcedSSL" ]; then
  157.                                                ssl="$variable"
  158.                                        fi
  159.  
  160.                                        #if [ "$item" == "PoolName" ]; then
  161.                                                #hostname="<b>$variable</b><br />"
  162.                                        #fi
  163.                                        #head="<table border=1><tr><td>Server</td><td>IP</td><td>Port</td><td>Status</td></tr>"
  164.                                        head="<table border=1><tr><td>Server</td><td>IP</td><td>Port</td><td>Status</td><td>Available</td><td>Priority</td></tr>"
  165.  
  166.                                        if [ "$item" == "Member" ]; then
  167.                                                nodeip=$(echo $line | cut -d ":" -f 2)
  168.                                                port=$(echo $line | cut -d ":" -f 3)
  169.                                                nstatus=$(echo $line | cut -d ":" -f 4)
  170.                                                servername=$(grep -H -e "$nodeip\$" -e "$nodeip " hostips/* 2>/dev/null | cut -d "/" -f 2 | cut -d ":" -f 1)
  171.                                                servername="<a href=hostinfo.php?hostname=${servername}>${servername}</a>"
  172.                                                avail=$(echo $line | cut -d ":" -f 5)
  173.                                                pri=$(echo $line | cut -d ":" -f 6)
  174.                                                #body="$body<tr><td>$servername</td><td>$nodeip</td><td>$port</td><td>$nstatus</td></tr>"
  175.                                                IFSBAK=$IFS
  176.                                                for line in $instanceconfig; do
  177.                                                        if echo "$line" | grep -q $nodeip; then
  178.                                                                extra=""
  179.                                                                if [ "$(echo $line | cut -d '|' -f 4)" == "coldfusion" ]; then
  180.                                                                        url="http://$(echo $line | cut -d '|' -f 2).herffjones.hj-int"
  181.                                                                        extra="<tr><td  align=\"center\"><a href="http://$(echo $line | cut -d '|' -f 3).herffjones.hj-int/CFIDE/administrator/">CFIDE Administrator</a></td></tr>"
  182.                                                                else
  183.                                                                        url="http://$(echo $line | cut -d '|' -f 2).herffjones.hj-int"
  184.                                                                fi
  185.                                                                nodeip="<table border=1><tr><td align=\"center\">${nodeip}</td></tr><tr><td  align=\"center\"><a href="$url">$(echo $line | cut -d '|' -f 2)</a></td></tr>${extra}</tr></table>"
  186.                                                                break
  187.                                                        fi
  188.                                                done
  189.                                                IFS=$IFSBAK
  190.  
  191.                                                body="$body<tr><td>$servername</td><td>$nodeip</td><td>$port</td><td><a href="${url}/health">$nstatus</a></td><td>$avail</td><td>$pri</td></tr>"
  192.                                        fi
  193.                                done
  194.  
  195.                                        if [ "$config" == "" ]; then
  196.                                                head="<table border=1>"
  197.                                                body="<tr><td align=\"center\" colspan=\"6\">ERROR: No Pool Members Configured</td></tr>"
  198.                                                ssl="unknown"
  199.                                        fi
  200.  
  201.                                        hostname="${head}${body}<tr><td align=\"center\" colspan=\"3\">Forced SSL</td><td align=\"center\" colspan=\"3\">${ssl}</td></tr></table>"
  202.                        break
  203.                        done
  204.                else
  205.                        hostname="<a href=hostinfo.php?hostname=${hostname}>${hostname}</a>"
  206.                fi
  207.        fi
  208.  
  209.        if [ "$hostname" == "</table>" ]; then
  210.                hostname=""
  211.        fi
  212.  
  213.        if [ "$(check_ip $external_ip)" != "external" ]; then
  214.                   external_ip="None"
  215.        fi
  216.  
  217.  
  218.        echo -e "<tr $([ ${ping} != "Yes" ] && echo "" || [ "x${hostname}" == "x" ] && echo "style=\"background-color:#FFFF99\"")><td><b>$host</b></td><td align=center>$external_ip (${efrom})</td><td>${internal_ip:-"UNKNOWN"} (${ifrom})</td><td>${ping:-"UNKNOWN"}</td><td>${hostname:-"UNKNOWN"}</td><td>${dns:-"UNKNOWN"}</td></tr>\n"
  219.  
  220.        hostname=""
  221.        head=""
  222.        body=""
  223.  
  224. done
  225.  
  226.        echo "</table>"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement