| View previous topic :: View next topic |
| Author |
Message |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Thu Jul 07, 2005 3:26 pm Post subject: Ports |
|
|
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 |
|
 |
YooHoo Owner

Joined: 13 Feb 2003 Posts: 939 Location: Redwood Coast
|
Posted: Thu Jul 07, 2005 3:33 pm Post subject: Re: Ports |
|
|
| 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 _________________
Johoho's TCL for beginners
 |
|
| Back to top |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Thu Jul 07, 2005 3:40 pm Post subject: |
|
|
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 |
|
 |
^DooM^ Owner

Joined: 26 Aug 2003 Posts: 772 Location: IronForge
|
Posted: Thu Jul 07, 2005 4:02 pm Post subject: |
|
|
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 |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Thu Jul 07, 2005 4:09 pm Post subject: |
|
|
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 |
|
 |
^DooM^ Owner

Joined: 26 Aug 2003 Posts: 772 Location: IronForge
|
Posted: Thu Jul 07, 2005 4:25 pm Post subject: |
|
|
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?  _________________ 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 |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Thu Jul 07, 2005 4:36 pm Post subject: |
|
|
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 |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Thu Jul 07, 2005 4:47 pm Post subject: |
|
|
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 |
|
 |
^DooM^ Owner

Joined: 26 Aug 2003 Posts: 772 Location: IronForge
|
Posted: Thu Jul 07, 2005 4:50 pm Post subject: |
|
|
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 |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Thu Jul 07, 2005 5:31 pm Post subject: |
|
|
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 |
|
 |
metroid Owner
Joined: 16 Jun 2004 Posts: 771
|
Posted: Fri Jul 08, 2005 2:50 am Post subject: |
|
|
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 |
|
 |
metroid Owner
Joined: 16 Jun 2004 Posts: 771
|
Posted: Fri Jul 08, 2005 3:03 am Post subject: |
|
|
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 |
|
 |
demond Revered One

Joined: 12 Jun 2004 Posts: 3073 Location: San Francisco, CA
|
Posted: Fri Jul 08, 2005 3:33 am Post subject: |
|
|
nice ascii art  |
|
| Back to top |
|
 |
^DooM^ Owner

Joined: 26 Aug 2003 Posts: 772 Location: IronForge
|
Posted: Fri Jul 08, 2005 4:50 am Post subject: |
|
|
Indeed very funky I had a proggy once that did that for you but i am damned if i can remember what it was called  _________________ 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 |
|
 |
Dizzle Op
Joined: 28 Apr 2005 Posts: 109
|
Posted: Fri Jul 08, 2005 6:36 am Post subject: |
|
|
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
Question for metroid : do you have a antiproxy script for just a server client and not an IRC operator ?? |
|
| Back to top |
|
 |
|
|
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
|
|