<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forum.eggheads.org/app.php/feed/topic/12257" />

	<title>egghelp/eggheads community</title>
	<subtitle>Discussion of eggdrop bots, shell accounts and tcl scripts.</subtitle>
	<link href="https://forum.eggheads.org/index.php" />
	<updated>2006-08-11T09:46:54-04:00</updated>

	<author><name><![CDATA[egghelp/eggheads community]]></name></author>
	<id>https://forum.eggheads.org/app.php/feed/topic/12257</id>

		<entry>
		<author><name><![CDATA[ko-pach]]></name></author>
		<updated>2006-08-11T09:46:54-04:00</updated>

		<published>2006-08-11T09:46:54-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65383#p65383</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65383#p65383"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65383#p65383"><![CDATA[
Thanks <strong class="text-strong">rosc2112</strong>, now it's work exactly what I want.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=8069">ko-pach</a> — Fri Aug 11, 2006 9:46 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[rosc2112]]></name></author>
		<updated>2006-08-10T00:20:35-04:00</updated>

		<published>2006-08-10T00:20:35-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65343#p65343</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65343#p65343"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65343#p65343"><![CDATA[
You could make a global variable up near the top of the script, outside of any proc{}'s and then in the section of code you quoted, make it use a foreach:<br><div class="codebox"><p>Code: </p><pre><code>################################################################################################################ set this to the port numbers you want scanned, space seperated list:set proxyports "20492 0 1 2 3"proc wingate {host type args} {global timeout proxyports set args [join $args " "]# Not a valid host.foreach portnumber $proxyports {  if {[catch {set sock [socket -async $host $portnumber]}]} {    if {$type == "dcc"} { putdcc [lindex $args 0] "\002Not Valid\002: unable to connect to $host." }    if {$type == "msg"} { putserv "NOTICE [lindex $args 0] :\002Not Valid\002: Unable to connect to $host." }    if {$type == "pub"} { putserv "PRIVMSG [lindex $args 0] :\002Not Valid\002: Unable to connect to $host." }      #return 0      continue  }  fileevent $sock writable [list gotconnect $sock $host $type $args]   ;# wait for connect.  fileevent $sock readable [list gotread $sock $host $type $args]   ;#wait for responce.# Timeout after 15 seconds  set timeout($sock) ""  utimer 15 "timeout $sock $host $type $args" }}</code></pre></div>Should work, haven't test, prolly needs tweaking.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7395">rosc2112</a> — Thu Aug 10, 2006 12:20 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[ko-pach]]></name></author>
		<updated>2006-08-09T20:30:05-04:00</updated>

		<published>2006-08-09T20:30:05-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65339#p65339</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65339#p65339"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65339#p65339"><![CDATA[
Sorry guys, i was used a BBCode code, but don't used a /code. Sorry too for a big code, next time i will give a link to the file. I'm new in TCL, never scripting in this language, but i thing the peace of code checking open proxyes is:<br><div class="codebox"><p>Code: </p><pre><code># Not a valid host.  if {[catch {set sock [socket -async $host 20492]}]} {    if {$type == "dcc"} { putdcc [lindex $args 0] "\002Not Valid\002: Unable to connect to $host." }    if {$type == "msg"} { putserv "NOTICE [lindex $args 0] :\002Not Valid\002: Unable to connect to $host." }    if {$type == "pub"} { putserv "PRIVMSG [lindex $args 0] :\002Not Valid\002: Unable to connect to $host." }      return 0  }  fileevent $sock writable [list gotconnect $sock $host $type $args]   ;# wait for connect.  fileevent $sock readable [list gotread $sock $host $type $args]   ;#wait for responce.</code></pre></div>You will see a number 20492, thath's the port now script checks for open proxyes and work realy fine. Need variable to checking not only this port but more ports, user definied.<br><br>BTW, sorry caesar, I was searching the forum and user <strong class="text-strong">user</strong> posted topics, but nothing found.<br><br>I thing most users of eggdrop will be interesting to using this script to check each user joining they channel who using an open proxy.<br><br>If there are an option to check fo open proxyes without using a port will be really fine, just using a proxy/socks reply -&gt; this is an proxy or socks .. (free to use, not used with account) and making a ban. This is really different of RBL checking<br><br>Thanks, reggards<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=8069">ko-pach</a> — Wed Aug 09, 2006 8:30 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[caesar]]></name></author>
		<updated>2006-08-09T15:47:11-04:00</updated>

		<published>2006-08-09T15:47:11-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65323#p65323</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65323#p65323"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65323#p65323"><![CDATA[
* fixed *<br><br>* on topic *<br><br><a href="http://forum.egghelp.org/profile.php?mode=viewprofile&amp;u=2878" class="postlink">user</a> had posted long time ago some pice of code to test for open ports without blocking and was quite nice. You should do a forum search cos your script it's WAY to big and I honestly doubt someone will even read it.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=187">caesar</a> — Wed Aug 09, 2006 3:47 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[krimson]]></name></author>
		<updated>2006-08-09T14:44:27-04:00</updated>

		<published>2006-08-09T14:44:27-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65319#p65319</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65319#p65319"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65319#p65319"><![CDATA[
note to ko-pach: when posting any type of code, please enclose it between <div class="codebox"><p>Code: </p><pre><code> brackets.. especially when posting something that large</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=7663">krimson</a> — Wed Aug 09, 2006 2:44 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[ko-pach]]></name></author>
		<updated>2006-08-09T11:08:18-04:00</updated>

		<published>2006-08-09T11:08:18-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65315#p65315</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65315#p65315"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65315#p65315"><![CDATA[
I'm using this script too, but its a RBL checker<br><br>set proxycheck_rbls { "cbl.abuseat.org" "opm.blitzed.org" "dnsbl.ahbl.org" }<br><br>This one I'm posting is checking the host directly, and after host reply, if there is an open proxy or socks 4&amp;5 bot making ban user/host.<br><br>I need modification to checking host via different ports, the Anti-Proxy tcl now working only with one port. See below:<br><br># Not a valid host.<br>if {[catch {set sock [socket -async $host 20492]}]} { ..<br><br>I'm set for now this port, but need variables to checking more ports per host.<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=8069">ko-pach</a> — Wed Aug 09, 2006 11:08 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Callisto]]></name></author>
		<updated>2006-08-09T10:38:12-04:00</updated>

		<published>2006-08-09T10:38:12-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65312#p65312</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65312#p65312"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65312#p65312"><![CDATA[
I prefer the script found here <a href="http://www.jamesoff.net/projects/eggdrop/proxycheck.tcl" class="postlink"> http://www.jamesoff.net/projects/eggdr ... check.tcl </a><br><br>This uses a DNSBL to check for proxies so it is pretty much kept up to date.<br><br>One warning though, if your network partially masks host info this may not work unless you can give your bot an Oline.<br>Good luck<br>Callisto<p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=6064">Callisto</a> — Wed Aug 09, 2006 10:38 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[ko-pach]]></name></author>
		<updated>2006-08-09T10:06:09-04:00</updated>

		<published>2006-08-09T10:06:09-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=65310#p65310</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=65310#p65310"/>
		<title type="html"><![CDATA[Anti-Socks v1.1 TCL need hack]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=65310#p65310"><![CDATA[
I found a cool script checking users on-join for open proxyes, socks 4 &amp; 5.<br><br>I't work fine, but only one port is used for checking.<br><br>Can somebody make a variables port to check.<br><br>For example: host:port 1;2;3 ... (87.252.161.42:8080 .. 87.252.161.42:1080 .. etc)<br><br>Sorry for my bad english, and thanks advanced<div class="codebox"><p>Code: </p><pre><code>############################ Anti-Socks v1.1 ##############################                              by Cashflo                                ##                         Cashflo@GalaxyNet.Org                          ##             http://www.galaxynet.org/ircops/cashflo.html               ##           Final Beta tested on Eggdrop1.3.23/26 w/ tcl8.0/1            ##            Copyright (c) 1999 Cashflo All Rights Reserved.             ############################################################################  The first real anti socks/wingate scanner out there for tcl, connects ##per RFC and see's if server responds with no authorization required.  No##scanning Telnet ports which could be a possible security threat, or just# #seeing if 1080 is open which could be a nukenapper.   Actually tries to ## connect as a sock client to the server, and sees if a no authorization ##needed responce is returned.  Works for both socks4 and socks5.  Script ##  is capable of checking for socks, via dcc, msg, pub, by any user &amp; a  ##option to allow any IrcOp to be able to scan via msg &amp; pub, as well as a##  option to have the bot scan scan server connections as a local IrcOp  ## connection monitor and be able to k-line and or local wallop on socks. ##Script can Ban/onotice/log/lwallop on cooresponding automatic Triggers. ############################################################################     Any problems or suggestions please contact me on irc or e-mail.    ##    Same goes for if you want to edit this script or use parts of it.   ############################################################################ GalaxyNet Eggdrop's also check out glxauth*.tcl.gz avaliable on sodre. ## Script has been edited to support galaxynet auth if it is loaded, but  ##  make sure in config source line for glxauth comes before anti-socks.  ############################################################################     Special Thanks to: Andyh, Fwibbly &amp; of course Gawyn (as always)    ##                For helping me w/ rfc1928 and such.                     ############################################################################  This script Requires, tcl8.0+ and if you don't edit main.c yourself   ## you need eggdrop1.3.23+, reason for this is because Tcl_DoOneEvent was ## put in main.c on 1.3.23, if running a earlier version you are going to ## have to compile it yourself by searching main.c for the following line # #"debug0("main: entering loop");", below that line is the main while loop##inside the while loop add the following "Tcl_DoOneEvent(TCL_DONT_WAIT);"## After saving those changes to main.c, remake/compile the bot, and then ##  go to line 260 about in this script and remove scanning for 1.3.23+   ##And also make sure to compile in bind raw if pre 1.3.* via src/eggdrop.h##line 86 "#define bind raw" in 1.1.5, not sure if will elimiate all probs##    Bottom line, I recommend and its easier if you upgrade to 1.3.*     ##      but in any case you are going to need tcl 8.0 or greater!!!       ############################################################################ .socks &lt;host/nick&gt; - manually check socks via dcc.                     ## /msg bot socks &lt;host/nick&gt; - manually check for socks via msg.         ## !socks &lt;host/nick&gt; - Manually check for socks via channel.             ## .sockshelp [command] - List of commands w/ syntax, or info on [command]## .sockset &lt;command&gt; - Changes setting temp on &lt;command&gt;.                ## .showsocks [all/last #n/search phrase] - Scans socks log based on arg. ## .viewset [setting] - shows you all values or a specific settings value.############################################################################ Important to GalaxyNet Users!! if you are running GlxAuth 2.2 or less, ## make sure this script is loaded in config AFTER glxauth is loaded.     ############################################################################  If you are running this as a IrcOp'ed Connection Monitor, please make ## Sure your bot is secure, ie. remove .tcl and any scripts that you are  ## not 100% sure are secured, and won't let anyone send raw data to server##  Also watch who you let into bot, and limit access and amount of users ## on the bot.  I will not be held liable for anything, including but not ##    limited to problems resulting from badly configured oper'ed bots.   ############################################################################ Don't forget to check for updates, either on ftp's or on GalaxyNet IRC ##     network /ctcp glxauth cdcc list  This is latest as of 4/23/99      ############################################################################ This Script Does the Following:# 01) Scans for socks on:#     A) Join.#     B) Connections.#     C) Dcc via .socks &lt;host/nick&gt;.#     D) Msg via /msg bot socks &lt;host/nick&gt;.#     E) Pub via !socks &lt;host/nick&gt;.# 02) On Open Socks:#     A) Bans if on join.#     B) Can k-line if connect.#     C) Can lwallop if connect.#     D) Can log to file.#     E) Can ONOTICE if on join.#     F) Report back to you open socks.# 03) Exempt:#     A) Can exempt channels from on join checking.#     B) Can exempt hosts from on join and connect checking.#     C) Can exempt flags from on join checking and on connect checking.# 04) Connection Times Out After 15seconds.# 05) Connection is asyncrous which means bot is not blocked while waiting for reply.# 06) Bot tries to /oper if $onick/$opass/$sockconnect are all set.# 07) Checks to make sure proper version of eggdrop and tcl is being run.# 08) Help via .sockshelp:#     A) .sockshelp.#     B) .sockshelp socks.#     C) .sockshelp showsocks.#     D) .sockshelp sockshelp.# 09) Show list of open socks that where logged.# 10) Change settings via .sockset:#     A) Socks scan on join.#     B) Exempt channels fron on join scanning.#     C) Time to ban someone on join socks.#     D) Hosts exempt from on join and on connect scanning.#     E) Flags exempt from on join scanning.#     F) Turn on or off or change file that socks are logged to.#     G) Allow anyone umode +O (IrcOp) to scan for socks.#     H) Turn on or off socks checking on connect.#     I) Turn on or off lwalloping on open socks on connect.#     J) Turn on or off auto k-line of open socks on connect.#     K) Change bots o-line Nick.#     L) Change bots o-line Pass.#     M) Turn on or off onoticing on open socks on join.# 11) View settings via .viewset [setting].# 12) Delete sockslog via .delsocks.# ---v1.1---# 13) Option to send out onotice (notice to ops) when a wingate on join.# 14) Fixed socks 4 scanning, before was just seeing if it was a socks4 now see's if its #opened via another connection attempt.# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ## !!!!!!!!!!!!!!!!!!!!!!!!----- SET THE FOLLOWING SETTINGS -----!!!!!!!!!!!!!!!!!!!!!! ## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ## --- On Join Stuff ---# Check socks on join, not including exempt channels (0 Off/ 1 On)set sockjoin 1# Channels to exempt from sock scanning on join. (if sockjoin is on)set sockchans { "#sock_exempt_chan1" "#sock_exempt_chan2" }# time to ban hosts for on open socks. (in minutes).set bantime 60# Send out a ONotice (Notice to ops) on a oepn sock on join? (0 Off/ 1 On).set socknotice 0# --- Exempt Stuff ---# Hosts (NOT USERS@HOST) to be exempt from sock scanning on join and or on client connetions.set sockhosts {}# Flags that are exempt from scanning on join and on connect by matching a handle #against the host and seeing if it contains ANY of these flags.set sockflags "f o m n"# --- End Exempt Stuff ---# File to log open socks to, set to "" for no logging.set socklog "socks.log"# Allow any IrcOp to /msg bot socks &lt;host/nick&gt; and check it for them (0 Off/ 1 On)set sockoper 1# --- Oper Bot Connection Monitor... (Below requires bot to have a o line) ---# Sock Check connection notices (0 Off/ 1 On) (Requires bot to have o line)set sockconnect 0# Local wallop on open socks (0 Off/ 1 On) ( Requires bot to have a local o line &amp; $sockconnect = 1)set socklwall 0# Auto k-line open sock hosts (0 Off / 1 On) (Requires bot to have a local o line &amp; $sockconnect = 1)set akline 0# Oline nickname (leave set to "" if no o-line) (Make sure to add in ircd.conf onick &amp; opass w/ proper host)set onick ""# o-line password (leave set to "" if no o-line)set opass ""# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ## !!!!!!!!!!!!!!!!!!!!!!----- DO NOT EDIT BELOW HERE-----!!!!!!!!!!!!!!!!!!!!!!!! ## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ## Make sure no vars got deleted.if {![info exists sockjoin]} { set sockjoin 1 }; if {![info exists sockchans]} { set sockchans "" }if {![info exists bantime]} { set bantime 60 }; if {![info exists sockhost]} { set sockhost "" }if {![info exists sockflags]} { set sockflags "f o m n" }; if {![info exists socklog]} { set socklog "socks.log" }if {![info exists sockoper]} { set sockoper 1 }; if {![info exists sockconnect]} { set sockconnect 0 }if {![info exists socklwall]} { set socklwall 0 }; if {![info exists akline]} { set akline 0 }if {![info exists onick]} { set onick "" }; if {![info exists opass]} { set opass "" }if {![info exists socknotice]} { set socknotice0 }; set isircop 0if {[info exists timeout]} { unset timeout }; if {[info exists ohost]} { unset ohost }if {[info exists nthing]} { unset nthing }# Version infoset sockver "1.1"# Very basic encryption.if {$opass != ""} { set opass [encrypt $sockver $opass] }# Help arraysset sockshelp(socks) [list "o/oper" ".socks &lt;host/nick&gt; | /msg $botnick socks &lt;host/nick&gt; | !socks &lt;host/nick&gt;" "Manually scans &lt;host/nick&gt; for open socks. Or if \$opersock is set on, will let any IrcOp check for open socks"]set sockshelp(showsocks) [list "o" ".showsocks \[all/last #/search phrase\]" "Outputs data from log file based on options, if no option is given shows all:  [format %-18s ".showsocks \[n\]"] - Last n open socks recorded.  [format %-18s ".showsocks all"] - Shows all entries from socks log.  [format %-18s ".showsocks \[phrase\]"] - Scans log for entries containing phrase"]set sockshelp(sockshelp) [list "all" ".sockshelp \[command\]" "Shows syntax of all comamnds if no \[command\] is specified, otherwise shows detailed help on command"]set sockshelp(viewset) [list "o" ".viewset \[setting\]" "View all or a specifc settings value"]set sockshelp(delsocks) [list "m" ".delsocks" "Clear the sockslog file"]set sockshelp(sockset) [list "m" ".sockset &lt;setting&gt; \[new setting\]" "Change settings or of no newset show current setting:[format %-21s \026\[command\]\026]  \026Info\026[format %-20s "akline &lt;0/1&gt;"] Turn on or off auto k-line of open socks on connect.[format %-20s "bantime \[time\]"] Time to ban someone on join socks  if no time is specified then banning is disabled.  if bantime is 0 then bans become perm.[format %-20s "onick &lt;o nick&gt;"] Change bots o-line Nick. [format %-20s "opass &lt;o pass&gt;"] Change bots o-line Pass. [format %-20s "+sockchan &lt;#channel&gt;"] Add a chan to exempts on join scanning.[format %-20s "-sockchan &lt;#channel&gt;"] Delete a channel from exempt of join scanning.[format %-20s "sockconnect &lt;0/1&gt;"] Turn on or off socks checking on connect.[format %-20s "+sockhost &lt;host&gt;"] Adds a Host to exempt from on join and on connect scanning.[format %-20s "-sockhost &lt;host&gt;"] Deletes a exempt host from on join and connect scanning.[format %-20s "+sockflag &lt;flag&gt;"] Adds a flags to exempt flags from on join scanning.[format %-20s "-sockflag &lt;flag&gt;"] Deletes a exempt flag.[format %-20s "sockjoin &lt;0/1&gt;"] Socks scan on join.[format %-20s "socklog \[file\]"] Change file that socks are logged to, if no file specifed then shuts it off.[format %-20s "socklwall &lt;0/1&gt;"] Turn on or off lwalloping on open socks on connect.[format %-20s "socknotice &lt;0/1&gt;"] Turn on or off sending out a notice to all ops on channel on a on join open socks.[format %-20s "sockoper &lt;0/1&gt;"] Allow anyone umode +O (IrcOp) to scan for socks"]# See if person can handle script.if {![info exists numversion] || ($numversion &lt; 1032300)} {  if {[string range $version 0 2] != "1.3"} {    putlog "*** Can't load anti-socks -- At least Eggdrop v1.3.23 required"    return 0  }}if {(![info exists tcl_version] || $tcl_version &lt; 8.0)} {  putlog "*** Can't load anti-socks -- Need at least tcl 8.0"  return 0}# Set settings needed if user is set to check socks on connection msgs.if {$sockconnect} {  if {[info exists gaccess]} { catch {unbind raw - notice raw_notice} } ;# Support for GalaxyNet Auth.  bind raw - NOTICE raw_connect  if {($onick != "" &amp;&amp; $opass != "")} {    set init-server { sock-init }  }}# Listening port stuff for a socks4 connection request....if {[info exists v4sock]} { catch {close $v4sock}; unset v4sock };   # Delete/close previous sock serverproc getconnect {sock addr port} { catch {close $sock} };   # Proc for a incoming sock4 check.set v4port "2[rand 9][rand 9][rand 9]";   # set the incoming port to a random port between 2000-2999# Setup a incoming server socket for sock4 scanning, if port is unavaliable try another.set x 0while {$x == 0} { if {![catch {set v4sock [socket -server getconnect $v4port]}]} { set x 1 } }# Now a IrcOp.bind raw - 381 raw_nowopproc raw_nowop {from keyword arg} {global akline botnick isircop server socklwall sockver version  if {[lindex $arg 0] == $botnick} {    set isircop 1    set end ""    if {$socklwall} { set end [append end ".  Local Wallops sent on open socks"] }    if {$akline} { set end [append end ".  Auto K-line set on open socks"] }    set cmsg "\026Anti-Socks Connection Monitor v$sockver\026 on Eggdrop[lindex $version 0] by Cashflo &lt;Cashflo@GalaxyNet.org&gt;  Is running on $server$end."    putserv "LWALLOPS :$cmsg"    }}proc sock-init {} {global akline botnick gaccess onick opass server sockconnect socklwall sockver version  if {$sockconnect} {# See if bot is a oper."    putserv "whois $botnick"# Oper bot    putserv "oper $onick [decrypt $sockver $opass]"# Support for GalaxyNet Auth.    if {[info exists gaccess]} {      catch {init-server}    }  }}# Join Checking Proc.if {$sockjoin} {bind join - * join_sock}proc join_sock {nick userhost handle channel} {global sockchans sockflags sockhosts# Exempt channel  if {[lsearch -glob $sockchans $channel] != -1} { return 0 }  set host [lindex [split $userhost @] 1]# Exempt hosts  foreach pattern $sockhosts {        if {[string match $pattern $host]} { return 1 }           }# Exempt flag  foreach exflag $sockflags {    if {[matchattr $handle $exflag]} { return 0 }  }  wingate $host join $channel $nick}# --- DCC Procs ---# Dcc Helpbind dcc - sockshelp dcc_sockshelpbind dcc - sockhelp dcc_sockshelpproc dcc_sockshelp {hand idx arg} {global sockshelp sockver version  set arg [lindex $arg 0]  putdcc $idx "---- \026Anti-Socks v$sockver on eggdrop[lindex $version 0]\026 ----"  set list "delsocks socks sockshelp sockset showsocks viewset"  if {$arg == ""} {    foreach command $list {      putdcc $idx "[lindex $sockshelp($command) 1]"    }    putdcc $idx " "    putdcc $idx "\026\002.sockshelp &lt;command&gt; for more info.\002\026"  } else {    if {[string index $arg 0] == "."} {      set arg [lindex [split $arg .] 1]    }    set arg [string tolower $arg]    if {[catch {set test $sockshelp($arg)}]} {      putdcc $idx "$arg is not a valid command, .sockhelp for list of commands."      return 1    }    putdcc $idx "\002Command\002: $arg"    putdcc $idx "\002Flag\002: [lindex $sockshelp($arg) 0]"    putdcc $idx "\002Syntax\002: [lindex $sockshelp($arg) 1]"    putdcc $idx "\002Summary\002: [lindex $sockshelp($arg) 2]."  }  return 1}# Dcc command to show list of takeovers from logfile.bind dcc o showsocks dcc_showsocksproc dcc_showsocks {hand idx arg} {global socklog  if {$socklog != ""} {# See if user specified a number of socks to show from last    if {($arg != "" &amp;&amp; $arg != "all")} {# See if they entered .showsocks #1, instead of .showsocks 1, if so weed out the leading #.      if {[string index $arg 0] == "#" &amp;&amp; [regexp "^\[0-9\]+$" [string range $arg 1 end]]} {        set arg [string range $arg 1 end]      }# If they entered a number, show last $arg socks recorded.      if {[regexp "^\[0-9\]+$" $arg]} {        set tail ""        putdcc $idx "Last $arg socks recorded."        catch {set tail [exec tail -n $arg $socklog]}        putdcc $idx "$tail"      } else {# Scan logfile for the string        putdcc $idx "Scaning Open Socks Log for $arg."        set grep ""        catch {set grep [exec grep $arg $socklog]}        if {$grep != ""} {          putdcc $idx "$grep"        } else {          putdcc $idx "$arg was not located in socks log.  Use \".sockshelp showsocks\" for assistance."        }      }    } else {# If you did'nt enter any arg or was all, spit out the full socks log      putdcc $idx "You did'nt specify the last # of open socks, showing all."      set fd [open $socklog]      set count -1      while {![eof $fd]} {        putdcc $idx [gets $fd]          set count [expr $count + 1]      }      close $fd    }    if {[info exists count]} {      putdcc $idx "$count entries in sock log $socklog."    }  } else {    putdcc $idx "Log file does not exist."  }  return 1}      # Dcc command to clear the socks logfile.bind dcc m delsocks dcc_delsocksproc dcc_delsocks {hand idx arg} {global socklog  if {[file exists $socklog]} {    set x [open $socklog w]    catch {close $x}    putdcc $idx "Deleted the open socks logfile."  } else {    putdcc $idx "Socks log does not exist."  }  return 1}# Dcc to temp change settings till a rehash.bind dcc m sockset dcc_socksetproc dcc_sockset {hand idx arg} {global akline bantime onick opass sockjoin sockchans sockconnect sockflags sockhosts socklwall socklog socknotice sockoperset list "akline bantime onick opass sockconnect sockjoin socklog socklwall socknotice sockoper +sockchan -sockchan +sockflag -sockflag +sockhost -sockhost"global botnick gaccess isircop sockver version  putdcc $idx "\026Setting for Anti-Socks v$sockver on eggdrop[lindex $version 0].\026"  if {$arg != ""} {    set arg [string tolower $arg]    set setting [lindex $arg 0]    set newset [lrange $arg 1 end]    if {[lsearch -exact [string tolower $list] ${setting}] != -1} {# Can't have -'s in switch statement.....      if {(${setting} == "-sockchan" || ${setting} == "-sockflag" || ${setting} == "-sockhost")} {        if {$setting == "-sockchan"} {          if {$newset != ""} {            if {[lsearch -exact [string tolower $sockchans] $newset] != -1} {              for {set loopvar 0} {$loopvar &lt; [llength $sockchans]} {incr loopvar} {                if {$newset == [string tolower [lindex $sockchans $loopvar]]} {                  set sockchans [lreplace $sockchans $loopvar $loopvar]                }              }              putdcc $idx "Removed $newset from list of exempt channels."            } else {              putdcc $idx "$newset is not a exempt channel, can not remove it."            }          } else {            putdcc $idx "\002Syntax\002: .sockset -sockchan &lt;#channel&gt;."            putdcc $idx "Left sockchans on $sockchans."          }         } elseif {$setting == "-sockflag"} {           if {$newset != ""} {            if {[lsearch -exact [string tolower $sockflags] $newset] != -1} {              for {set loopvar 0} {$loopvar &lt; [llength $sockflags]} {incr loopvar 1} {                if {$newset == [string tolower [lindex $sockflags $loopvar]]} {                  set sockflags [lreplace $sockflags $loopvar $loopvar]                }              }              putdcc $idx "Removed $newset from list of exempt flags."            } else {              putdcc $idx "$newset is not a exempt flag from sock scanning."             }          } else {            putdcc $idx "\002Syntax\002: .sockset -sockflag &lt;flag&gt;. For Further Assistance \".sockshelp -sockflag\""            putdcc $idx "Left sockflags on $sockflags."          }        } elseif {$setting == "-sockhost"} {          if {$newset != ""} {            if {[lsearch -exact [string tolower $sockhosts] $newset] != -1} {              for {set loopvar 0} {$loopvar &lt; [llength $sockhosts]} {incr loopvar 1} {                if {$newset == [string tolower [lindex $sockhosts $loopvar]]} {                  set sockhosts [lreplace $sockhosts $loopvar $loopvar]                }              }              if {$isircop} { putserv "LWALLOPS :$hand removed exempt host $newset." }              putdcc $idx "Removed $newset from list of exempt hosts."            } else {              putdcc $idx "$newset is not a exempt host from sock scanning."            }          } else {            putdcc $idx "\002Syntax\002: .sockset -sockhost &lt;host&gt;.  \".sockshelp -sockhost\" for further assistance."            putdcc $idx "Left sockhosts on $sockhosts."          }        }        return 1      } # Setting is already set to that...      if {[string first + $setting] != 0 &amp;&amp; $newset == [expr $$setting]} {        putdcc $idx "\002Already Set\002: $setting is already set to $newset."        putdcc $idx ".sockhelp sockset for commands."        return 1      }# Switch for rest of commands.....      switch ${setting} {        "akline" {          if {($newset == 0 || $newset == 1)} {            set akline $newset            putdcc $idx "Set Auto-Kline to $akline"            if {$isircop} {putserv "LWALLOPS :Auto K-line changed to $akline by $hand"}          } else {            putdcc $idx "\002Syntax\002: .sockset akline &lt;0/1&gt;.  Left auto k-line on $akline."          }        }        "bantime" {          if {[regexp "^\[0-9\]+$" $newset]} {            set bantime $newset            if {$bantime == 0} {              putdcc $idx "Made Bantime perm."            } elseif {$bantime == ""} {               putdcc $idx "Shut off banning."            } else {               putdcc $idx "Set Bantime to $bantime."            }          } elseif {$newset == ""} {            set bantime $newset            putdcc $idx "Shut off banning"          } else {            putdcc $idx "\002Syntax\002: .sockset bantime &lt;time in minutes&gt;.  Left bantime on $bantime."          }        }        "onick" {          if {$newset != ""} {            set onick $newset            if {$isircop} { putserv "LWALLOPS :$hand changed my O-Line Name to $onick."}            putdcc $idx "Set onick to $onick."          } else {            putdcc $idx "\002Syntax\002: .sockset onick &lt;o-line nick&gt;.  Left O-line Nick on $onick."          }        }        "opass" {          if {$newset != ""} {            set opass [encrypt $sockver $newset]            if {$isircop} { putserv "LWALLOPS :$hand changed my O-Line Pass." }            putdcc $idx "Set opass to $opass."          } else {            putdcc $idx "\002Syntax\002: .sockset opass &lt;o-line pass&gt;."          }        }        "sockconnect" {          if {($newset == 0 || $newset == 1)} {            set sockconnect $newset            if {$newset == 0} {              if {$isircop} {                 putserv "LWALLOPS :$hand turned off scanning on connect."                putserv "MODE $botnick -o"              }              catch {unbind raw - NOTICE raw_connect}              if {[info exists gaccess]} { bind raw - notice raw_notice } ;# Support for GlxAuth            } else {              if {[info exists gaccess]} { catch {unbind raw - notice raw_notice } } ;# Glxauth Support              catch {bind raw - NOTICE raw_connect}              sock-init              if {$isircop} {putserv "LWALLOPS :$hand turned on sock scanning on connect."}            }            putdcc $idx "Set sock scanning on connect to $sockconnect."          } else {            putdcc $idx "\002Syntax\002: .sockset sockconnect &lt;0/1&gt;.  Left sock scanning on client connect on $sockconnect."          }        }          "sockjoin" {          if {($newset == 0 || $newset == 1)} {            if {$newset == 1 &amp;&amp; $sockjoin == 0 } {               catch {bind join - * join_sock}             } elseif {$newset == 0 &amp;&amp; $sockjoin == 1} {               catch {unbind join - * join_sock}             }            set sockjoin $newset            putdcc $idx "Set sockjoin to $sockjoin."          } else {            putdcc $idx "\002Syntax\002: .sockset sockjoin &lt;0/1&gt;.  Left sock scanning on join on $sockjoin."          }        }        "socklog" {          if {$newset == ""} {            set socklog $newset            putdcc $idx "Turned off sock logging."          } else {            set socklog $newset            putdcc $idx "Set Sock Log File to $newset."          }        }        "socklwall" {          if {($newset == 0 || $newset == 1)} {            set socklwall $newset            putdcc $idx "Changed Sock Lwalloping to $socklwall."            if {$isircop} {putserv "LWALLOPS :$hand changed open sock lwalloping to $socklwall."}          } else {            putdcc $idx "\002Syntax\002: .sockset socklwall &lt;0/1&gt;.  Left socklwall on $socklwall."          }        }        "socknotice" {          if {($newset == 0 || $newset == 1)} {            set socknotice $newset            putdcc $idx "Changed Sock Op Noticing to $socknotice."          } else {            putdcc $idx "\002Syntax\002: .sockset socknotice &lt;0/1&gt;.  Left socknotice on $socknotice."          }        }        "sockoper" {          if {($newset == 0 || $newset == 1)} {            set sockoper $newset            putdcc $idx "Set Allow any IrcOp to sock check to $sockoper."          } else {            putdcc $idx "\002Syntax\002: .sockset sockoper &lt;0/1&gt;.  Left Allow any IrcOp to check for socks on $sockoper."          }        }          "+sockchan" {          if {$newset != ""} {            if {[lsearch -exact [string tolower $sockchans] $newset] == -1} {              set sockchans [append sockchans " $newset"]              putdcc $idx "Added $newset to list of exempt channels."            } else {              putdcc $idx "$newset is already a exempt channel from sock scanning."            }          } else {            putdcc $idx "\002Syntax\002: .sockset +sockchan &lt;#channel&gt;."            putdcc $idx "Left Exempt Channels on: $sockchans"          }        }        "+sockflag" {          if {$newset != ""} {            if {[lsearch -exact [string tolower $sockflags] $newset] == -1} {              set sockflags [append sockflags " $newset"]              putdcc $idx "Added $newset to list of exempt flags from on join socks scanning."            } else {              putdcc $idx "$newset is already a exempt flag from on join socks scanning."            }          } else {            putdcc $idx "\002Syntax\002: .sockset +sockflag &lt;exempt flag&gt;."            putdcc $idx "Left sockflags on: $sockflags"          }        }        "+sockhost" {          if {$newset != ""} {            if {[lsearch -exact [string tolower $sockhosts] $newset] == -1} {              set sockhosts [append sockhosts " $newset"]              if {$isircop} { putserv "LWALLOPS :$hand exempted host $newset." }              putdcc $idx "Added $newset to list of exempt hosts."            } else {              putdcc $idx "$newset is already a exempt host from sock scanning."            }          } else {            putdcc $idx "\002Syntax\002: .sockset +sockhost &lt;exempt sock-host&gt;."            putdcc $idx "Left sockhosts on $sockhosts."          }        }      }    } else {      putdcc $idx "You did not enter: $list"    }  } else {    putdcc $idx "\002Syntax\002: .sockset &lt;arg&gt; \[setting\]."    putdcc $idx "Valid commands are: $list."    putdcc $idx "\026\".sockshelp sockset\" for further assistance.\026"  }  return 1}# Dcc To show settings.bind dcc o viewset dcc_viewsetproc dcc_viewset {hand idx arg} {  set list "akline bantime onick opass sockjoin sockchans sockconnect sockflags sockhosts socklwall socklog sockoper"  putdcc $idx "\026-------- Current Settings --------\026  "  putdcc $idx "\002Setting                   Value\002    "  if {$arg == ""} {    foreach setting $list {      global $setting      set value [expr $$setting]      if {$setting == "opass"} {        if {$value != ""} {          putdcc $idx "[format %-28s $setting] *IS SET*"        } else {          putdcc $idx "[format %-28s $setting] *NOT SET*"        }        continue      }      putdcc $idx "[format %-28s $setting] $value"    }  } else {    if {[lsearch -exact $list [string tolower $arg]] != -1} {      global $arg      if {$arg != "opass"} {        set value [expr $$arg]        putdcc $idx "[format %-28s $arg] $value"      } else {        putdcc $idx "O-Line Password Setting is not viewable."      }    } else {      putdcc $idx "Not a valid setting."      putdcc $idx "Valid settings are: $list."    }  }  return 1}# Dcc sock checking.bind dcc o socks dcc_socksbind dcc o sock dcc_socksbind dcc o wingate dcc_socksproc dcc_socks {hand idx arg} {global nthing  if {[info exists nidx]} { unset nidx }  set host [lindex $arg 0]  if {$host != ""} { # Get users host.    if {[llength [split $arg .]] == 1} {      putserv "userhost [lindex $arg 0]"      set nthing $idx      return 1    }# Format was a nick.    putdcc $idx "\002SCANNING\002: $host for open socks."    wingate $host dcc $idx  } else {    putdcc $idx "\002Syntax\002: .socks &lt;host/nick&gt;.  \".sockshelp socks\" for more info."  }  return 1}# --- Msg Procs ---# msg for wingate checkingbind msg - socks msg_socksbind msg - sock msg_socksbind msg - wingate msg_socksproc msg_socks {nick userhost handle arg} {global nthing ohost sockoper  if {[info exists ohost]} { unset ohost }  if {[info exists nthing]} { unset nthing }  if {[matchattr $handle o]} {    set host [lindex $arg 0]    if {$host != ""} {# Get users host.      if {[llength [split $arg .]] == 1} {        putserv "userhost [lindex $arg 0]"        set nthing $nick        return 1      }      putserv "NOTICE $nick :\002SCANNING\002: $host for open socks."      wingate $host msg $nick    } else {      putserv "NOTICE $nick :\002Syntax\002: .socks &lt;host/nick&gt;."    }  } elseif {$sockoper} {    set ohost [lindex $arg 0]    if {$ohost != ""} {      set ohost "msg $ohost"      putserv "WHOIS $nick"    } else {      putserv "NOTICE $nick :\002Syntax\002: .socks &lt;host/nick&gt;."    }  }  return 1}# A IrcOp msging bot who does not have access or bot seeing if it is a oper on rehash.if {$sockoper} { bind raw - 313 raw_oper }proc raw_oper {from keyword arg} {global botnick isircop nthing ohost# Ohost = type host [channel]  if {[info exists ohost]} {    if {[llength [split [lindex $ohost 1] .]] == 1} {      putserv "userhost [lindex $ohost 1]"      if {[lindex $ohost 0] == "pub"} {         set nthing [lindex $ohost 2]      } elseif {[lindex $ohost 0] == "msg" } { set nthing [lindex $arg 1] }      return 1    }    set msg "\002SCANNING\002: [lindex $ohost 1] for open socks."    if {[lindex $ohost 0] == "msg"} {       putserv "NOTICE [lindex $arg 1] :$msg"      set whereto [lindex $arg 1]    } elseif {[lindex $ohost 0] == "pub"} {       putserv "PRIVMSG [lindex $ohost 2] :$msg"      set whereto [lindex $ohost 2]    }    wingate [lindex $ohost 1] [lindex $ohost 0] $whereto    unset ohost  } elseif {[lindex $arg 1] == $botnick} {    set isircop 1  }}# userhost reply from a user......bind raw - 302 raw_isuserproc raw_isuser {from keyword arg} {global nthing  if {[info exists nthing]} {    set host [lindex [split [lindex [split [lindex $arg 1] =] 1] @] 1]    if {$host != ""} {      set msg "\002SCANNING\002: Scanning $host ([string trimright [string trimleft [lindex [split [lindex $arg 1] =] 0] :] *]) for open socks."    } else {      set msg "\002Not Online\002: User is not online"    }    if {[regexp "^\[0-9\]+$" $nthing]} {      putdcc $nthing "$msg"      set type "dcc"    } elseif {[string first # $nthing] == 0} {      putserv "PRIVMSG $nthing :$msg"      set type "pub"    } else {      putserv "NOTICE $nthing :$msg"      set type "msg"    }    if {[lrange $msg 2 end] != "User is not online"} { wingate $host $type $nthing }    unset nthing  }  return 1}# Public command !socks &lt;host&gt;bind pub - !socks pub_socksbind pub - !sock pub_socksproc pub_socks {nick userhost handle channel arg} {global nthing ohost sockoper  if {[matchattr $handle o]} {    set host [lindex $arg 0]    if {$host != ""} {# Get users host.      if {[llength [split $arg .]] == 1} {        putserv "userhost [lindex $arg 0]"        set nthing $channel        return 1      }      putserv "PRIVMSG $channel :\002SCANNING\002: $host for open socks."      wingate $host pub $channel    } else {      putserv "NOTICE $nick :\002Syntax\002: !socks &lt;host/nick&gt;."    }  } elseif {$sockoper} {    set ohost [lindex $arg 0]    if {$ohost != ""} {      set ohost "pub $ohost $channel"      putserv "WHOIS $nick"     } else {      putserv "NOTICE $nick :\002Syntax\002: !socks &lt;host/nick&gt;."    }  }  return 1}# Connection msgsproc raw_connect {from keyword arg} {global akline gaccess orawscript sockflags sockhosts  if {[lindex [split [string tolower $from] @] 1] == "" &amp;&amp; [lrange $arg 4 5] == "Client connecting:"} {    set userhost [split [string trimright [string trimleft [lindex $arg 7] (] )] @]    set user [lindex $userhost 0]; set host [lindex $userhost 1]# Exempt hosts    foreach pattern $sockhosts {      if {[string match $pattern $host]} { return 1 }    }# Exempt flag    set handle [finduser [lindex $arg 6]!$user@$host]    if {$handle != "*"} {      foreach exflag $sockflags {        if {[matchattr $handle $exflag]} { return 1 }      }    }# Get the reply of wingate    wingate $host connect  }  if {[info exists gaccess]} { catch {raw_notice $from $keyword $arg} } ;# Support for GlxAuth  return 1}# Scanner.proc wingate {host type args} {global timeout  set args [join $args " "]# Not a valid host.  if {[catch {set sock [socket -async $host 20492]}]} {    if {$type == "dcc"} { putdcc [lindex $args 0] "\002Not Valid\002: Unable to connect to $host." }    if {$type == "msg"} { putserv "NOTICE [lindex $args 0] :\002Not Valid\002: Unable to connect to $host." }    if {$type == "pub"} { putserv "PRIVMSG [lindex $args 0] :\002Not Valid\002: Unable to connect to $host." }      return 0  }  fileevent $sock writable [list gotconnect $sock $host $type $args];# wait for connect.  fileevent $sock readable [list gotread $sock $host $type $args];#wait for responce.# Timeout after 15seconds  set timeout($sock) ""  utimer 15 "timeout $sock $host $type $args"}# Connection timed out.proc timeout {sock host type args} {global timeout  if {[info exists timeout($sock)]} {    unset timeout($sock)    fileevent $sock writable {}   ;# remove previous handler    fileevent $sock readable {}    ;# remove previous handler    close $sock    ;# close the socket    if {$type == "dcc"} { putdcc [lindex $args 0] "\002TIME OUT\002: Timeout on connection to $host." }    if {$type == "msg"} { putserv "NOTICE [lindex $args 0] :\002TIME OUT\002: Timeout on connection to $host." }    if {$type == "pub"} { putserv "PRIVMSG [lindex $args 0] :\002TIME OUT\002: Timeout on connect to $host." }  }  return 0}# Successfully connected, send data.proc gotconnect {sock host type args} {global botname timeout v4port  set args [join $args " "]  # Send it request to connect, if its rejected (broken pipe) ports are not open.  # 5 = SOCKS5/ 1 = I know 1 authentication methods/ 0 the one i know is 'none' as in completely open  fconfigure $sock -translation binary -buffering none -blocking 1;# configure the connection.  fileevent $sock writable {}    ;# remove previous handler# Send out the data, if can not send, no socks.  if {[lindex $args end] == "v4"} {    set data "[binary format "ccSI" 4 1 $v4port [myip]][exec whoami][binary format c 0]"  } else {    set data "[binary format ccc 5 1 0]"  }  if {[catch {puts $sock $data}]} {    if {$type == "dcc"} { putdcc [lindex $args 0] "\002NO SOCKS\002: not a socks host $host." }    if {$type == "msg"} { putserv "NOTICE [lindex $args 0] :\002NO SOCKS\002: not a socks host $host."}    if {$type == "pub"} { putserv "PRIVMSG [lindex $args 0] :\002NO SOCKS\002: not a socks host $host." }    if {[info exists timeout($sock)]} { unset timeout($sock) }    catch {close $sock}  }}# Got reply.proc gotread {sock host type args} {global akline bantime botnick socklog socklwall socknotice timeout  set args [join $args " "]  if {[info exists timeout($sock)]} { unset timeout($sock) }  foreach timer [utimers] {    if {([lindex [lindex $timer 1] 0] == "timeout" &amp;&amp; [lindex [lindex $timer 1] 1] == $sock)} { killutimer [lindex $timer 2] }  }# Read in 2 bytes of data from reply. was hh  catch {binary scan [read $sock 2] cc reply reply2}  fileevent $sock readable {}    ;# remove previous handler  catch {close $sock}# Got 2bytes of reply  if {([info exists reply] &amp;&amp; [info exists reply2])} {    if {$reply == 0} { set reply 4 }# Is sock4 or sock5    if {$reply == 4 || $reply == 5} {# Reply was is a socks4 w/ error msg, connect as socks4 and see if open.      if {$reply == 4 &amp;&amp; $reply2 == 91} {# If connection is still not granted after second attempt, give up.....        if {[lindex $args end] != "v4"} {          set lastv4time [unixtime]; set lastv4host $host          wingate $host $type $args v4          return 0        }      }# no auth is required. (90 = sock4, 0 = sock5)      if {($reply == 4 &amp;&amp; $reply2 == 90 || $reply == 5 &amp;&amp; $reply2 == 0)} {        set msg "\002OPEN\002: Socks v$reply found at $host."        if {$type == "join"} {          putserv "kick [lindex $args 0] [lindex $args 1] :Open socks v$reply found on $host!"          if {$bantime != ""} { newban *!*@${host} $botnick "Open socks v$reply found on $host!" $bantime }        } elseif {$type == "connect"} {           if {$akline} {            append msg "  K-line Auto Activated on host."            putserv "KLINE *@${host} :Open Socks v$reply."          }        }# Log wingates.        if {$socklog != ""} {          set x [open $socklog a+]          puts $x "[date] [time] - $host"          close $x        }# Secure socks      } else {        set msg "\002SECURE SOCKS\002: $host is a socks v$reply but authentication is required."      }# Unknown reply    } else {      set msg "\002UNKNOWN\002: $host gave a unrecognized reply."    }# No socks.  } else {    if {$type != "join" &amp;&amp; $type != "connect"} { set msg "\002NO SOCKS\002: not a socks host $host." }  }# Send out warning messages.  if {![info exist msg]} { return 0 }  if {$type == "dcc"} {    putdcc [lindex $args 0] "$msg"  } elseif {$type == "msg"} {    putserv "NOTICE [lindex $args 0] :$msg"  } elseif {$type == "pub"} {    putserv "PRIVMSG [lindex $args 0] :$msg"  } elseif {$type == "connect" &amp;&amp; $socklwall} {     putserv "LWALLOPS :$msg"  } elseif {$type == "join" &amp;&amp; $socknotice} {#Set max nicks at a time, and what amount up to, and list of nicks.    set numnicks 5; set oplist ""; set noticelist ""    foreach nick [chanlist [lindex $args 0]] {    # don't notice who's not op, the bot itself and other bots      if {([isop $nick [lindex $args 0]] &amp;&amp; $nick != $botnick)} {        incr numnicks        # Add next op        lappend noticelist $nick        # List of nicks is full, output then go on to next set of nicks.        if {$numnicks == $maxnicks} {          # Add a comma between each nick for outputting.          regsub -all " " $noticelist "," noticelist          puthelp "NOTICE $noticelist :$msg ([lindex $args 1])"          # Reset settings back for next group of nicks          set numnicks 0; set noticelist ""        }      }    }    # Leftover nicks    if {$noticelist != ""} {      regsub -all " " $noticelist "," noticelist      putserv "NOTICE $noticelist :$msg ([lindex $args 1])"    }  }}putlog "\002Anti-Socks v$sockver TCL\002 by Cashflo &lt;Cashflo@GalaxyNet.Org&gt; Loaded.  \".sockshelp\" For Assistance"</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=8069">ko-pach</a> — Wed Aug 09, 2006 10:06 am</p><hr />
]]></content>
	</entry>
	</feed>
