VHost listing script

From ProjectWiki
Revision as of 05:14, 6 November 2009 by Wikisysop (Talk | contribs)
Jump to: navigation, search

vhosts - vhost listing script

Contents

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 ^^):

[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. 
  • 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:

emacs vhosts

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:
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:

chmod 755 vhosts
./vhosts

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)

#!/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
#######################

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. ^_^

#!/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
#######################
Personal tools
irssi scripts
eggdrop scripts