VHost listing script

From ProjectWiki
(Difference between revisions)
Jump to: navigation, search
m (Reverted edits by Iqoquhir (Talk); changed back to last version by Wikisysop)
(WXXDDmdHgBO)
Line 1: Line 1:
<big>vhosts - vhost listing script</big>
+
I'm not wohrty to be in the same forum. ROTFL
 
+
__TOC__
+
==What is it?==
+
Servers dedicated for irc chat clients (aka: shell servers) often provide multiple IP addresses with cute names. These are commonly known as 'vanity hosts' or vhosts and usually have colorful or descriptive IP names that the user may choose for outgoing connections so that their hostname shows up as fancy.host.name.com instead of 1-124-51.lame.broadbandsupplier.com. Fun fun fun ^^
+
 
+
The script below provides a means to list the names of all the IPs on the server as well as performing some checks such as checking that the forward host-name resolves to the reverse IP. In this way its useful as a diagnostic tool for shell administrators as well as providing a list of locally available vhosts for users.
+
 
+
The result is something like this (but in pretty colors ^^):
+
<pre>
+
[adminuser@l33t /home/adminuser]# vhosts
+
Hostnames for l33t.server.com
+
241.12.191.18 = l33t.server.com.
+
241.12.191.19 = my.hostname.org.
+
241.12.191.20 = burp.bel.ch.
+
241.12.191.21 = etc.etc.name.net.
+
</pre>
+
 
+
* 2009.05.18 ~ added better support for ipv6 ^^
+
 
+
==How to use it?==
+
Copy paste the code below into a text edit, change the IPSEARCH param, save as something like 'vhosts', change flags to executable and then type ./vhosts, iotw:
+
<source lang="bash">
+
emacs vhosts
+
</source>
+
copy/pasta the bash source code from below, edit the IPSEARCH parameter, and save here... for instance if your first IP on box was 241.12.191.18 you'd use:<bR>
+
IPSEARCH="241"
+
 
+
You may also want to change the FOOTER that is displayed at bottom, or modify the colors.
+
 
+
Next make it executable, then run it:<br>
+
<source lang="bash">
+
chmod 755 vhosts
+
./vhosts
+
</source>
+
 
+
If the script is placed in the shell's search path such as /usr/local/bin/ directory the script will be available to all users.
+
 
+
==Bash Source Code (bsd)==
+
<source lang="bash">
+
#!/usr/local/bin/bash
+
 
+
#####################
+
# Settings
+
#####################
+
 
+
### regexp for IP search (first octect of IP addresses should be sufficient) ###
+
### to search multiple subnets use the infix operator |  such as:
+
#IPSEARCH="147|64"
+
IPSEARCH="204";
+
#IPv6 use the first few digits like so...
+
#IPSEARCH="2001:5c0";
+
 
+
### colors ###
+
#title color
+
COL1="\x1b[0;31;40m";
+
#ip color
+
COL2="\x1b[0;32;40m";
+
#'=' color
+
COL3="\x1b[0;34;40m";
+
#domain color
+
COL4="\x1b[0;33;40m";
+
#error color
+
COL5="\x1b[0;31;40m";
+
#colors off (back to natural terminal colors)
+
COLOFF="\x1b[0;37;00m";
+
 
+
### footer (Displayed at end of list) ###
+
FOOTER="Type v6hosts for ipv6 hosts"
+
 
+
### Command paths ###
+
IFCONFIG="/sbin/ifconfig";
+
GREP="/usr/bin/grep";
+
AWK="/usr/bin/awk";
+
HOST="/usr/bin/host";
+
 
+
##################
+
#Code goes here
+
##################
+
 
+
HOSTNAME=`hostname`;
+
echo -en "$COL1 Hostnames for $HOSTNAME\n";
+
for ip in `$IFCONFIG | $GREP inet | $AWK '{print $2}' | $GREP -E "$IPSEARCH"`;
+
do
+
  echo -ne "$COL2$ip $COL3=";
+
  if hostreply=`$HOST $ip`; then
+
    domain=`echo $hostreply | $GREP domain | $AWK '{print $5}'`;
+
    if fwdreply=`$HOST -t A $domain`; then
+
      forward=`echo "$fwdreply" | $AWK '{print $4}'`;
+
      if [ "$forward" = "$ip" ]; then
+
        error="";
+
      else
+
        error="$COL5(Forward lookup mismatch: $forward)"; 
+
      fi
+
    else
+
      error="$COL5(forward does not resolve)";
+
    fi
+
    echo -ne "$COL4 $domain $error\n";
+
  else
+
    echo -ne "$COL5 reverse lookup failed ._.\n";
+
  fi
+
done
+
 
+
echo -ne "$COLOFF\n";
+
if [ -n "$FOOTER" ]; then
+
  echo $FOOTER
+
fi
+
 
+
## erisu, 2009
+
#######################
+
</source>
+
 
+
==Bash Source Code (Linux)==
+
Decided to post another version after fixing some issues with some Linuxs printing "addr:XXX.XXX.XXX.XXX" from ifconfig. Also made the command paths Linux friendly. ^_^
+
<source lang="bash">
+
#!/bin/bash
+
 
+
#####################
+
# Settings
+
#####################
+
 
+
### regexp for IP search (first octect of IP addresses should be sufficient) ###
+
### to search multiple subnets use the infix operator |  such as:
+
#IPSEARCH="147|64"
+
IPSEARCH="190|200";
+
#IPv6 use the first few digits like so...
+
#IPSEARCH="2001:5c0";
+
 
+
### colors ###
+
#title color
+
COL1="\x1b[0;31;40m";
+
#ip color
+
COL2="\x1b[0;32;40m";
+
#'=' color
+
COL3="\x1b[0;34;40m";
+
#domain color
+
COL4="\x1b[0;33;40m";
+
#error color
+
COL5="\x1b[0;31;40m";
+
#colors off (back to natural terminal colors)
+
COLOFF="\x1b[0;37;00m";
+
 
+
### footer (Displayed at end of list) ###
+
FOOTER="Enjoy!"
+
 
+
### Command paths ###
+
IFCONFIG="/sbin/ifconfig";
+
GREP="/bin/grep";
+
AWK="/usr/bin/awk";
+
HOST="/usr/bin/host";
+
 
+
##################
+
#Code goes here
+
##################
+
 
+
HOSTNAME=`hostname`;
+
echo -en "$COL1 Hostnames for $HOSTNAME\n";
+
for tip in `$IFCONFIG | $GREP inet | $AWK '{print $2}' | $GREP -E "$IPSEARCH"`;
+
do
+
  IFS=":"
+
  zip=($tip);
+
  ip=${zip[1]};
+
  echo -ne "$COL2$ip $COL3=";
+
  if hostreply=`$HOST $ip`; then
+
    domain=`echo $hostreply | $GREP domain | $AWK '{print $5}'`;
+
    if fwdreply=`$HOST -t A $domain`; then
+
      forward=`echo "$fwdreply" | $AWK '{print $4}'`;
+
      if [ "$forward" = "$ip" ]; then
+
        error="";
+
      else
+
        error="$COL5(Forward lookup mismatch: $forward)";
+
      fi
+
    else
+
      error="$COL5(forward does not resolve)";
+
    fi
+
    echo -ne "$COL4 $domain $error\n";
+
  else
+
    echo -ne "$COL5 reverse lookup failed ._.\n";
+
  fi
+
done
+
 
+
echo -ne "$COLOFF\n";
+
if [ -n "$FOOTER" ]; then
+
  echo $FOOTER
+
fi
+
 
+
## erisu, 2009
+
#######################
+
</source>
+

Revision as of 19:15, 22 July 2011

I'm not wohrty to be in the same forum. ROTFL

Personal tools
irssi scripts
eggdrop scripts