rendered paste body; http://www.team-clanx.org/articles/socketbot-ident.html
on *:JOIN:#: {
if (!$checknum($site)) { return }
if ($network !isin $site) { var %host = $site | goto con }
var %net = $network | goto %net
:QuakeNet
if (*.users.quakenet.org iswm $site) { return }
var %host = $site | goto con
:Karma-IRC
if (Karma-IRC-* iswm $site) { return }
var %host = $site | goto con
:UnderNet
if (*.users.undernet.org iswm $site) { return }
var %host = $site | goto con
:SwiftIRC
if (Swift-* iswm $site) { return }
var %host = $site | goto con
:ChatSpike
if (ChatSpike-* iswm $site) { return }
var %host = $site | goto con
:AustNet
if (vw.* iswm $site) { return }
var %host = $site | goto con
:%net | var %host = $site
:con
var %sn = identdcheck. $+ %host
if ($sock(%sn)) { return }
sockopen %sn %host 113
sockmark %sn $network $chan $fulladdress
IDout Identd: $cid $network $chan $fulladdress IP? - Attempting %host >
}
on *:SOCKOPEN:identdcheck.*: {
var %s = $sock($sockname).mark $sock($sockname).ip
if ($sockerr) {
IDout 04Identd: %s - $sock($sockname).wsmsg
.signal IDENTD CONNECTFAIL %s $sock($sockname).wsmsg | return
}
IDout 12Identd: %s - Connection accepted. Sending 1234 , 6669 >
sockwrite -n $sockname 1234 , 6669
}
on *:SOCKREAD:identdcheck.*: {
var %s = $sock($sockname).mark $sock($sockname).ip
if ($sockerr) {
IDout 04Identd: %s - $sock($sockname).wsmsg
.signal IDENTD READERROR %s $sock($sockname).wsmsg
return
}
bunset &line | sockread -n &line | var %line = $bvar(&line,1,800).text
if ($bvar(&line,0) > 800) {
IDout 12Identd: %s line length > 800 chars (ignored rest): First 800:
IDout 12RESPONSE: %line | sockclose $sockname
IDout 12Identd: %s - Connection closed locally.
.signal IDENTD TOOLONG %s %line
return
}
if (%line == $null) {
sockclose $sockname
IDout 12Identd: %s - Received only a CRLF. Connection closed locally.
.signal IDENTD INVALID %s
return
}
tokenize 58 $remove(%line,$chr(32))
var %userid = $2, %sys = $3, %ident = $4- | tokenize 44 $1 | var %p1 = $1, %p2 = $2
if (%p1 != 1234) || (%p2 != 6669) || (%userid != USERID) {
IDout 12Identd: %s Response not complying with IDENTD protocol ( $+ %line $+ )
sockclose $sockname
IDout 12Identd: %s Connection closed locally.
.signal IDENTD INVALID %s %line
return
}
IDout 12Identd: %s System: %sys User ID: %ident
.signal IDENTD OK %s %sys %ident
sockclose $sockname
IDout 12Identd: %s Connection closed locally.
}
on *:SOCKCLOSE:identdcheck.*: {
var %s = $sock($sockname).mark $sock($sockname).ip
IDout 04Identd: %s - Connection closed remotely.
.signal IDENTD CONNECTLOST %s Connection closed remotely.
}
alias -l IDout {
var %w = @IDENTD
if (!$window(%w)) { window -d %w -1 -1 950 300 }
aline -p %w $asctime(yyyymmdd-HHnnss) $1-
if ($line(%w,0) > 5000) { dline %w 1 }
}
alias -l checknum {
var %total = $len($1), %i = 1
while (%i <= %total) {
if ($mid($1,%i,1) isnum) { return 1 }
inc %i
}
return 0
}
; $1 = CONNECTFAIL or CONNECTLOST or READERROR or TOOLONG or INVALID or OK
; $2 = IRC connection ID
; $3 = IRC network
; $4 = IRC channel
; $5 = nick!ident@host
; case $1 OK:
; $6 = IDENTD parameter System
; $7- = IDENTD parameter User ID
; case $1 not OK:
; $6- = error text
on *:SIGNAL:IDENTD: {
if ($scid($2)) { return }
if ($cid) != $2) { scid $2 }
if ($network != $3) || ($status != connected) { return }
}