;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SERVERCHECK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;info: ; ; by wiebe @ QuakeNet ; version 1.0 (written and tested on mIRC 6.15) ; ; ; last edit: Fri Jul 02 2004 ; ; ;What does this script do? ; ; script allows you to validate a server based on network - servername - serverip ; ; it is possible for any server to have any servername and network token ; and to fake services such as (x@channels.undernet.org or Q@CServe.quakenet.org) ; this makes mirc's perform unreliable for sensitive things, such as passwords ; ; it is not (or at least should not be) possible to fake a server's ip ; this script compares the network - servername - serverip to its list and returns $true or $false ; ; *** you shoud NEVER put passwords in any script/file (not even with this!) *** ; see example script at end of file, i login with Q / X that way ; ; note: $serverip returns the ip of the otherside, so when using a bnc, it returns the bnc's ip ; ; ;How to use this script? ; ; script comes with a list of QuakeNet and UnderNet servers, its possible to add other networks ; ip's / servers may change, so adding/removing entries could be needed at times ; ; $servercheck ; checks the current connection and returns $true or $false ; ; $servercheck(network) ; in case, the 'network' or server has no network token, you can specify one ; ; $servercheck(network,server|ip) ; returns 'serverip servername' ; ; $servercheck(network,server|ip,N) ; for wildcards, returns the results for the Nth server, 0 returns total of matches, N is 1 by default ; ; .ip and .server property ; when used returns only the serverip or servername ; ; /servercheck -l [network] ; to list all or the specified network ; ; /servercheck -a ; to add a server to the list ; ; /servercheck -r ; to remove a server from the list ; ; /servercheck reload ; to load the list from the ini file (only needed when manually changed) ; ; /servercheck -h ; to see help ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; block colors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS SERVERCHECK.INI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l servercheck.ini { ; ini file to use return servercheck.ini } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS SERVERCHECK.HASH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l servercheck.hash { ; hash table to use return servercheck } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS SERVERCHECK ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; /servercheck -a ; /servercheck -r ; /servercheck -l [network] ; $servercheck(network,server|ip,N) .ip .server alias servercheck { ; identifier part if ($isid) { | if ($0 isnum 0-1) { if ($gettok($hget($servercheck.hash,$hfind($servercheck.hash,$+($iif($0 == 1,$1,$network),$chr(160),$serverip))),2,32) == $server) { return $true } return $false } if ($hfind($servercheck.hash,$+($1,$chr(160),$2),$iif($3 isnum 0-,$3,1),w)) || ($hfind($servercheck.hash,$1 $2,$iif($3 isnum 0-,$3,1),w).data) { var %r = $ifmatch if ($3 == 0) { return %r } if ($prop == ip) { return $iif($gettok(%r,2,160) != $null,$ifmatch,%r) } if ($prop == server ) { return $iif($gettok($hget($servercheck.hash,%r),2,32) != $null,$ifmatch,%r) } return $iif($gettok(%r,2,160) != $null,$ifmatch,%r) $iif($gettok($hget($servercheck.hash,%r),2,32) != $null,$ifmatch,%r) } return } var %cmd = $readini($mircini,n,text,commandchar) $+ servercheck ; add if ($1 == -a) { if ($0 >= 4) { writeini $servercheck.ini $2-4 servercheck.load echo -aqg * added $4 ( $+ $3 $+ ) to network $2 var %result = * added $4 ( $+ $3 $+ ) to network $2 } else { echo -aqg * not enough parameters, %cmd -a var %result = * not enough parameters $+ $chr(44) %cmd -a } } ; remove elseif ($1 == -r) { if ($0 >= 3) { remini $servercheck.ini $2-3 if ($ini($servercheck.ini,$2,0) == 0) { remini $servercheck.ini $2 } echo -aqg * removed $3 from network $2 var %result = * removed $3 from network $2 servercheck.load } else { echo -aqg * not enough parameters, %cmd -r var %result = * not enough parameters $+ $chr(44) %cmd -r } } ; list elseif ($1 == -l) { if ($2 != $null) { var %x = 1 echo -aqg * list ( $+ $2 $+ ) while ($ini($servercheck.ini,$2,0) != 0) && ($ini($servercheck.ini,$2,%x) != $null) { var %i = $readini($servercheck.ini,n,$2,$ifmatch) echo -aqg     $ifmatch %i inc %x } echo -aqg * end of list ( $+ $2 $+ ) } else { var %y = 1 echo -aqg * list while ($ini($servercheck.ini,0) != 0) && ($ini($servercheck.ini,%y) != $null) { var %x = 1, %s = $ifmatch if ($ini($servercheck.ini,%s,0) != 0) { echo -aqg   network %s while ($ini($servercheck.ini,%s,0) != 0) && ($ini($servercheck.ini,%s,%x) != $null) { var %i = $readini($servercheck.ini,n,%s,$ifmatch) echo -aqg     $ifmatch %i inc %x } } inc %y } echo -aqg * end of list } } ; reload elseif ($1 == reload) { servercheck.load | echo -aqg * loaded from $servercheck.ini | var %result = * loaded from $servercheck.ini } ; help elseif ($1 == -h) { echo -aqg * help echo -aqg   $!servercheck echo -aqg      checks the current connection and returns $true or $false echo -aqg  echo -aqg   $!servercheck(network) echo -aqg      in case, the 'network' or server has no network token, you can specify one echo -aqg  echo -aqg   $!servercheck(network,server|ip) echo -aqg      returns 'serverip servername' echo -aqg  echo -aqg   $!servercheck(network,server|ip,N) echo -aqg      for wildcards, returns the results for the Nth server, 0 returns total of matches, N is 1 by default echo -aqg  echo -aqg   .ip and .server property echo -aqg      when used returns only the serverip or servername echo -aqg  echo -aqg   /servercheck -l [network] echo -aqg      to list all or the specified network echo -aqg  echo -aqg   /servercheck -a echo -aqg      to add a server to the list echo -aqg  echo -aqg   /servercheck -r echo -aqg      to remove a server from the list echo -aqg  echo -aqg   /servercheck reload echo -aqg      to load the list from the ini file (only needed when manually changed) echo -aqg  echo -aqg   /servercheck -h echo -aqg      to see this help echo -aqg * end of help } return %result } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ALIAS SERVERCHECK.LOAD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; alias -l servercheck.load { if ($hget($servercheck.hash)) { hfree $servercheck.hash } var %s = 1 while ($ini($servercheck.ini,0) != 0) && ($ini($servercheck.ini,%s) != $null) { var %section = $ifmatch, %i = 1 while ($ini($servercheck.ini,%s,0) != 0) && ($ini($servercheck.ini,%s,%i) != $null) { var %item = $ifmatch, %value = $readini($servercheck.ini,n,%section,%item) hadd -m $servercheck.hash $+(%section,$chr(160),%item) %section %value inc %i } inc %s } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:start:{ if (!$isfile($servercheck.ini)) { ; quakenet writeini $servercheck.ini quakenet 212.112.132.41 jubiigames.dk.quakenet.org writeini $servercheck.ini quakenet 62.79.27.107 tiscali.dk.quakenet.org writeini $servercheck.ini quakenet 80.64.11.110 mediatraffic.fi.quakenet.org writeini $servercheck.ini quakenet 62.73.33.48 pelikaista.fi.quakenet.org writeini $servercheck.ini quakenet 193.27.78.5 euroserv.fr.quakenet.org writeini $servercheck.ini quakenet 62.26.123.5 splatterworld1.de.quakenet.org writeini $servercheck.ini quakenet 62.26.123.7 splatterworld2.de.quakenet.org writeini $servercheck.ini quakenet 62.26.123.12 splatterworld3.de.quakenet.org writeini $servercheck.ini quakenet 82.211.45.65 sw.de.quakenet.org writeini $servercheck.ini quakenet 82.211.45.66 sw2.de.quakenet.org writeini $servercheck.ini quakenet 193.120.201.111 ign.ie.quakenet.org writeini $servercheck.ini quakenet 194.185.88.200 ngi1.it.quakenet.org writeini $servercheck.ini quakenet 194.185.88.201 ngi2.it.quakenet.org writeini $servercheck.ini quakenet 194.109.129.222 xs4all.nl.quakenet.org writeini $servercheck.ini quakenet 193.213.112.50 oslo.no.quakenet.org writeini $servercheck.ini quakenet 193.213.112.155 online1.no.quakenet.org writeini $servercheck.ini quakenet 193.213.112.156 online2.no.quakenet.org writeini $servercheck.ini quakenet 130.240.22.202 ludd.se.quakenet.org writeini $servercheck.ini quakenet 217.75.98.138 port80a.se.quakenet.org writeini $servercheck.ini quakenet 217.75.98.139 port80b.se.quakenet.org writeini $servercheck.ini quakenet 217.75.98.140 port80c.se.quakenet.org writeini $servercheck.ini quakenet 195.54.159.109 stockholm.se.quakenet.org writeini $servercheck.ini quakenet 213.131.131.155 wineasy1.se.quakenet.org writeini $servercheck.ini quakenet 213.131.131.156 wineasy2.se.quakenet.org writeini $servercheck.ini quakenet 195.68.221.111 b0rk.uk.quakenet.org writeini $servercheck.ini quakenet 213.48.150.3 blueyonder1.uk.quakenet.org writeini $servercheck.ini quakenet 213.48.150.5 blueyonder2.uk.quakenet.org writeini $servercheck.ini quakenet 194.159.164.210 demon1.uk.quakenet.org writeini $servercheck.ini quakenet 194.159.164.211 demon1.uk.quakenet.org writeini $servercheck.ini quakenet 194.159.164.212 demon1.uk.quakenet.org writeini $servercheck.ini quakenet 212.42.10.133 multiplay.uk.quakenet.org ; undernet writeini $servercheck.ini undernet 194.134.7.194 Amsterdam.NL.EU.undernet.org writeini $servercheck.ini undernet 194.134.7.195 Amsterdam2.NL.EU.undernet.org writeini $servercheck.ini undernet 62.231.74.10 bucharest.ro.eu.undernet.org writeini $servercheck.ini undernet 217.169.140.245 Carouge.CH.EU.Undernet.org writeini $servercheck.ini undernet 193.109.122.67 Ede.NL.EU.UnderNet.Org writeini $servercheck.ini undernet 193.109.122.68 ede2.nl.eu.undernet.org writeini $servercheck.ini undernet 62.235.13.228 Elsene.Be.Eu.undernet.org writeini $servercheck.ini undernet 193.110.95.1 Geneva.CH.EU.Undernet.org writeini $servercheck.ini undernet 129.27.9.248 graz.at.Eu.UnderNet.org writeini $servercheck.ini undernet 129.27.9.247 graz2.at.Eu.UnderNet.org writeini $servercheck.ini undernet 195.197.175.21 Helsinki.FI.EU.Undernet.org writeini $servercheck.ini undernet 195.47.220.2 Lelystad.NL.EU.UnderNet.Org writeini $servercheck.ini undernet 213.131.131.150 lidingo.se.eu.undernet.org writeini $servercheck.ini undernet 213.48.150.13 London.UK.Eu.UnderNet.org writeini $servercheck.ini undernet 195.68.221.221 London2.UK.EU.Undernet.Org writeini $servercheck.ini undernet 193.254.240.246 Milan.IT.EU.Undernet.Org writeini $servercheck.ini undernet 195.204.1.130 Oslo1.NO.EU.undernet.org writeini $servercheck.ini undernet 195.204.1.132 Oslo2.NO.EU.undernet.org writeini $servercheck.ini undernet 195.54.102.4 Stockholm.SE.Eu.Undernet.org writeini $servercheck.ini undernet 213.48.150.1 Surrey.UK.EU.Undernet.Org writeini $servercheck.ini undernet 161.53.2.81 Zagreb.Hr.EU.UnderNet.org writeini $servercheck.ini undernet 201.224.87.98 PanamaCity.PA.Undernet.Org writeini $servercheck.ini undernet 204.193.136.54 Ashburn.VA.US.Undernet.Org writeini $servercheck.ini undernet 199.184.165.133 fairfax.va.us.undernet.org writeini $servercheck.ini undernet 64.235.225.250 LosAngeles.CA.US.Undernet.Org writeini $servercheck.ini undernet 208.247.17.10 mesa.az.us.undernet.org writeini $servercheck.ini undernet 66.198.160.2 Miami.FL.US.Undernet.org writeini $servercheck.ini undernet 209.67.60.33 Princeton.NJ.US.Undernet.Org writeini $servercheck.ini undernet 216.152.77.10 SanJose.CA.us.undernet.org writeini $servercheck.ini undernet 66.197.0.145 Sterling.VA.US.Undernet.Org } servercheck.load } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; EXAMPLE SCRIPT 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; // to make mirc evaluated the input => $readini($mircini,n,text,commandchar) ; . command prefix to make the output hidden ; command prefix to force the msg command and not a possible msg alias ; $$ command is only done when parameter is specified ; $? input box ; $?* to mask input ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CONNECT EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:connect:{ if ($servercheck) { if ($network === QuakeNet) { echo -sc info * Servercheck: $server with $serverip is a known $network server editbox -s $+($str($readini($mircini,n,text,commandchar),2),.!MSG) Q@CServe.quakenet.org AUTH $$!?*="account" $$!?*="password" } elseif ($network === UnderNet) { echo -sc info * Servercheck: $server with $serverip is a known $network server editbox -s $+($str($readini($mircini,n,text,commandchar),2),.!MSG) x@channels.undernet.org LOGIN $$!?*="account" $$!?*="password" } } else { if ($network == quakenet) || ($network == undernet) { echo -sc info2 warning: $server ( $+ $serverip $+ ) is not a known server of $network irc network } } } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; EXAMPLE SCRIPT 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TEXT EVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; on *:text:!servercheck &:#wiebe,#woobie:{ if ($servercheck($network,$2,1)) { msg $chan servername: $gettok($ifmatch,2,32) ip: $gettok($ifmatch,1,32) is a valid server } else { msg $chan unknown server/ip } }