egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Script PortCheck.tcl

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Scripting Help
View previous topic :: View next topic  
Author Message
demetrius_reis
Halfop


Joined: 10 Aug 2010
Posts: 42

PostPosted: Mon Feb 06, 2012 9:11 pm    Post subject: Script PortCheck.tcl Reply with quote

Code:

## DCC ## .portcheck <host/ip> <port> (Can be changed)  ##
## DCC ## !portcheck <host/ip> <port> (Can be changed)  ##
######### Checks weather or not the specified port is     ##
######### open on the specified host or ip.        ##
######### --------------------------------------------- ##
######### .chanset <channel> +portcheck           ##
######### Enables on-join port checking for a channel.  ##
##########################################################
## PUB ## !portcheck <host/ip> <port> (Can be changed)  ##
######### Checks weather or not the specified port is     ##
######### open on the specified host or ip.        ##
##########################################################

set portcheck_setting(flag) "-|-"
set portcheck_setting(cmd_pub) "!portcheck"
set portcheck_setting(cmd_dcc) "portcheck"
set portcheck_setting(read) 1

########################################################################
# Enable on-join scanning? (If you don't wish to enable it, ignore any #
# further settings) Scanning for a channel is enabled via .chanset     #
# <channel> +portcheck.                          #
########################################################################

set portcheck_setting(onjoin) 0

#########################################################################
# Set the open ports to scan for when a user joins a monitored channel. #
#########################################################################

set portcheck_setting(ports) "2300 2400 28800 29000 47624 22 80"

#####################################################################
# Set the flag that makes a user exempt from on-join scanning here. #
#####################################################################
# FLAG +E - REMOVIDA
# set portcheck_setting(exemptflag) "+E"

####################################################################
# Place a server ban when on a user that joins a monitored channel #
# if a banned port is found?                   #
####################################################################

set portcheck_setting(autoban_svr) 0

################################################################
# Place a ban on the bot's banlist when on a user that joins a #
# monitored channel if a banned port is found?             #
################################################################

set portcheck_setting(autoban_list) 0

########################
# Make the ban global? #
########################

set portcheck_setting(global) 0

################################################################
# Set the time to ban users for here. Set to 0 for a perm ban. #
################################################################

set portcheck_setting(bantime) 5

############################################################
# Send an op notice when a banned port is found on a user? #
############################################################

set portcheck_setting(onotice) 1

###################################
# Enable use of bold in DCC chat? #
###################################

set portcheck_setting(bold) 1

#############################################
# Prefix "PORTCHECK:" in DCC chat messages? #
#############################################

set portcheck_setting(PORTCHECK:) 1

####################
# Code begins here #
####################

if {![string match 1.6.* $version]} {
   putlog "\002PORTCHECK:\002 \002ERRO CRÍTICO\002 PortCheck.tcl por REIS__"
   die "\002PORTCHECK:\002 \002ERRO CRÍTICO\002 PortCheck.tcl por REIS__"
}
bind pub $portcheck_setting(flag) $portcheck_setting(cmd_pub) portcheck_scan_pub
bind dcc $portcheck_setting(flag) $portcheck_setting(cmd_dcc) portcheck_scan_dcc
bind join - * portcheck_onjoin_scan
setudef flag portcheck

proc portcheck_dopre {} {
   global portcheck_setting
   if {!$portcheck_setting(PORTCHECK:)} {
      return ""
   } elseif {!$portcheck_setting(bold)} {
      return "PORTCHECK: "
   } else {
      return "\002PORTCHECK:\002 "
   }
}
proc portcheck_onjoin_scan {nick uhost hand chan} {
   global portcheck_setting portcheck_chans
   if {($portcheck_setting(onjoin)) && ($portcheck_setting(ports) != "")} {
      foreach i [channel info $chan] {
         if {([string match "+portcheck" $i]) && ([botisop $chan])} {
            set host [lindex [split $uhost @] 1]
            foreach p $portcheck_setting(ports) {
               if {![catch {set sock [socket -async $host $p]} error]} {
                  set timerid [utimer 15 [list portcheck_timeout_join $sock]]
                  fileevent $sock writable [list portcheck_connected_join $nick $chan $sock $host $p $timerid]
               }
            }
            break
         }
      }
   }
}
proc portcheck_scan_pub {nick uhost hand chan text} {
   global portcheck_setting
   set host [lindex $text 0]
   set port [lindex $text 1]
   if {$port == ""} {
      putquick "PRIVMSG :Usage: $portcheck_setting(cmd_pub) <seu-ip> <porta>"
   } else {
      if {[catch {set sock [socket -async $host $port]} error]} {
         putquick "PRIVMSG $chan :O IP $host está com a porta \($port\) FECHADA! Ou o jogo não está criado"
      } else {
         set timerid [utimer 15 [list portcheck_timeout_pub $chan $sock $host $port]]
         fileevent $sock writable [list portcheck_connected_pub $chan $sock $host $port $timerid]
      }
   }
}
proc portcheck_scan_dcc {hand idx text} {
   global portcheck_setting
   set host [lindex $text 0]
   set port [lindex $text 1]
   if {$port == ""} {
      putdcc $idx "[portcheck_dopre]Usage: .$portcheck_setting(cmd_dcc) <seu-ip> <porta>"
   } else {
      if {[catch {set sock [socket -async $host $port]} error]} {
         putdcc $idx "[portcheck_dopre]O IP $host está com a porta \($port\) FECHADA! Ou o jogo não está criado"
      } else {
         set timerid [utimer 15 [list portcheck_timeout $idx $sock $host $port]]
         fileevent $sock writable [list portcheck_connected $idx $sock $host $port $timerid]
      }
   }
}
proc portcheck_connected {idx sock host port timerid} {
   killutimer $timerid
   if {[set error [fconfigure $sock -error]] != ""} {
      close $sock
      putdcc $idx "[portcheck_dopre]Conexão ao $host \($port\) Falhou. \([string totitle $error]\)"
   } else {
      fileevent $sock writable {}
      fileevent $sock readable [list portcheck_read $idx $sock $host $port]
      putdcc $idx "[portcheck_dopre]O IP $host está com a porta \($port\) ABERTA normalmente. Pronto para jogar!"
   }
}
proc portcheck_timeout {idx sock host port} {
   close $sock
   putdcc $idx "[portcheck_dopre]Conexão ao $host \($port\) Falhou."
}
proc portcheck_read {idx sock host port} {
   global portcheck_setting
   if {$portcheck_setting(read)} {
      if {[gets $sock read] == -1} {
         putdcc $idx "[portcheck_dopre]O IP $host está com a porta \($port\) FECHADA! Ou o jogo não está criado"
         close $sock
      } else {
         putdcc $idx "[portcheck_dopre]$host \($port\) > $read"
      }
   } else {
      close $sock
   }
}
proc portcheck_connected_pub {chan sock host port timerid} {
   killutimer $timerid
   if {[set error [fconfigure $sock -error]] != ""} {
      close $sock
      putquick "PRIVMSG $chan :O IP $host está com a porta \($port\) FECHADA! Ou o jogo não está criado \([string totitle $error]\)"
   } else {
      fileevent $sock writable {}
      fileevent $sock readable [list portcheck_read_pub $chan $sock $host $port]
      putquick "PRIVMSG $chan :O IP $host está com a porta \($port\) ABERTA normalmente. Pronto para jogar!"
   }
}
proc portcheck_timeout_pub {chan sock host port} {
   close $sock
   putquick "PRIVMSG $chan :O IP $host está com a porta \($port\) FECHADA! Ou o jogo não está criado"
}
proc portcheck_connected_join {nick chan sock host port timerid} {
   global portcheck_setting botnick
   killutimer $timerid
   if {[set error [fconfigure $sock -error]] != ""} {
      close $sock
   } else {
      fileevent $sock writable {}
      fileevent $sock readable [list portcheck_read_join $sock]
      if {$portcheck_setting(onotice)} {
         foreach i [chanlist $chan] {
            if {([isop $i $chan]) && ($i != $botnick)} {
               putserv "PRIVMSG $i :A Porta $port foi encontrada aberta $nick's. \($host\)"
            }
         }
      }
      if {$portcheck_setting(autoban_svr)} {
         putserv "MODE $chan +b *!*@$host"
         putserv "KICK $chan $nick :One of the ports open on your host is banned."
         timer $portcheck_setting(bantime) [list portcheck_unsvrban $chan $host]
      } elseif {$portcheck_setting(autoban_list)} {
         if {$portcheck_setting(global)} {
            newban *!*@$host PortCheck "One of the ports open on your machine is banned." $portcheck_setting(bantime)
         } else {
            newchanban $chan *!*@$host PortCheck "One of the ports open on your machine is banned." $portcheck_setting(bantime)
         }
      }
   }
}
proc portcheck_timeout_join {sock} {
   close $sock
}
proc portcheck_read_join {sock} {
   close $sock
}
proc portcheck_read_pub {sock} {
   global portcheck_setting
   if {!$portcheck_setting(read)} {
      close $sock
   } elseif {[gets $sock read] == -1} {
      putquick "PRIVMSG $chan :Conexão ao Falhada ao $host \($port\). Socket Closed."
      close $sock
   }
}
proc portcheck_unsvrban {chan host} {
   putserv "MODE $chan -b *!*@$host"
}


Using this same script or another, there is the possibility of improving it?
The commands are always used, like this:! Portcheck + ip + port

There is the possibility of minimizing the command! Portcheck + ip
Thus, the eggdrop does paesquisa all ports automatically defined and gives a result which states or which ports are not working.

Or is there something already done?
thanks!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Scripting Help All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber