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 

Ports
Goto page 1, 2  Next
 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    egghelp.org community Forum Index -> Archive
View previous topic :: View next topic  
Author Message
r0t3n
Owner


Joined: 31 May 2005
Posts: 507
Location: UK

PostPosted: Thu Jul 07, 2005 3:26 pm    Post subject: Ports Reply with quote

How can i find out what port a user is connected to/from. Not the server port 6667 etc, the port their ip/hostname is. Like 8080 etc. I really need to know this, please help!!

Thanks in advnace!!
_________________
r0t3n @ #r0t3n @ Quakenet
Back to top
View user's profile Send private message MSN Messenger
YooHoo
Owner


Joined: 13 Feb 2003
Posts: 939
Location: Redwood Coast

PostPosted: Thu Jul 07, 2005 3:33 pm    Post subject: Re: Ports Reply with quote

Tosser^^ wrote:
How can i find out what port a user is connected to/from. Not the server port 6667 etc, the port their ip/hostname is. Like 8080 etc.
are you refering to the listen xxxx all conf line? try .status all
_________________
Mr. Green
Johoho's TCL for beginners
Mr. Green
Back to top
View user's profile Send private message Send e-mail
r0t3n
Owner


Joined: 31 May 2005
Posts: 507
Location: UK

PostPosted: Thu Jul 07, 2005 3:40 pm    Post subject: Reply with quote

No, i mean the port a users hostname is. Like 8080 like you know with proxies. Its ip/hostname:port i need to find out the port part. Please help!!

Thanks in advance!!
_________________
r0t3n @ #r0t3n @ Quakenet
Back to top
View user's profile Send private message MSN Messenger
^DooM^
Owner


Joined: 26 Aug 2003
Posts: 772
Location: IronForge

PostPosted: Thu Jul 07, 2005 4:02 pm    Post subject: Reply with quote

You cant just do a command and find out a users port. You have to physically Scan the IP they are using for an open port say 8080 1080 3127 all the usual proxy ports. However just because a user has those ports open doesn't mean they are using a proxy. You have to check by connecting to that ip on the open port and see if it is actually allowing connections and could be used as a proxy. There are tcl scripts in the archive if i remember correctly for port scanning users on join. but none that i know of for checking. Your best bet would be to install this as a service. http://wiki.blitzed.org/BOPM
_________________
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Back to top
View user's profile Send private message Visit poster's website
r0t3n
Owner


Joined: 31 May 2005
Posts: 507
Location: UK

PostPosted: Thu Jul 07, 2005 4:09 pm    Post subject: Reply with quote

Ok, how exactly do i scan the users ip/hostname. And, i guess can a dns lookup determine if its a open proxy. Also, how can the bot connect using the ip:port from the user to test it. Would a hubbot need to ve used to connect using the ips ?
_________________
r0t3n @ #r0t3n @ Quakenet
Back to top
View user's profile Send private message MSN Messenger
^DooM^
Owner


Joined: 26 Aug 2003
Posts: 772
Location: IronForge

PostPosted: Thu Jul 07, 2005 4:25 pm    Post subject: Reply with quote

This is the script I modified to do what you are asking. You may need to tweak it to work correctly for you also the bot needs to be opered up.
Code:
##########################
### ProxyScan.tcl      ###
### Version 1.0        ###
### By ^DooM^          ###
### Based on PortCheck ###
### by Wcc             ###
##########################

##################################################################################################
## This script checks the status of a port on a host. Returns either Accepted, Refused, Failed, ##
## or Timeout as a user connects. Bot has to be an oper and recieve connection notices.         ##
##################################################################################################


##########################################################
## PUB ## !scan <host/ip> <port> (Can be changed)       ##
######### Checks weather or not the specified port is   ##
######### open on the specified host or ip.             ##
##########################################################

##########################################################
## Just load the script, set the variables, and rehash. ##
##########################################################

########################################################
# Set flag required for checking the status of a port. #
########################################################

set portcheck_setting(flag) "o|o"

###############################################################
# Set the pub command for checking the status of a port here. #
###############################################################

set portcheck_setting(cmd_pub) "!scan"

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

set portcheck_setting(ports) "1080 8080 8088 3128"

#######################
# Enable use of bold? #
#######################

set portcheck_setting(bold) 1

##############################
# Channel to output data too #
##############################

set gCommandChan "#server"

#################################################
# Add how the opered bot will catch connections #
#################################################

set gCatchNotice "Client connecting"
####################
# Code begins here #
####################

set portcheck_setting(autoban_svr) 1
set portcheck_setting(read) 1
set portcheck_setting(Proxycheck:) 1

if {![string match 1.6.* $version]} {
    putlog "\002PORTCHECK:\002 \002CRITICAL ERROR\002 PortCheck.tcl requires eggdrop 1.6.x to run."
    die "\002PORTCHECK:\002 \002CRITICAL ERROR\002 PortCheck.tcl requires eggdrop 1.6.x to run."
}
bind pub $portcheck_setting(flag) $portcheck_setting(cmd_pub) portcheck_scan_pub
bind raw - NOTICE portcheck_onconnect_scan
setudef flag portcheck

proc portcheck_dopre {} {
    global portcheck_setting
    if {!$portcheck_setting(Proxycheck:)} {
        return ""
    } elseif {!$portcheck_setting(bold)} {
        return "ProxyScan: "
    } else {
        return "^C9\002ProxyScan:\002^O "
    }
}

proc portcheck_onconnect_scan {from keyword arg} {
    global gCommandChan gCatchNotice portcheck_setting botnick
    if {([string match "*$gCatchNotice*" $arg])} {
        set args $arg
        set nick [lindex $args 9]
        set uhost [lindex $args 10]
        set host [lindex [split $uhost @] 1]
        set host "[string trimright $host ")"]"
        if {$host == "data.searchirc.org" || $host == "python.netsplit.de"} { return }
        putquick "PRIVMSG $gCommandChan :^C9\002ProxyCheck:\002^O $nick connected: Scanning $host"
            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 $gCommandChan $sock $host $p $timerid]
            }
        }
    }
}

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 "NOTICE $nick :Usage: $portcheck_setting(cmd_pub) <host> <port>"
    } else {
        if {[catch {set sock [socket -async $host $port]} error]} {
            putquick "PRIVMSG $chan :^C9\002ProxyCheck:\002^O Connection to $host \($port\) was refused."
        } 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_connected {idx sock host port timerid} {
    killutimer $timerid
    if {[set error [fconfigure $sock -error]] != ""} {
        close $sock
        putdcc $idx "[portcheck_dopre]Connection to $host \($port\) failed. \([string totitle $error]\)"
    } else {
        fileevent $sock writable {}
        fileevent $sock readable [list portcheck_read $idx $sock $host $port]
        putdcc $idx "[portcheck_dopre]Connection to $host \($port\) accepted."
    }
}
proc portcheck_timeout {idx sock host port} {
    close $sock
    putdcc $idx "[portcheck_dopre]Connection to $host \($port\) timed out."
}
proc portcheck_read {idx sock host port} {
    global portcheck_setting
    if {$portcheck_setting(read)} {
        if {[gets $sock read] == -1} {
            putdcc $idx "[portcheck_dopre]EOF On Connection To $host \($port\). Socket Closed."
            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 :^C9\002ProxyCheck:\002^O Connection to $host \($port\) failed. \([string totitle $error]\)"
    } else {
        fileevent $sock writable {}
        fileevent $sock readable [list portcheck_read_pub $chan $sock $host $port]
        putquick "PRIVMSG $chan :^C4\002ProxyCheck:\002^O Connection to $host \($port\) accepted."
    }
}

proc portcheck_timeout_pub {chan sock host port} {
    close $sock
    putquick "PRIVMSG $chan :^C7\002ProxyCheck:\002^O Connection to $host \($port\) timed out."
}

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 "NOTICE $i :Port $port was found open on $nick's host. \($host\)"
                }
            }
        }
        if {$portcheck_setting(autoban_svr)} {
            putserv "KLINE $nick :Found Open Proxy. Please secure your machine."
            putserv "PRIVMSG $gCommandChan :^C4\002ProxyCheck:\002^O Found Open Port ^C4$port^O on $nick's machine. Adding Kline!"
        }
    }
}

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 :^C9\002ProxyCheck:\002^O EOF On Connection To $host \($port\). Socket Closed."
        close $sock
    }
}

putlog "\002ProxyScan:\002 V1.0 by WCC Modified by ^DooM^."


This script opens up a lot of connections so be wary if you are running this on a paid for shell. you could get your account terminated. Also REMEMBER that this will kline users that just happen to have those 4 ports open even if they are not proxies. Casualties of war eh? Wink
_________________
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Back to top
View user's profile Send private message Visit poster's website
r0t3n
Owner


Joined: 31 May 2005
Posts: 507
Location: UK

PostPosted: Thu Jul 07, 2005 4:36 pm    Post subject: Reply with quote

hmm. Well that wont be good then. Its going to be hosted of a paid shell. And if it takes alot of CPU i cant use it. I have already had my account taken from me because of high CPU usage. Also, its for Quakenet, so my bot wont become a oper. So, anything for channel checking. Like sicherheit antiproxy/pjen bots.
_________________
r0t3n @ #r0t3n @ Quakenet
Back to top
View user's profile Send private message MSN Messenger
r0t3n
Owner


Joined: 31 May 2005
Posts: 507
Location: UK

PostPosted: Thu Jul 07, 2005 4:47 pm    Post subject: Reply with quote

i found metriod's antiproxy script.

Code:
namespace eval proxy {
 variable version "0.75"
 variable author  "Tosser^^ \(#eggtcl\)"

 variable trigger "/$"


 # The sources we dns to find out if a user is a proxy
 variable source { "cbl.abuseat.org" "opm.blitzed.org" "dnsbl.ahbl.org" "list.dsbl.org" "sbl.csma.biz" "dnsbl.njabl.org" }


 setudef flag antiproxy

 setudef str  antijoins
 setudef str  antidetected
 setudef str  antikicked

 # /* Settings! */
 variable flood "4:15" ;# 4 proxies that join in 8 seconds and the channel gets closed
 variable close "30"   ;# This is in seconds! It will keep the channel closed for 30 seconds
 variable modes "mir"  ;# the modes it will set when the channel gets flooded.
 # /* End of settings */


 # /* Don't edit anything below these lines. If you break it, don't expect me to fix it for you. */
 bind JOIN -|- *                   [namespace current]::checkuser
 bind PUB  -|- ${trigger}proxy     [namespace current]::toggle

 variable proxy
 array set proxy ""
}

proc proxy::toggle {nickname hostname handle channel arguments} {
 set command [lindex [split $arguments] 0]
 switch -exact -- [string tolower $command] {
  enable {
   if {![channel get $channel antiproxy]} {
    channel set $channel +antiproxy
    putquick "NOTICE $nickname :Done. Anti-Proxy was enabled."
   } else {
    putquick "NOTICE $nickname :Error: Anti-Proxy is already enabled."
   }
  }
  disable {
   if {[channel get $channel antiproxy]} {
    channel set $channel -antiproxy
    putquick "NOTICE $nickname :Done. Anti-Proxy was disabled."
   } else {
    putquick "NOTICE $nickname :Error: Anti-Proxy is already disabled."
   }
  }
  stats {
   if {([channel get $channel antijoins] != "") || ([channel get $channel antidetected] != "") || ([channel get $channel antikicked] != "")} {
    putquick "NOTICE $nickname :Stats for $channel: [statistics $channel]"
   } else {
    putquick "NOTICE $nickname :No statistics available for $channel."
   }
  }
  default {
   if {[channel get $channel antiproxy]} {
    putquick "NOTICE $nickname :Anti-Proxy is currently enabled for $channel. Statistic: [statistics $channel]"
   } else {
    putquick "NOTICE $nickname :Anti-Proxy is currently disabled for $channel."
   }
  }
 }
}


proc proxy::checkuser {nickname hostname handle channel} {
 checkstats $channel
 if {[channel get $channel antiproxy] && [botisop $channel] && ![string match *users.quakenet.org* $hostname] && ![matchattr $handle m|m $channel] && ![isbotnick $nickname]} {
  channel set $channel antijoins "[expr [channel get $channel antijoins] + 1]"
  regexp {.*\@(.*)} $hostname -> hostname
  if [regexp {[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$} $hostname] {
   [namespace current]::check $hostname $hostname 1 $nickname $hostname $channel 
  } else {
   dnslookup $hostname [namespace current]::check $nickname $hostname $channel
  }
 }
}

proc proxy::check  {ip hostname status nickname originalhost channel } {
  variable source
   if {$status} {
    regexp {([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})} $ip -> part1 part2 part3 part4
    set newip "$part4.$part3.$part2.$part1"
 
    foreach proxylist $source {
      dnslookup "$newip.$proxylist" [namespace current]::check2 $nickname $ip $originalhost $hostname $channel $proxylist
    }
   } else {
    putlog "AntiProxy: Couldn't dns resolve $originalhost."
   }
}

proc proxy::check2 {ip hostname status nickname oip realhost originalhost channel rbl } {
  variable proxy
  variable bantime
  variable close
  if {[info exists proxy($channel,$nickname)]} { return 0 }
  set closemode [modes $channel]
   if {$status} {
    set proxy($channel,$nickname) 1
    utimer 10 [list unset [namespace current]::proxy($channel,$nickname)]
    channel set $channel antidetected "[expr [channel get $channel antidetected] + 1]"
    if {[floodjoin $channel]} {
     putquick "MODE $channel +b$closemode $realhost" -next
     set ::close($channel) 1
     utimer $close [list [namespace current]::open "$channel" "$closemode"]
    }
    pushmode $channel +b $realhost
    if [regexp {[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$} $originalhost] {
     putquick "KICK $channel $nickname :\<$oip\> is in the DNSBL \[Open Proxy\] \(ID: [expr [channel get $channel antikicked] + 1]\)"
    } else {
     putquick "KICK $channel $nickname :\<$oip\> \[$originalhost\] is in the DNSBL \[Open Proxy\] \(ID: [expr [channel get $channel antikicked] + 1]\)"
    }
    channel set $channel antikicked "[expr [channel get $channel antikicked] + 1]"
    utimer 3 [list flushmode $channel]
   }
}
   
proc proxy::open {channel modes} {
 if {[info exists ::close($channel)]} {
   putserv "MODE $channel -$modes"
   unset ::close($channel)
 } else {
  return 0
 }
}

proc proxy::modes {channel} {
 variable modes
 set end ""
 set chanmode [lindex [getchanmode $channel] 0]
 foreach mode [split $modes ""] {
  if {![string match *$mode* $chanmode]} {
   append end $mode
  }
 }
 return "[join $end]"
}

proc proxy::unsetflood {channel} {
 if {[info exists ::flood($channel)]} {
  unset ::flood($channel)
 }
}

proc proxy::statistics {channel} {
 set joins    [channel get $channel antijoins]
 set detected [channel get $channel antidetected]
 set kicked   [channel get $channel antikicked]
 if {$joins == "" || $joins == "0"} {
  return "Statistic Unavailable"
 } elseif {$detected == "" || $detected == "0"} {
  return "Statistic Unavailable"
 } elseif {$kicked == "" || $kicked == "0"} {
  return "Statistic Unavailable"
 } else {
  return "Scanned: $joins, Detected: $detected, Kicked: $kicked  \[[format %.2f [expr ($kicked * 100.0) / $joins]]%\]"
 }
}

proc proxy::checkstats {channel} {
# /* This is set to 1 to prevent the bot from crashing. (for some people this appears to be a problem) */
 if {[channel get $channel antijoins] == ""} { channel set $channel antijoins "1" }
 if {[channel get $channel antidetected] == ""} { channel set $channel antidetected "1" }
 if {[channel get $channel antikicked] == ""} { channel set $channel antikicked "1" }
}

proc proxy::floodjoin {channel} {
 variable flood
 set split [split $flood :]
 set user [lindex $split 0]
 set seconds [lindex $split 1]
 if {![info exists ::flood($channel)]} {
  set ::flood($channel) 1
 } else {
  incr ::flood($channel)
 }
  if {$::flood($channel) >= $user} {
   set ::flood($channel) 0
   return 1
  } else {
    utimer $seconds [list [namespace current]::unsetflood $channel]
  }
  return 0
}

proc proxy::credits {} {
  variable file [lindex [split [info script] "/"] end];
  variable version;
  variable owner "metroid (#development)";
  variable modified [clock format [file mtime [info script]] -format "%Y/%m/%d %H:%M:%S"];
  set channels 0; set total 0; set end ""
  foreach chan [channels] {;
   checkstats $chan
   incr total
   if {[channel get $chan antiproxy]} { incr channels ; lappend end $chan }
  };
 putlog "$file v$version by $owner - Last modified: $modified"
 putlog "$file active on $channels/$total ([format %.2f [expr ($channels.0 * 100.0) / $total.0]]%) channels: [join $end ", "]"
 putlog "$file was successfully loaded!"
}

proxy::credits


I get this error

[21:44] antiproxy.tcl v0.75 by metroid (#development) - L
7 21:44:10
[21:44] Tcl error in file 'eggdrop.conf':
[21:44] divide by zero
while executing
"expr ($channels.0 * 100.0) / $total.0"
(procedure "proxy::credits" line 13)
invoked from within
"proxy::credits"
(file "scripts/antiproxy.tcl" line 265)
invoked from within
"source scripts/antiproxy.tcl"
(file "eggdrop.conf" line 1334)
[21:44] * CONFIG FILE NOT LOADED (NOT FOUND, OR ERROR)

Please help!!

Thanks in advance!!
_________________
r0t3n @ #r0t3n @ Quakenet
Back to top
View user's profile Send private message MSN Messenger
^DooM^
Owner


Joined: 26 Aug 2003
Posts: 772
Location: IronForge

PostPosted: Thu Jul 07, 2005 4:50 pm    Post subject: Reply with quote

Its not CPU intensive it just opens up a lot of sockets if its run on a big channel and you have a lot of users joining. Do a google Search for wcc portcheck.tcl it originally only checked users joining a channel and banned them if it found an open port. I wanted a proxy checker to scan users when they joined my server and remove them before they had a chance to join a channel. If you are worried about the socket use, Email your shell admin and ask him if you can a) use the script, and b) would he mind monitoring it to make sure its not breaking any rules or is hurting the shell in any way. If they are a decent shell provider they should at least accomodate a request if your open with them. I run that script on my own RH9 box so I can deffinately confirm that CPU usage is low.
_________________
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Back to top
View user's profile Send private message Visit poster's website
r0t3n
Owner


Joined: 31 May 2005
Posts: 507
Location: UK

PostPosted: Thu Jul 07, 2005 5:31 pm    Post subject: Reply with quote

ok, Thanks. I found the script. Just to ask, this is a nuub question. I keep on forgetting the difference between antiproxy and antipjen bot, or is there a differentce. Maybe you could tell me. If there is. Where can i find a good antipjen script aswell if possible.

Thanks in advance!!
_________________
r0t3n @ #r0t3n @ Quakenet
Back to top
View user's profile Send private message MSN Messenger
metroid
Owner


Joined: 16 Jun 2004
Posts: 771

PostPosted: Fri Jul 08, 2005 2:50 am    Post subject: Reply with quote

Uhm, Hi. Do you realise you broke my copyright and pretended you wrote it by putting your name in the 'author' section.

Quote:
namespace eval proxy {
variable version "0.75"
variable author "Tosser^^ \(#eggtcl\)"

variable trigger "/$"
Back to top
View user's profile Send private message
metroid
Owner


Joined: 16 Jun 2004
Posts: 771

PostPosted: Fri Jul 08, 2005 3:03 am    Post subject: Reply with quote

Oh look at this: The real code.
And unless i'm mistaken i say, don't break my copyright multiple times.
Go check your pm on IRC whilst your permbanned from the development channel.

Your name serves you right, you are a tosser.

Code:
#   __ __        __                          ___                                              __     
#  _\ \\ \__    /\ \                        /\_ \                                            /\ \__   
# /\__  _  _\   \_\ \     __   __  __     __\//\ \     ___   _____     ___ ___      __    ___\ \ ,_\ 
# \/__\ \\ \__  /'_` \  /'__`\/\ \/\ \  /'__`\\ \ \   / __`\/\ '__`\ /' __` __`\  /'__`\/' _ `\ \ \/ 
#   /\_   _  _\/\ \_\ \/\  __/\ \ \_/ |/\  __/ \_\ \_/\ \_\ \ \ \_\ \/\ \/\ \/\ \/\  __//\ \/\ \ \ \_
#   \/_/\_\\_\/\ \___,_\ \____\\ \___/ \ \____\/\____\ \____/\ \ ,__/\ \_\ \_\ \_\ \____\ \_\ \_\ \__\
#      \/_//_/  \/__,_ /\/____/ \/__/   \/____/\/____/\/___/  \ \ \/  \/_/\/_/\/_/\/____/\/_/\/_/\/__/
#                                                              \ \_\
#                                                               \/_/
#
#                        /\ \                /\ \__  __                   
#  _____   _ __   ___    \_\ \  __  __    ___\ \ ,_\/\_\    ___     ___     ____ 
# /\ '__`\/\`'__\/ __`\  /'_` \/\ \/\ \  /'___\ \ \/\/\ \  / __`\ /' _ `\  /',__\
# \ \ \_\ \ \ \//\ \_\ \/\ \_\ \ \ \_\ \/\ \__/\ \ \_\ \ \/\ \_\ \/\ \/\ \/\__, `\
#  \ \ ,__/\ \_\\ \____/\ \___,_\ \____/\ \____\\ \__\\ \_\ \____/\ \_\ \_\/\____/
#   \ \ \/  \/_/ \/___/  \/__,_ /\/___/  \/____/ \/__/ \/_/\/___/  \/_/\/_/\/___/
#    \ \_\                                                                 
#     \/_/                                                                 
#       
# Anti proxy scan script.

# /* This is an anti proxy script written for eggdrop. It's been tested on eggdrop1.6.17 with TCL version 8.4
# *  Unlike other anti proxy scripts i've seen around.
# *  This script works just as well on a windrop as it does on a windrop
# *  I've been testing it with a few proxies myself and it clears about 5 proxies in a few seconds without a problem
# *  If it detects a floodjoin happening it will set the modes you choose
# *  (Default mir = moderated, invite only, registered only) These modes are for Quakenet though.
# *  The script will first check what modes you already have set so it won't be unsetting a mode you already had before the floodjoin
# */

# /* Author info
# *  I made this script because i was sick of all the proxies that were joining my channel and spamming it
# *  It's based off the proxycheck.tcl made by James. I rewrote the entire script but kept the basics in.
# *  This script is generally alot faster than that script. But it's still in beta form!
# *  I release this script to http://development.woosah.org
# *  and no other websites are allowed to release this without my explicit authorisation.
# *  If you have an eggdrop website with scripts and you'd like to put this script on your webpage,
# *  Send me an email at metroid at gmail.com replacing at with @
# */

# /* Installing the anti-proxy script
# *  First, put the script into your /scripts folder.
# *  Then at the end of your eggdrop.conf, Put:
# *  source scripts/anti-proxy.tcl
# *  Or if you are using the #development configuration file, you won't have to do anything.
# *  Just rehash the bot after you've done this and it should work.
# *  Read the next part about using it.
# */

# /* Using the anti-proxy script
# *  The script itself pretty much does everything automaticly once it's activated.
# *  You can activate it by typing: <trigger>proxy enable
# *  You can deactivate it by typing: <trigger>proxy disable
# *  If you want some statistics about how many people it has scanned, detected or kicked,
# *  you can use <trigger>proxy stats
# *  Just typing <trigger>proxy will tell you if the check is enabled or disabled, and possibly statistics about it.
# */

namespace eval proxy {
 variable version "0.75"
 variable author  "metroid - #development on irc.quakenet.org"

 variable trigger "$"


 # The sources we dns to find out if a user is a proxy
 variable source { "cbl.abuseat.org" "opm.blitzed.org" "dnsbl.ahbl.org" "list.dsbl.org" "sbl.csma.biz" "dnsbl.njabl.org" }


 setudef flag antiproxy

 setudef str  antijoins
 setudef str  antidetected
 setudef str  antikicked

 # /* Settings! */
 variable flood "4:15" ;# 4 proxies that join in 8 seconds and the channel gets closed
 variable close "30"   ;# This is in seconds! It will keep the channel closed for 30 seconds
 variable modes "mir"  ;# the modes it will set when the channel gets flooded.
 # /* End of settings */


 # /* Don't edit anything below these lines. If you break it, don't expect me to fix it for you. */
 bind JOIN -|- *                   [namespace current]::checkuser
 bind PUB  m|n ${trigger}proxy     [namespace current]::toggle

 variable proxy
 array set proxy ""
}

proc proxy::toggle {nickname hostname handle channel arguments} {
 set command [lindex [split $arguments] 0]
 switch -exact -- [string tolower $command] {
  enable {
   if {![channel get $channel antiproxy]} {
    channel set $channel +antiproxy
    putquick "NOTICE $nickname :Done. Anti-Proxy was enabled."
   } else {
    putquick "NOTICE $nickname :Error: Anti-Proxy is already enabled."
   }
  }
  disable {
   if {[channel get $channel antiproxy]} {
    channel set $channel -antiproxy
    putquick "NOTICE $nickname :Done. Anti-Proxy was disabled."
   } else {
    putquick "NOTICE $nickname :Error: Anti-Proxy is already disabled."
   }
  }
  stats {
   if {([channel get $channel antijoins] != "") || ([channel get $channel antidetected] != "") || ([channel get $channel antikicked] != "")} {
    putquick "NOTICE $nickname :Stats for $channel: [statistics $channel]"
   } else {
    putquick "NOTICE $nickname :No statistics available for $channel."
   }
  }
  default {
   if {[channel get $channel antiproxy]} {
    putquick "NOTICE $nickname :Anti-Proxy is currently enabled for $channel. Statistic: [statistics $channel]"
   } else {
    putquick "NOTICE $nickname :Anti-Proxy is currently disabled for $channel."
   }
  }
 }
}


proc proxy::checkuser {nickname hostname handle channel} {
 checkstats $channel
 if {[channel get $channel antiproxy] && [botisop $channel] && ![string match *users.quakenet.org* $hostname] && ![matchattr $handle m|m $channel] && ![isbotnick $nickname]} {
  channel set $channel antijoins "[expr [channel get $channel antijoins] + 1]"
  regexp {.*\@(.*)} $hostname -> hostname
  if [regexp {[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$} $hostname] {
   [namespace current]::check $hostname $hostname 1 $nickname $hostname $channel 
  } else {
   dnslookup $hostname [namespace current]::check $nickname $hostname $channel
  }
 }
}

proc proxy::check  {ip hostname status nickname originalhost channel } {
  variable source
   if {$status} {
    regexp {([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})} $ip -> part1 part2 part3 part4
    set newip "$part4.$part3.$part2.$part1"
 
    foreach proxylist $source {
      dnslookup "$newip.$proxylist" [namespace current]::check2 $nickname $ip $originalhost $hostname $channel $proxylist
    }
   } else {
    putlog "AntiProxy: Couldn't dns resolve $originalhost."
   }
}

proc proxy::check2 {ip hostname status nickname oip realhost originalhost channel rbl } {
  variable proxy
  variable bantime
  variable close
  if {[info exists proxy($channel,$nickname)]} { return 0 }
  set closemode [modes $channel]
   if {$status} {
    set proxy($channel,$nickname) 1
    utimer 10 [list unset [namespace current]::proxy($channel,$nickname)]
    channel set $channel antidetected "[expr [channel get $channel antidetected] + 1]"
    if {[floodjoin $channel]} {
     putquick "MODE $channel +b$closemode $realhost" -next
     set ::close($channel) 1
     utimer $close [list [namespace current]::open "$channel" "$closemode"]
    }
    pushmode $channel +b $realhost
    if [regexp {[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$} $originalhost] {
     putquick "KICK $channel $nickname :\<$oip\> is in the DNSBL \[Open Proxy\] \(ID: [expr [channel get $channel antikicked] + 1]\)"
    } else {
     putquick "KICK $channel $nickname :\<$oip\> \[$originalhost\] is in the DNSBL \[Open Proxy\] \(ID: [expr [channel get $channel antikicked] + 1]\)"
    }
    channel set $channel antikicked "[expr [channel get $channel antikicked] + 1]"
    utimer 3 [list flushmode $channel]
   }
}
   
proc proxy::open {channel modes} {
 if {[info exists ::close($channel)]} {
   putserv "MODE $channel -$modes"
   unset ::close($channel)
 } else {
  return 0
 }
}

proc proxy::modes {channel} {
 variable modes
 set end ""
 set chanmode [lindex [getchanmode $channel] 0]
 foreach mode [split $modes ""] {
  if {![string match *$mode* $chanmode]} {
   append end $mode
  }
 }
 return "[join $end]"
}

proc proxy::unsetflood {channel} {
 if {[info exists ::flood($channel)]} {
  unset ::flood($channel)
 }
}

proc proxy::statistics {channel} {
 set joins    [channel get $channel antijoins]
 set detected [channel get $channel antidetected]
 set kicked   [channel get $channel antikicked]
 if {$joins == "" || $joins == "0"} {
  return "Statistic Unavailable"
 } elseif {$detected == "" || $detected == "0"} {
  return "Statistic Unavailable"
 } elseif {$kicked == "" || $kicked == "0"} {
  return "Statistic Unavailable"
 } else {
  return "Scanned: $joins, Detected: $detected, Kicked: $kicked  \[[format %.2f [expr ($kicked * 100.0) / $joins]]%\]"
 }
}

proc proxy::checkstats {channel} {
# /* This is set to 1 to prevent the bot from crashing. (for some people this appears to be a problem) */
 if {[channel get $channel antijoins] == ""} { channel set $channel antijoins "1" }
 if {[channel get $channel antidetected] == ""} { channel set $channel antidetected "1" }
 if {[channel get $channel antikicked] == ""} { channel set $channel antikicked "1" }
}

proc proxy::floodjoin {channel} {
 variable flood
 set split [split $flood :]
 set user [lindex $split 0]
 set seconds [lindex $split 1]
 if {![info exists ::flood($channel)]} {
  set ::flood($channel) 1
 } else {
  incr ::flood($channel)
 }
  if {$::flood($channel) >= $user} {
   set ::flood($channel) 0
   return 1
  } else {
    utimer $seconds [list [namespace current]::unsetflood $channel]
  }
  return 0
}

proc proxy::credits {} {
  variable file [lindex [split [info script] "/"] end];
  variable version;
  variable owner "metroid (#development)";
  variable modified [clock format [file mtime [info script]] -format "%Y/%m/%d %H:%M:%S"];
  set channels 0; set total 0; set end ""
  foreach chan [channels] {;
   checkstats $chan
   incr total
   if {[channel get $chan antiproxy]} { incr channels ; lappend end $chan }
  };
 putlog "$file v$version by $owner - Last modified: $modified"
 putlog "$file active on $channels/$total ([format %.2f [expr ($channels.0 * 100.0) / $total.0]]%) channels: [join $end ", "]"
 putlog "$file was successfully loaded!"
}

proxy::credits

# // Copyright: This script was made by metroid (#development). This means, YOU DIDNT MAKE IT! I DID! :p
# // Don't break my copyright because it's lame and i'll sue you ass if you do. Have fun!
Back to top
View user's profile Send private message
demond
Revered One


Joined: 12 Jun 2004
Posts: 3073
Location: San Francisco, CA

PostPosted: Fri Jul 08, 2005 3:33 am    Post subject: Reply with quote

nice ascii art Wink
Back to top
View user's profile Send private message Visit poster's website
^DooM^
Owner


Joined: 26 Aug 2003
Posts: 772
Location: IronForge

PostPosted: Fri Jul 08, 2005 4:50 am    Post subject: Reply with quote

Indeed very funky Wink I had a proggy once that did that for you but i am damned if i can remember what it was called Rolling Eyes
_________________
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Back to top
View user's profile Send private message Visit poster's website
Dizzle
Op


Joined: 28 Apr 2005
Posts: 109

PostPosted: Fri Jul 08, 2005 6:36 am    Post subject: Reply with quote

well think this is lame of you tosser, it doenst matter who made the script, it is what the script does, putting your name on somebody else his script and even show it in the forum metroid is coming going a lot is lame and not very handy Smile

Question for metroid : do you have a antiproxy script for just a server client and not an IRC operator ??
Back to top
View user's profile Send private message Visit poster's website MSN Messenger
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    egghelp.org community Forum Index -> Archive All times are GMT - 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
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