archive- Random tools & helpful resources for IRC |
git clone git://git.acid.vegas/archive.git |
Log | Files | Refs | Archive |
whoishex.pl (3202B)
1 #!/usr/bin/perl 2 # whois_hexip irssi module 3 # written by Michael Kowalchuk <michael_kowalchuk@umanitoba.ca> 4 # 5 # Every time a WHOIS or WHOWAS is run, this script checks the 6 # ident and realname for a hex encoded IP address, then decodes 7 # it, optionally reverses it, and adds it to the printed WHOIS 8 # result. Useful for looking at CGI::IRC clients. 9 # 10 # dns lookups are blocking, so if you find them to be slow, disable 11 # lookups with the whois_hexip_lookup option. 12 # 13 # usage: 14 # 15 # put this script into your autorun directory and/or load it with 16 # /SCRIPT LOAD whois_hexip 17 # 18 # there is 1 setting: 19 # /set whois_hexip_lookup ON/OFF 20 # 21 # lookup means attempt to get the hostname; if it is off you will 22 # only get the IP address 23 # 24 # 25 # changes: 26 # 24.12.2005 fix msg levels so the hexip won't end up in the wrong win 27 # 10.10.2005 allowed idents to start with ~ 28 # 07.09.2005 limit to 32 bit numbers 29 # 28.07.2005 changed realname matching to look for 0 or 1 non-word 30 # characters on either side of the hexadecimal number 31 # for less false-positives 32 # 13.07.2005 added max_realname_nonhex 33 # 12.07.2005 initial release 34 # 35 36 use strict; 37 use Irssi; 38 use Socket; 39 40 41 use vars qw($VERSION %IRSSI); 42 43 $VERSION = "1.4"; 44 %IRSSI = ( 45 authors => "Michael Kowalchuk", 46 contact => "michael_kowalchuk\@umanitoba.ca", 47 name => "whois_hexip", 48 description => "Every time a WHOIS or WHOWAS is run, this script checks the ident and realname for a hex encoded IP address, then decodes it, reverses it, and adds it to the printed WHOIS/WHOWAS result. Useful for looking at CGI::IRC clients.", 49 license => "MIT", 50 url => "http://home.cc.umanitoba.ca/~umkowa17/junk/whois_hexip.pl", 51 changed => "12.24.2005", 52 ); 53 54 my $hexreg = "[A-Fa-f0-9]+"; 55 56 sub event_server_event { 57 my ($server, $text) = @_; 58 59 # Look up the ident and whois 60 my @items = split(/ /,$text); 61 62 my $ident = $items[2]; 63 $ident =~ s/^~//; 64 65 # CGI::IRC can put the IP in the WHOIS too! Thanks mef 66 my $whois = join(" ", @items[5 .. @items] ); 67 $whois =~ s/^://; # Remove the initial : 68 $whois =~ s/\s+$//; # and any trailing whitespace 69 70 # Set $num to whatever string holds the hex ip, with 71 # priority given to the ident 72 my @numarray = undef; 73 @numarray = ($ident =~ /^\~?($hexreg)$/ ); 74 @numarray = ($whois =~ /^($hexreg)$/) if @numarray eq 0; 75 @numarray = ($whois =~ /^[^\w]($hexreg)[^\w]$/) if @numarray eq 0; 76 77 my $num = $numarray[0] if @numarray gt 0; 78 79 if( $num and length($num) <= 8 ) { 80 my $ip = inet_aton(hex $num); 81 my $display = gethostbyaddr($ip, AF_INET) 82 if Irssi::settings_get_bool($IRSSI{'name'}."_lookup"); 83 84 # If there's a DNS timeout rather than an NXDOMAIN, 85 # you get an empty string rather than undefined 86 if( not defined $display or ( $display eq "" ) ) { 87 $display = inet_ntoa($ip) 88 } 89 90 $server->printformat($items[1], MSGLEVEL_CRAP, $IRSSI{'name'}, 91 $items[1], $display ); 92 } 93 } 94 95 96 Irssi::theme_register([$IRSSI{'name'} => '{whois hexip %|$1}']); 97 98 Irssi::signal_add_last('event 311', 'event_server_event'); # WHOIS 99 Irssi::signal_add_last('event 314', 'event_server_event'); # WHOWAS 100 101 Irssi::settings_add_bool('misc', $IRSSI{'name'} . '_lookup', 1); 102