WebAdvisor

Platform:  TCL
Published  Jun 21, 2012
Updated  Jun 21, 2012
Based on FordLawnmower's version.

Will check all web addresses that are posted on a channel. Can change options on which ones to show. package require http
namespace eval webadvisor {
#Use lowercase letters only for this setting.
variable showsafe "on"
variable showwarning "on"
variable showdanger "on"
}

bind pubm - "*" main

proc main {nick host hand chan text} {
if {[regexp {(www\.|http\:\/\/)([^\s]+)} [strip $text] a b site]} { putserv "PRIVMSG $chan :[resolve $site]" }
}

proc check {site} {
set url "http://www.siteadvisor.com/sites/$site"
set page [web2data $url]
if {[regexp {class="siteGreen">} $page] && $webadvisor::showsafe == "on"} { return "(SAFE) No problems found with: $site"
} elseif {[regexp {class="siteYellow">} $page] && $webadvisor::showwarning == "on"} { return "(CAUTION) Found potential suspicious behavior on: $site"
} elseif {[regexp {class="siteRed">} $page] && $webadvisor::showdanger == "on"} { return "(DANGER) Found potential security risks with: $site" }
}

proc resolve {site} {
set url "http://$site"
set page [web2data $url]
if {$page == 0} { return }
if {[string range $page 0 3] != "301"} { return [check $site]
} elseif {[regexp {href="(.*?)">?i} $page match site]} { return [check $site]
} elseif {[regexp {<html} $page]} { return [check $site] }
}

proc strip {text} { return [regsub -all -- {\017|\015|\031|\002|\037|\026|\003(\d{1,2})?(,\d{1,2})?} $text ""] }

proc web2data {website} {
package require http
if { [catch { set token [http::geturl $website -timeout 100000]} error] } { return 0
} elseif { [http::ncode $token] == "404" } { return 0
} elseif { [http::status $token] == "ok" } { set data "[http::ncode $token] [http::data $token]"
} elseif { [http::status $token] == "timeout" } { return 0
} elseif { [http::status $token] == "error" } { return 0 }
http::cleanup $token
if {[info exists data]} { return $data
} else { return 0 }
}

putlog "WebAdvisor"

Comments

Sign in to comment.
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.