VHost listing script

From ProjectWiki
Revision as of 00:23, 24 November 2010 by Iqoquhir (Talk | contribs)
Jump to: navigation, search

UNDER COSTRUCTION, PLEASE SEE THIS POST IN RESERVE COPY

<big>vhosts - vhost listing script</big>

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

  1. !/usr/local/bin/bash
  1. Settings
      1. regexp for IP search (first octect of IP addresses should be sufficient) ###
      2. to search multiple subnets use the infix operator | such as:
  1. IPSEARCH="147|64"

IPSEARCH="204";

  1. IPv6 use the first few digits like so...
  2. IPSEARCH="2001:5c0";
      1. colors ###
  1. title color

COL1="\x1b[0;31;40m";

  1. ip color

COL2="\x1b[0;32;40m";

  1. '=' color

COL3="\x1b[0;34;40m";

  1. domain color

COL4="\x1b[0;33;40m";

  1. error color

COL5="\x1b[0;31;40m";

  1. colors off (back to natural terminal colors)

COLOFF="\x1b[0;37;00m";

      1. footer (Displayed at end of list) ###

FOOTER="Type v6hosts for ipv6 hosts"

      1. Command paths ###

IFCONFIG="/sbin/ifconfig"; GREP="/usr/bin/grep"; AWK="/usr/bin/awk"; HOST="/usr/bin/host";

  1. 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

    1. 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">

  1. !/bin/bash
  1. Settings
      1. regexp for IP search (first octect of IP addresses should be sufficient) ###
      2. to search multiple subnets use the infix operator | such as:
  1. IPSEARCH="147|64"

IPSEARCH="190|200";

  1. IPv6 use the first few digits like so...
  2. IPSEARCH="2001:5c0";
      1. colors ###
  1. title color

COL1="\x1b[0;31;40m";

  1. ip color

COL2="\x1b[0;32;40m";

  1. '=' color

COL3="\x1b[0;34;40m";

  1. domain color

COL4="\x1b[0;33;40m";

  1. error color

COL5="\x1b[0;31;40m";

  1. colors off (back to natural terminal colors)

COLOFF="\x1b[0;37;00m";

      1. footer (Displayed at end of list) ###

FOOTER="Enjoy!"

      1. Command paths ###

IFCONFIG="/sbin/ifconfig"; GREP="/bin/grep"; AWK="/usr/bin/awk"; HOST="/usr/bin/host";

  1. 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

    1. erisu, 2009

</source>

Personal tools
irssi scripts
eggdrop scripts