All pastes #729483 Raw Edit

IDENTD Scanner

public text v1 · immutable
·published 2007-10-08 01:17 UTC
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 }


}