; 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 } }