Seb icon

TOR & DNSbl Script

Seb | PRO | 05/07/11 06:08:58 AM UTC | 0 ⭐ | 2060 👁️ | Never ⏰ | []
mIRC |

29.16 KB

|

None

|

0 👍

/

0 👎

; -------------------------------------
; ---          Tor-Be-Gone          ---
; --- By WTSh4rK @ irc.undernet.org ---
; ---         Version 1.1.1         ---
; -------------------------------------
;
; --- Change Log ---
;
; 20.02.2010:  The script no longer reads from the csv file, all IP addresses are stored in a hash table.
; 20.02.2010:  Update routine added, csv file can now be downloaded in mirc and added to hash more easily.
; 20.02.2010:  Old IP's are kept in the hash table for 2 weeks and will be removed if not updated, new IP's are added.
; 24.02.2010:  GUI Added
; 24.02.2010:  Now multi channel
; 24.02.2010:  Update now uses mirc socks to get ip list so no download of files are needed, 1 hour auto update added.
; 09.03.2010:  IP's are now kept for 2 days only due to the use of dynamic IP's (too many IP's in the hash)
; 26.03.2010:  Multi site updates added.
; 20.11.2010:  Added a que system, users are added to a scan que and scanned one at a time, no more timers.
; 20.11.2010:  Added DNS cache, no need to lookup addresses that have already been looked up now.
; 22.11.2010:  dronebl.org DNSBL lookup added.
; 02.01.2011:  Added Global Ignore List
; 08.02.2011:  /who channel when addresses are not found in mirc IAL hidden, stops pnp whois window poping up.
; 08.02.2011:  Other bug fixes and tidy up.
; 10.03.2011:  Multi DNSBL lookup added.
;
; ------------------
 
on 1:START: {
  unset %TBG*
  set %tbg.ini $shortfn($mircdir $+ torips\) $+ tbg.ini
  if (!$hget(tor.ips)) {
    if (!$exists(torips)) { .mkdir torips }
    if (!$exists(torips\tns_list.txt)) {
      write torips\tns_list.txt torstat.xenobite.eu
      write torips\tns_list.txt torstatus.all.de
      write torips\tns_list.txt torstatus.asprion.org
      write torips\tns_list.txt torstatus.blutmagie.de
      write torips\tns_list.txt torstatus.cyberphunk.org
      write torips\tns_list.txt torstatus.rueckgr.at
    }
    if (!$exists(torips\tor_ips.hash)) { .hmake tor.ips 1000 }
    else { .hmake tor.ips 1000 | .hload -b tor.ips torips\tor_ips.hash }
    If (!$window(@Tor-Be-Gone)) { window -k0nz @Tor-Be-Gone | .log on @Tor-Be-Gone -f Tor-Be-Gone.log }
    echo 2 -st *** Tor-Be-Gone 1.1.1 By Skxawng (WTSh4rK @ irc.Undernet.org) http://spontan-you-us.net23.net 
    echo 2 -st *** Loaded IP Address Hash, $hget(tor.ips,0).item IP's in Hash, Running Update...
    .timertbgQ 0 0.5 do.tbgQ
    tbgupdate
  }
}
 
on 1:DISCONNECT: {
  If ($window(@tbgQ)) { window -c @tbgQ }
}
 
on 1:JOIN:#: {
  if (($nick != $me) && ($istok($readini(torips\tbg.ini,lists,chans),$chan,172))) { addto.tbgQ $nick $chan }
}
 
on 1:OP:#: {
  if (($opnick == $me) && ($istok($readini(torips\tbg.ini,lists,chans),$chan,172)) && ($readini(torips\tbg.ini,$chan,scan))) { tbgscan $chan }
}
 
on 1:SERVEROP:#: {
  if (($opnick == $me) && ($istok($readini(torips\tbg.ini,lists,chans),$chan,172)) && ($readini(torips\tbg.ini,$chan,scan))) { tbgscan $chan }
}
 
alias addto.tbgQ {
  if ($1 == $me) return
  if (!%tbg.ini) set %tbg.ini $shortfn($mircdir $+ torips\) $+ tbg.ini
  If (!$window(@tbgQ)) { window -h @tbgQ }
  if (!$timer(tbgQ)) .timertbgQ 0 0.5 do.tbgQ
  if (($1 == ¬StartScanChan) || ($1 == ¬FinishScanChan)) { aline @tbgQ $1 $2 $3 $4 $5 | return }
  else aline @tbgQ $1 $2 ~ Waiting
  if ($window(@TBG-Status)) aline @TBG-Status $timestamp Added $1 from $2 to the Scan Que...
}
 
alias do.tbgQ {
  if ($line(@tbgQ,0)) {
    if ($gettok($line(@tbgQ,1),1,32) == ¬StartScanChan) {
      echo 6 -t $gettok($line(@tbgQ,1),2,32) *** [TBG] Starting to scan $iif($gettok($line(@tbgQ,1),3,32),$gettok($line(@tbgQ,1),3,32),$gettok($line(@tbgQ,1),2,32)) for TOR $iif($readini(%tbg.ini,$gettok($line(@tbgQ,1),2,32),dnsbl),and DNSBL) please wait... 
      dline @tbgQ 1 | return
    }
    if ($gettok($line(@tbgQ,1),1,32) == ¬FinishScanChan) {
      echo 6 -t $gettok($line(@tbgQ,1),2,32) *** [TBG] The TOR $iif($readini(%tbg.ini,$gettok($line(@tbgQ,1),2,32),dnsbl),and DNSBL) scan of $iif($gettok($line(@tbgQ,1),5,32),$gettok($line(@tbgQ,1),5,32),$gettok($line(@tbgQ,1),2,32)) has finished, Scanned $gettok($line(@tbgQ,1),3,32) users in $duration($calc($ctime - $gettok($line(@tbgQ,1),4,32)))
      dline @tbgQ 1 | return
    }
    if (!$address($gettok($line(@tbgQ,1),1,32),5)) {
      if ($chan($gettok($line(@tbgQ,1),2,32)).inwho) return
      else {
        .who $gettok($line(@tbgQ,1),2,32)
        set %tbg.who $gettok($line(@tbgQ,1),2,32) %tbg.who
      }
    }
    if ($gettok($line(@tbgQ,1),1,32) !ison $gettok($line(@tbgQ,1),2,32)) {
      if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Scan Que (not on channel)
      dline @tbgQ 1 | .dns -c | return
    }
    if ($address($gettok($line(@tbgQ,1),1,32),5)) {
      if ($gettok($line(@tbgQ,1),4,32) == Waiting) {
        rline @tbgQ 1 $puttok($line(@tbgQ,1),Checking $ctime,4,32)
        ;echo -s $line(@tbgQ,1)
        inc %¬tbg.scans
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Sending $gettok($line(@tbgQ,1),1,32) ( $+ $address($gettok($line(@tbgQ,1),1,32),5) $+ ) from $gettok($line(@tbgQ,1),2,32) for Check... [# $+ %¬tbg.scans $+ ]
        torchk $gettok($line(@tbgQ,1),1,32) $gettok($line(@tbgQ,1),2,32)
      }
      if (($gettok($line(@tbgQ,1),4,32) == Checking) && ($calc($ctime - $gettok($line(@tbgQ,1),5,32)) > 10)) {
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Scan Que (timeout)
        echo 2 -t @Tor-Be-Gone *** WARNING: Removed $gettok($line(@tbgQ,1),1,32) from the Scan Que (timeout)
        dline @tbgQ 1 | .dns -c | return
      }
    }
  }
}
 
alias TBGmakeDNSBL {
  ;$1 = IP address only
  if ($remove($1,.) isnum) {
    ; ************************ DNSBL Scan List ************************
    ; ****** Add your rbl lists here with a space between each ********
    ; *****************************************************************
 
    var %tbg.dnsbl_list = dnsbl.dronebl.org rbl.efnetrbl.org ircbl.ahbl.org dnsbl.swiftbl.org
 
    ; *****************************************************************
    ; *****************************************************************
    ; *****************************************************************
    var %tbg.dnsbl_c = 1
    while ($gettok(%tbg.dnsbl_list,%tbg.dnsbl_c,32)) {
      if (%tbg.dnsbl) var %tbg.dnsbl = %tbg.dnsbl $+ ¬ $+ $gettok($1,4,46) $+ . $+ $gettok($1,3,46) $+ . $+ $gettok($1,2,46) $+ . $+ $gettok($1,1,46) $+ . $+ $gettok(%tbg.dnsbl_list,%tbg.dnsbl_c,32)
      else var %tbg.dnsbl = $gettok($1,4,46) $+ . $+ $gettok($1,3,46) $+ . $+ $gettok($1,2,46) $+ . $+ $gettok($1,1,46) $+ . $+ $gettok(%tbg.dnsbl_list,%tbg.dnsbl_c,32)
      ;if ($window(@TBG-Status)) aline @TBG-Status $timestamp DNSBL Sent > $gettok($1,4,46) $+ . $+ $gettok($1,3,46) $+ . $+ $gettok($1,2,46) $+ . $+ $gettok($1,1,46) $+ . $+ $gettok(%tbg.dnsbl_list,%tbg.dnsbl_c,32)
      .dns $gettok($1,4,46) $+ . $+ $gettok($1,3,46) $+ . $+ $gettok($1,2,46) $+ . $+ $gettok($1,1,46) $+ . $+ $gettok(%tbg.dnsbl_list,%tbg.dnsbl_c,32)
      inc %tbg.dnsbl_c
    }
    return %tbg.dnsbl
  }
  else { echo -ts [TBG makeDNSBL Error] IP Address ONLY! | halt }
}
 
alias torchk {
  ;$1 = nick $2 = chan
  if (($1 == $null) || ($2 == $null)) { 
    echo -t torchk error: incorrect argument
    halt
  }
  if (!$timer(TBG.update)) { .timerTBG.update 0 3600 TBGupdate }
  if (!$hget(tor.ips)) {
    if (!$exists(torips\tor_ips.hash)) { hmake -s tor.ips 1000 }
    else { .hmake -s tor.ips 1000 | .hload -bs tor.ips torips\tor_ips.hash }
  }
  if (!$hget(tbg_dns_cache)) { 
    hmake tbg_dns_cache 1000
    if ($exists(torips\tbg_dns_cache.hash)) { hload tbg_dns_cache torips\tbg_dns_cache.hash }
  }
  if ($1 !ison $2) { dline @tbgQ 1 | halt }
  set %tbg.ignore 1
  var %tbg.ignore.list = $readini(%tbg.ini,lists,ignore)
  while ($gettok(%tbg.ignore.list,%tbg.ignore,172)) {
    if ($gettok(%tbg.ignore.list,%tbg.ignore,172) iswm $address($1,5)) {
      dline @tbgQ 1
      if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp On Ignore List, Removed $1 from the Tor Scan Que
      halt
    }
    inc %tbg.ignore
  }
  if (($address($1,4) == *!*@*.users.undernet.org) || ($1 == X)) { dline @tbgQ 1 | if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp Undernet User... Removed $1 from the Tor Scan Que | halt }
  if (($hget(tbg_dns_cache)) && ($hfind(tbg_dns_cache,$gettok($address($1,2),2,64)))) { 
    var %toraddress = $gettok($hget(tbg_dns_cache,$gettok($address($1,2),2,64)),1,32))
    if ($window(@TBG-Status)) aline 7 @TBG-Status $timestamp $1 Address found $gettok($hget(tbg_dns_cache,$gettok($address($1,2),2,64)),1,32)) in DNS cache...
  }
  else { var %toraddress = $gettok($address($1,2),2,64) }
  If (!$window(@Tor-Be-Gone)) { window -k0nz @Tor-Be-Gone | .log on @Tor-Be-Gone -f Tor-Be-Gone.log }
  if ($remove(%toraddress,.) isnum) {
    hadd -m torchk %toraddress $1 $+ ¬ $+ $2
    if ($hfind(tor.ips,%toraddress,1)) { 
      set %tbg.type 1
      kicktor $1 $2 %toraddress
      hdel torchk %toraddress
      if ($window(@TBG-Status)) aline 4 @TBG-Status $timestamp Tor Address found: ( $+ $1 $+ ) %toraddress in $2 
      dline @tbgQ 1
      if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $1 from the Tor Scan Que
      halt
    }
    else { 
      hdel torchk %toraddress
      if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp Not a Tor address ( $+ $1 $+ ) %toraddress in $2
      if (!$readini(%tbg.ini,$2,dnsbl)) {
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
        dline @tbgQ 1
        halt
      }
      if (!$hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2))) {
        rline @tbgQ 1 $addtok($line(@tbgQ,1),$TBGmakeDNSBL(%toraddress),32)
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Sending $1 for DNSBL lookup...
        halt
      }
      if ($gettok($hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2)),1,32) == good) {
        if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp $gettok($line(@tbgQ,1),1,32) not listed in DNSBL... (cached)
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
        dline @tbgQ 1
        halt
      }
      if ($gettok($hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2)),1,32) == bad) {
        if ($window(@TBG-Status)) aline 4 @TBG-Status $timestamp $gettok($line(@tbgQ,1),1,32) from $gettok($line(@tbgQ,1),2,32) listed in DNSBL (cached)
        set %tbg.type 0
        kicktor $gettok($line(@tbgQ,1),1,32) $gettok($line(@tbgQ,1),2,32) %toraddress [DNSBL] Your host is listed in a DNSBL
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
        dline @tbgQ 1
        halt
      }
    }
  }
  if (!$hget(torchk).size) hmake torchk 100  
  hadd -m torchk %toraddress $1 $+ ¬ $+ $2
  .dns %toraddress
  if ($window(@TBG-Status)) aline 7 @TBG-Status $timestamp $1 sent for DNS Lookup...
}
 
on 1:dns: {
  if (($line(@tbgQ,0)) && ($dns(0).addr == $gettok($address($gettok($line(@tbgQ,1),1,32),2),2,64))) {
    if (!$dns(1).ip) { 
      echo -t @Tor-Be-Gone DNS Error: Could not look up IP for ( $+ $gettok($hget(torchk,$dns(0).addr),1,172) $+ ) $dns(0).addr in $gettok($hget(torchk,$dns(0).addr),2,172)
      echo 7 -t $gettok($hget(torchk,$dns(0).addr),2,172) *** DNS Error: Could not look up IP for ( $+ $gettok($hget(torchk,$dns(0).addr),1,172) $+ ) $dns(0).addr in $gettok($hget(torchk,$dns(0).addr),2,172)
      if ($window(@TBG-Status)) aline 12 @TBG-Status $timestamp DNS Error: Could not look up IP for ( $+ $gettok($hget(torchk,$dns(0).addr),1,172) $+ ) $dns(0).addr in $gettok($hget(torchk,$dns(0).addr),2,172)
      hdel torchk $dns(0).addr
      dline @tbgQ 1
      if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($hget(torchk,$dns(1).addr),1,172) from the Tor Scan Que
      halt
    }
    if (!$hget(tbg_dns_cache)) { 
      hmake tbg_dns_cache 1000
      if ($exists(torips\tbg_dns_cache.hash)) { hload tbg_dns_cache torips\tbg_dns_cache.hash }
    }
    hadd tbg_dns_cache $dns(1).addr $dns(1).ip $ctime
    hsave -o tbg_dns_cache torips\tbg_dns_cache.hash
    if ($window(@TBG-Status)) aline @TBG-Status $timestamp Adding $dns(1).addr $dns(1).ip to DNS cache...
    if (($hfind(tor.ips,$dns(1).ip,1)) && ($gettok($hget(torchk,$dns(1).addr),1,172))) {
      if ($window(@TBG-Status)) aline 4 @TBG-Status $timestamp Tor Address found: ( $+ $gettok($hget(torchk,$dns(1).addr),1,172) $+ ) $dns(1).addr ( $+ $dns(1).ip $+ )
      set %tbg.type 1
      kicktor $gettok($hget(torchk,$dns(1).addr),1,172) $gettok($hget(torchk,$dns(1).addr),2,172) $dns(1).ip
      if ($window(@TBG-Status)) aline 4 @TBG-Status $timestamp Kicking and Banning $gettok($hget(torchk,$dns(1).addr),1,172) $gettok($hget(torchk,$dns(1).addr),2,172) $dns(1).ip
      hdel torchk $dns(1)
      dline @tbgQ 1
      if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($hget(torchk,$dns(1).addr),1,172) from the Tor Scan Que
    }
    else { 
      if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp Not a Tor address ( $+ $gettok($hget(torchk,$dns(1).addr),1,172) $+ ) $dns(1).addr ( $+ $dns(1).ip $+ )
      hdel torchk $dns(0).addr
      if (!$readini(%tbg.ini,$gettok($line(@tbgQ,1),2,32),dnsbl)) {
        dline @tbgQ 1
        halt
      }
      if (!$hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2))) {
        rline @tbgQ 1 $addtok($line(@tbgQ,1),$TBGmakeDNSBL($dns(1).ip),32)
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Sending $gettok($line(@tbgQ,1),1,32) for DNSBL lookup...
        halt
      }
      if ($gettok($hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2)),1,32) == good) {
        if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp $gettok($line(@tbgQ,1),1,32) not listed in DNSBL... (cached)
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
        dline @tbgQ 1
        halt
      }
      if ($gettok($hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2)),1,32) == bad) {
        if ($window(@TBG-Status)) aline 4 @TBG-Status $timestamp Listed in DNSBL, Kicking and Banning $gettok($line(@tbgQ,1),1,32) from $gettok($line(@tbgQ,1),2,32) (cached)
        set %tbg.type 0
        kicktor $gettok($line(@tbgQ,1),1,32) $gettok($line(@tbgQ,1),2,32) $dns(1).ip) [DNSBL] Your host is listed in a DNSBL ( $+ $dns(0).addr $+ )
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
        dline @tbgQ 1
        halt
      }
    }
  }
  var %tbg.qdnsbl = $gettok($line(@tbgQ,1),6,32)
  if (($line(@tbgQ,0)) && ($dns(0).addr isin %tbg.qdnsbl)) {
    if (!$dns(1).ip) {
      if ($window(@TBG-Status)) aline 3 @TBG-Status $timestamp $gettok($line(@tbgQ,1),1,32) not listed in DNSBL... ( $+ $dns(0).addr $+ )
      if ($hget(TBG_DNSBL,$address($gettok($line(@tbgQ,1),1,32),2)) != bad) .hadd -mn1800 TBG_DNSBL $address($gettok($line(@tbgQ,1),1,32),2) good $ctime
      var %tbg.qdnsbl = $remtok(%tbg.qdnsbl,$dns(0).addr,1,172)
      if (%tbg.qdnsbl) rline @tbgQ 1 $puttok($line(@tbgQ,1),%tbg.qdnsbl,6,32)
      if (!%tbg.qdnsbl) {
        if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
        dline @tbgQ 1
      }
    }
    else {
      if ($window(@TBG-Status)) aline 4 @TBG-Status $timestamp $gettok($line(@tbgQ,1),1,32) from $gettok($line(@tbgQ,1),2,32) listed in DNSBL! ( $+ $dns(0).addr $+ )
      set %tbg.type 0
      kicktor $gettok($line(@tbgQ,1),1,32) $gettok($line(@tbgQ,1),2,32) $dns(0).addr [DNSBL] Your host is listed in a DNSBL ( $+ $dns(0).addr $+ )
      .hadd -mn1800 TBG_DNSBL $address($gettok($line(@tbgQ,1),1,32),2) bad
      if ($window(@TBG-Status)) aline @TBG-Status $timestamp Removed $gettok($line(@tbgQ,1),1,32) from the Tor Scan Que
      dline @tbgQ 1
    }
  }
}
 
alias kicktor {
  ;$1 = Nick $2 = chan $3 = IP [$4- = Alt Kick Msg Over Ride]
  var %tbg.cc = 1
  var %tbg.chan.list = $readini(torips\tbg.ini,lists,chans)
  If (!$window(@Tor-Be-Gone)) { window -k0nzg1 @Tor-Be-Gone | .log on @Tor-Be-Gone -f Tor-Be-Gone.log }
  else window -g1 @Tor-Be-Gone
  echo 4 -t @Tor-Be-Gone *** $iif(%tbg.type,Tor Address:,DNSBL Address:) $address($1,5) ( $+ $3 $+ ) found in $2 
  echo 4 -t $2 *** [# $+ %¬tbg.scans $+ ] $iif(%tbg.type,Tor Address:,DNSBL Address:) $address($1,5) ( $+ $3 $+ ) found in $2 
  while ($chan(%tbg.cc)) {
    if ($istok(%tbg.chan.list,$chan(%tbg.cc),172)) {
      if ((!%tbg.type) && (!$readini(torips\tbg.ini,$chan(%tbg.cc),dnsbl))) { goto tbgbypass }
      if ($4-) { set %tbg.kick.msg [TBG $asctime(d mmm yyyy) $+ ] $4- }
      else { set %tbg.kick.msg [TBG $asctime(d mmm yyyy) $+ ] [TOR] $replace($readini(torips\tbg.ini,$chan(%tbg.cc),banmsg),[ip],$3,[addr],$address($1,2),[chan],$chan(%tbg.cc),[nick],$1) }
      if ($me isop $chan(%tbg.cc)) {
        if ($1 ison $chan(%tbg.cc)) {
          if (($network == undernet) && (r !isincs $chan($chan(%tbg.cc)).mode)) { var %tbg.mode = +rb | .timer 1 60 mode $chan(%tbg.cc) -r }
          else var %tbg.mode = +b
          raw -q mode $chan(%tbg.cc) %tbg.mode $address($1,2) $+ $crlf $+ kick $chan(%tbg.cc) $1 : %tbg.kick.msg
          If (!$window(@Tor-Be-Gone)) { window -k0nzg1 @Tor-Be-Gone | .log on @Tor-Be-Gone -f Tor-Be-Gone.log }
          else window -g1 @Tor-Be-Gone
          echo 4 -t @Tor-Be-Gone *** $iif(%tbg.type,TOR Address:,DNSBL Address:) $address($1,5) ( $+ $3 $+ ) was kicked and banned from $chan(%tbg.cc) ( $+ %tbg.kick.msg $+ ) 
        }
        if (($readini(torips\tbg.ini,$chan(%tbg.cc),x)) && (X ison $chan(%tbg.cc)) && ($chan(%tbg.cc) == $2)) { 
          .msg X ban $chan(%tbg.cc) $address($1,2) $readini(torips\tbg.ini,$chan(%tbg.cc),xdays) $+ d 75 $left(%tbg.kick.msg,124) $+ $iif($len(%tbg.kick.msg) > 124,...)
        }
      }
      if ($me !isop $chan(%tbg.cc)) {
        if (($readini(torips\tbg.ini,$chan(%tbg.cc),x)) && (X ison $chan(%tbg.cc)) && ($chan(%tbg.cc) == $2)) { 
          .msg X ban $chan(%tbg.cc) $address($1,2) $readini(torips\tbg.ini,$chan(%tbg.cc),xdays) $+ d 75 $left(%tbg.kick.msg,124) $+ $iif($len(%tbg.kick.msg) > 124,...)
        }
      }
    }
    :tbgbypass
    inc %tbg.cc
  }
}
 
alias tbgscan {
  if ((!$chan) && ($1)) { var %tbgscan = $1 }
  elseif ($chan) { var %tbgscan $chan }
  else { echo 4 -at TBGScan: Need to know what channel you want to scan. | halt }
  set %tbgscan.count 1
  var %tbg.scantime = $ctime
  addto.tbgQ ¬StartScanChan %tbgscan
  while ($nick(%tbgscan,%tbgscan.count,rv)) { 
    addto.tbgQ $nick(%tbgscan,%tbgscan.count,rv) %tbgscan 
    inc %tbgscan.count
  }
  addto.tbgQ ¬FinishScanChan %tbgscan %tbgscan.count %tbg.scantime 
  unset %tbgscan.count
}
 
alias TBGupdate { 
  if (!$exists(torips\tns_list.txt)) { echo 4 -st *** TBGupdate Error: $mircdir $+ torips\tns_list.txt is missing | halt }
  if (!$1) { set %TBG.site $read(torips\tns_list.txt) }
  else { set %TBG.site $1 }
  if (!$hget(tor.ips)) {
    if (!$exists(torips)) { .mkdir torips }
    if (!$exists(torips\tor_ips.hash)) { .hmake tor.ips 1000 }
    else { .hmake tor.ips 1000 | .hload -b tor.ips torips\tor_ips.hash }
  }
  if (!%TBG.site) { TBGupdate | halt }
  set %TBG.b4 $hget(tor.ips,0).item
  if (!$sock(TBG)) { sockopen TBG %TBG.site 80 }
}
 
 
on *:sockread:TBG:{
  if (!%TBG_csv.bytes) { set %TBG_csv.bytes 0 }
  var %stext
  sockread %stext
  if (($remove(%stext,.) isnum) && ($numtok(%stext,46) == 4)) { hadd tor.ips %stext $ctime }
  set %TBG_csv.bytes $calc(%TBG_csv.bytes + $sockbr)
}
 
on *:sockopen:TBG:{
  if ($sockerr) {
    sockclose $sockname
    echo 2 -t @Tor-Be-Gone ---
    echo 2 -t @Tor-Be-Gone *** Tor-Be-Gone: Err there was some error connecting to %TBG.site
    tbgupdate
  }
  else {
    echo 2 -t @Tor-Be-Gone ---
    echo 2 -t @Tor-Be-Gone *** Connected to %TBG.site $+ , Downloading update IP list...
    sockwrite -n $sockname GET /ip_list_all.php/Tor_ip_list_ALL.csv HTTP/1.1 
    sockwrite -n $sockname Host: %TBG.site $+ $crlf $+ $crlf
  }
}
 
on *:sockclose:TBG: {
  set %TBG_csv 1  
  set %TBG_csv.remove 0
  while ($hget(tor.ips,%TBG_csv).item) {
    if ($calc($ctime - $hget(tor.ips,%TBG_csv).data) > 86400) { hdel tor.ips $hget(tor.ips,%TBG_csv).item | inc %TBG_csv.remove }
    inc %TBG_csv
  }
  hsave -bo tor.ips torips\tor_ips.hash
  If (!$window(@Tor-Be-Gone)) { window -k0nz @Tor-Be-Gone | .log on @Tor-Be-Gone -f Tor-Be-Gone.log }
  echo 2 -t @Tor-Be-Gone *** IP's Added:3 $calc($hget(tor.ips,0).item - %TBG.b4 + %TBG_csv.remove) $+ , Removed:4 %TBG_csv.remove $+ , Now in Hash:3 $hget(tor.ips,0).item 15( $+ $bytes(%TBG_csv.bytes,k) $+ kb dl from %TBG.site $+ )
  unset %TBG.b4 | unset %TBG_csv* | unset %TBG.site
  tbg_cleandns
}
 
alias tbg_cleandns {
  set %TBG_csv1 1
  set %TBG_csv.remove 0
  while ($hget(tbg_dns_cache,%TBG_csv1).item) {
    if ($calc($ctime - $gettok($hget(tbg_dns_cache,%TBG_csv1).data,2,32)) > 172800) { hdel tbg_dns_cache $hget(tbg_dns_cache,%TBG_csv1).item | inc %TBG_csv.remove }
    inc %TBG_csv1
  }
  echo 2 -t @Tor-Be-Gone *** Addresses Removed from DNS cache:4 %TBG_csv.remove 
  set %TBG_csv1 1
  set %TBG_csv.remove 0
  while ($hget(TBG_DNSBL,%TBG_csv1).item) {
    if (($gettok($hget(TBG_DNSBL,%TBG_csv1).data,1,32) == good) && ($calc($ctime - $gettok($hget(TBG_DNSBL,%TBG_csv1).data,2,32)) > 7200)) { hdel TBG_DNSBL $hget(TBG_DNSBL,%TBG_csv1).item | inc %TBG_csv.remove }
    if (($gettok($hget(TBG_DNSBL,%TBG_csv1).data,1,32) == bad) && ($calc($ctime - $gettok($hget(TBG_DNSBL,%TBG_csv1).data,2,32)) > 172800)) { hdel TBG_DNSBL $hget(TBG_DNSBL,%TBG_csv1).item | inc %TBG_csv.remove }
    inc %TBG_csv1
  }
  echo 2 -t @Tor-Be-Gone *** Addresses Removed from DNSBL cache:4 %TBG_csv.remove 
  unset %TBG_csv*
}
 
dialog tbg {
  title "TBG+DNSBL 1.1.1 Settings"
  size -1 -1 300 120
  option dbu
 
  button "Okay",1,200 107 25 11,ok
  button "Discard",2,270 107 25 11,cancel
  button "Apply",5,235 107 25 11
  text "TBG+DNSBL 1.1.1 By Skxawng (Undernet User: WTSh4rK)",3,5 105 80 13
  button "Update IP List",4,90 107 40 11
 
  box "Channel:",10,5 3 190 20
  text "Settings for:",11,10 11 40 10
  combo 12,45 9 80 10,drop edit
  button "Add",13,133 9 25 11
  button "Remove",14,165 9 25 11
 
  box "Settings:",20,5 25 190 80
  text "Use [nick] [chan] [ip] [addr] to get nick, channel, IP and address in your kick.",21,8 33 185 10
  text "Ban Messsage:",22,8 44 45 12
  combo 23,47 42 145 10,drop edit
  check "Scan channel when you OP to check for Tor IP's already in channel?",24,8 55 180 10
  check "Use X to Kick and Ban Tor Addresses for",25,8 70 110 10
  combo 26,118 70 30 10, drop
  text "days.",27,155 71 30 10
  check "Send users for DNSBL lookup?",28,8 85 110 10
 
  box "Addresses to ignore (Global)",30,200 3 95 102
  text "",31,205 12 85 70, edit vsbar
  combo 32,205 22 85 70, edit vsbar
  button "Add",33,220 90 25 11
  button "Remove",34,252 90 25 11
}
 
on 1:dialog:tbg:init:0: {
  ;echo - %tbg.ini
  did -o tbg 31 1 $iif($len(e.g. $address($me,8)) >= 30,$left(e.g. $address($me,8),30) $+ ...,e.g. $address($me,8))
  if (!$exists($shortfn($mircdir $+ torips\) $+ tbg.ini)) { mkdir torips | writeini $shortfn($mircdir $+ torips\) $+ tbg.ini lists banmsg [nick], Anonymity online is great just not here... BANNED: [ip] ([addr])¬The Onion Router is Banned, Tor Exit Node IP: [ip] ([addr])¬BANNED: Tor Exit Node IP: [ip] ([addr]) | TBGupdate }
  set %tbg.ini $shortfn($mircdir $+ torips\) $+ tbg.ini
  didtok tbg 23 172 $readini(%tbg.ini,lists,banmsg)
  did -c tbg 23 1
  didtok tbg 12 172 $readini(%tbg.ini,lists,chans)
  didtok tbg 32 172 $readini(%tbg.ini,lists,ignore)
  var %tbg.xdays = 1
  while (%tbg.xdays < 101) {
    did -a tbg 26 %tbg.xdays
    if (%tbg.xdays = 1) did -c tbg 26 1
    inc %tbg.xdays
  }
  did -b tbg 14,23,24,25,26,33,34
 
  if ($didwm(tbg,12,$active)) {
    set %tbg.chan $didwm(tbg,12,$active)
    did -c tbg 12 $didwm(tbg,12,$active)
    did -e tbg 14,23,24,25,26
    did -b tbg 13
    if ($readini(%tbg.ini,$active,banmsg)) { did -ac tbg 23 $readini(%tbg.ini,$active,banmsg) }
    if ($readini(%tbg.ini,$active,scan)) { did -c tbg 24 }
    if ($readini(%tbg.ini,$active,x)) { did -c tbg 25 }
    if ($readini(%tbg.ini,$active,xdays)) { did -c tbg 26 $readini(%tbg.ini,$active,xdays) }
    if ($readini(%tbg.ini,$active,dnsbl)) { did -c tbg 28 }
  }
  else { did -o tbg 12 0 $active | set %tbg.chan $didwm(tbg,12,$active) }
}
 
on 1:dialog:tbg:sclick:*: {
  if (($did == 1) || ($did == 5)) { 
    writeini %tbg.ini lists chans $didtok(tbg,12,172)
    writeini %tbg.ini $did(tbg,12).seltext banmsg $did(tbg,23,0).text
    writeini %tbg.ini $did(tbg,12).seltext scan $did(tbg,24).state
    writeini %tbg.ini $did(tbg,12).seltext x $did(tbg,25).state
    writeini %tbg.ini $did(tbg,12).seltext xdays $did(tbg,26).seltext
    writeini %tbg.ini $did(tbg,12).seltext dnsbl $did(tbg,28).state
    if ($didtok(tbg,32,172)) writeini %tbg.ini lists ignore $didtok(tbg,32,172)
    else remini %tbg.ini lists ignore
  }
  if ($did == 12) {
    did -e tbg 1,14,23,24,25,26
    did -b tbg 13
    did -d tbg 23 3
    if ($readini(%tbg.ini,$did(tbg,12).seltext,banmsg)) { did -ac tbg 23 $readini(%tbg.ini,$did(tbg,12).seltext,banmsg) }
    if ($readini(%tbg.ini,$did(tbg,12).seltext,scan)) { did -c tbg 24 }
    else { did -u tbg 24 }
    if ($readini(%tbg.ini,$did(tbg,12).seltext,x)) { did -c tbg 25 }
    else { did -u tbg 25 }
    if ($readini(%tbg.ini,$did(tbg,12).seltext,xdays)) { did -c tbg 26 $readini(%tbg.ini,$did(tbg,12).seltext,xdays) }
    if ($readini(%tbg.ini,$did(tbg,12).seltext,dnsbl)) { did -c tbg 28 }
    else { did -u tbg 28 }
  }
  if ($did == 13) { 
    if ($did(tbg,12,0).text) {
      did -a tbg 12 $did(tbg,12,0).text
      did -c tbg 12 $didwm(tbg,12,$did(tbg,12,0).text)
      did -e tbg 1,14,23,24,25,26
      did -b tbg 13
      if ($readini(%tbg.ini,$did(tbg,12,0).text,banmsg)) { did -i1c 24 $readini(%tbg.ini,$did(tbg,12,0).text,banmsg) }
      if ($readini(%tbg.ini,$did(tbg,12,0).text,scan)) { did -c tbg 24 }
      if ($readini(%tbg.ini,$did(tbg,12,0).text,x)) { did -c tbg 25 }
    }
  }
  if ($did == 14) {
    if ($?!"Are you sure you want to remove $did(tbg,12).seltext $+ ?") {
      did -b tbg 1,14,23,24,25,26
      did -u tbg 24,25
      did -c tbg 26 14
      did -d tbg 23 3
      did -c tbg 23 1
      did -e tbg 13
      remini %tbg.ini $did(tbg,12).seltext
      did -d tbg 12 $did(tbg,12).sel
      writeini %tbg.ini lists chans $didtok(tbg,12,172)
      did -o tbg 12 0 $null
    }
  }
  if ($did == 4) {
    dialog -x tbg
    window -r @Tor-Be-Gone
    tbgupdate
  }
  if ($did = 33) {
    did -a tbg 32 $did(tbg,32).text
    did -b tbg 33
  }
  if ($did == 32) {
    did -e tbg 34
  }
  if ($did == 34) {
    did -d tbg 32 $did(tbg,32).sel
    did -b tbg 34
  }
}
 
on 1:dialog:tbg:edit:*: {
  if ($did == 12) {
    did -b tbg 1,14,23,24,25,26
    did -u tbg 24,25
    did -c tbg 26 14
    did -d tbg 23 3
    did -c tbg 23 1
    did -e tbg 13
  }
  if ($did == 32) {
    if ($did(tbg,32).text) did -e tbg 33
    else did -b tbg 33
  }
}
 
menu channel {
  TBG+DNSBL
  .TBG Settings:dialog -m tbg tbg
  .Show TBG Status Window:window -rd @TBG-Status
  .Maintenance
  ..Clear The Scan Que (Que $line(@tbgQ,0) $+ ): {
    if ($input(Are you sure you want to clear the scan que?,y)) { window -c @tbgQ | if ($input(Scan Que Cleared.,o)) { } }
  }
  ..Clear The DNS cache (Cached $hget(tbg_dns_cache,0).item $+ ): {
    if ($input(Are you sure you want $hget(tor.tbg_dns_cache,0).item IP's deleted from the DNS IP cache?,y)) { .hfree tbg_dns_cache | .hmake tbg_dns_cache 1000 | hsave -o tbg_dns_cache torips\tbg_dns_cache.hash | if ($input(DNS IP's Cleared.,o)) { } }
  }
  ..Clear The Tor IP cache (Cached $hget(tor.ips,0).item $+ ): {
    if ($input(Are you sure you want $hget(tor.ips,0).item IP's deleted from the Tor IP cache?,y)) { .hfree tor.ips | .hmake tor.ips 1000 | hsave -bo tor.ips torips\tor_ips.hash | if ($input(Tor IP's Cleared. You will now need to update the Tor Exit Node IP List,o)) { } }
  }
  ..Clear The DNSBL cache (Cached $hget(TBG_DNSBL,0).item $+ ): {
    if ($input(Are you sure you want $hget(TBG_DNSBL,0).item IP's deleted from the DNSBL IP cache?,y)) { .hfree TBG_DNSBL | if ($input(DNSBL IP's Cleared,o)) { } }
  }
  .-
  . $+ $iif($istok($readini(torips\tbg.ini,lists,chans),$chan,172),Scan the channel for Tor $iif($readini(%tbg.ini,$chan,dnsbl),and DNSBL),) :tbgscan $chan
  .-
  .Update Tor exit node IP list: { window -r @Tor-Be-Gone | tbgupdate }
}
 
menu nicklist { 
  -
  Check with TBG : {
    set %tbgscan.count 1
    var %tbg.scantime = $ctime
    addto.tbgQ ¬StartScanChan $chan $1 ~
    addto.tbgQ $1 $chan
    addto.tbgQ ¬FinishScanChan $chan %tbgscan.count %tbg.scantime $1
  }
  -
}
 
raw 315:*: { if ($2 isin %tbg.who) { set %tbg.who $remtok(%tbg.who,$2,1,32) | haltdef } }
raw 352:*: { if ($2 isin %tbg.who) { haltdef } }
 
on 1:unload: {
  unset %tbg*
  timerTBG.update off
  timertbgq off
  hfree tor.ips
  hfree torchk
  hfree TBG_DNSBL
  hfree tbg_dns_cache
  echo -ts *** Tor-Be-Gone has been unloaded.
}

Comments