From e81521d3926c7dff1484e5c86a02dcfd8dc93b8e Mon Sep 17 00:00:00 2001 From: paulr Date: Tue, 9 Aug 2011 20:52:57 +1000 Subject: [PATCH] cron fixes, hosts working, last seen working... lifes pretty good --- bin/scanhelper.php | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++ libglcas/web.php | 56 +++++++++++++++++++++++++++++++++++++ plugins/cron.php | 12 +++++-- plugins/hosts.php | 16 +++++++--- 4 files changed, 153 insertions(+), 9 deletions(-) create mode 100644 bin/scanhelper.php diff --git a/bin/scanhelper.php b/bin/scanhelper.php new file mode 100644 index 0000000..141c0ae --- /dev/null +++ b/bin/scanhelper.php @@ -0,0 +1,78 @@ +loadConfig($configpath); + + +$range = ""; +if(isset($argv[1])) { + $range = $argv[1]; +} + +if(isset($argv[2])) { + $hostgroup = $argv[2]; +} + + +if($range == "") { + echo "range makes no sense\n"; + exit(0); +} + + +$ips_v = explode(".", $range); + +$ips = $ips_v[0].".".$ips_v[1].".".$ips_v[2]; + +for($i = 1; $i < 255; $i++) { + $hostname = ""; + $ips_me = "$ips.$i"; + echo "Scanning $ips_me
"; + error_log("Scanning $ips_me
"); + flush(); + $hostname = gethostbyaddr($ips_me); + if($hostname != $ips_me) { + echo "Found host on $ips_me as $hostname
"; + error_log("Found host on $ips_me as $hostname"); + flush(); + $hosts = $glconfig->getData("hosts"); + $exists = false; + foreach($hosts as $key => $val) { + if($val["category"] == $hostname && $val["name"] == $ips_me) { + echo "Host in db already
"; + $exists = true; + flush(); + } + + } + if(!$exists) $glconfig->addData("hosts", "$hostname", "$ips_me", "$hostgroup"); + + + } +} +echo "Finished"; + +?> \ No newline at end of file diff --git a/libglcas/web.php b/libglcas/web.php index 6f93f80..4f26a9b 100644 --- a/libglcas/web.php +++ b/libglcas/web.php @@ -3,6 +3,10 @@ // if i believed in name spacing in php, i'd use it. error_log("glcasweb loaded"); +global $CRON_CLASSES; +$CRON_CLASSES["GLCASWeb"] = "GLCASWeb"; + + class GLCASWeb { function __construct($config) @@ -17,6 +21,10 @@ class GLCASWeb { $url = $_REQUEST["q"]; } + // add a stat + $ipaddr = $_SERVER["REMOTE_ADDR"]; + $this->config->addData("lastseen", "$ipaddr", time(), ""); + // create a url parser $urlparser = new GLCASUrlParser($urlhandlers, $this->config); @@ -26,6 +34,23 @@ class GLCASWeb { $call_class->go($url); } + function cron() + { + echo "WEB base running cron for ipseen roll-up
"; + $lastseen = $this->config->getData("lastseen"); + foreach($lastseen as $key=>$val) { + $myip = $val["category"]; + $myls = $val["name"]; + $ip[$myip] = $myls; + } + + foreach($ip as $key=>$val) { + echo "Setting last seen for $key to $val
"; + $this->config->delData("lastseen", $key); + $this->config->addData("lastseen", $key, $val); + } + } + private $config; } @@ -127,6 +152,37 @@ function GLCASpageBuilder($bodyClass, $bodyFunction, $bodycontent=null, $title=" } +function glcas_getLastSeen($ip, $data) +{ + $last = "never"; + + if(!$data) return $last; + + + + foreach($data as $key=>$val) { + $last = $val["name"]; + error_log("got $last for $ip"); + } + + if($last == "never") return $last; + + $tdiff = time()-$last; + $tdiff_min = (int)($tdiff/60); + $tdiff_hour = (int)($tdiff/3600); + $tdiff_days = (int)($tdiff/86400); + + if($tdiff < 60) $last = "Less then a minute"; + if($tdiff >= 60 && $tdiff < 7200) $last = "$tdiff_min minutes ago"; + if($tdiff >= 7200 && $tdiff < 86400) $last = "$tdiff_hour hours ago"; + if($tdiff >= 86400) $last = "$tdiff_days days ago"; + + error_log("last for $ip set to $last"); + + return $last; + +} + function glcas_isRemoteDir($url) { file_get_contents($url); diff --git a/plugins/cron.php b/plugins/cron.php index ca99309..5f53320 100644 --- a/plugins/cron.php +++ b/plugins/cron.php @@ -15,18 +15,22 @@ class GLCASCron { global $CRON_CLASSES; echo ""; + echo ""; foreach($CRON_CLASSES as $crons) { $calling = new $crons($this->config); + echo ""; } else { - echo "CRON: would call $crons"."->cron but it doesnt exist
"; + echo "CRON: would call $crons"."->cron but it doesnt exist
"; } + } + echo "
"; if(method_exists($crons, "cron")) { - echo "CRON: Calling $crons"."->cron:
"; - echo "
$crons"; + echo "CRON: Calling cron for $crons"; + echo "
"; $calling->cron(); - echo "
"; + echo "
"; echo ""; } diff --git a/plugins/hosts.php b/plugins/hosts.php index eb93989..5b521cf 100644 --- a/plugins/hosts.php +++ b/plugins/hosts.php @@ -61,7 +61,7 @@ class GLCASHosts { $nogroup = false; $hosts_to_do = null; $nhosts = 0; - $groups_to_do = null; + $group_to_do = null; $ngroups = 0; // first check if nogroup is selected @@ -265,13 +265,16 @@ class GLCASHosts { echo ""; echo ""; echo "

Ungrouped Hosts


"; - echo ""; + echo "
HostIPHost GroupLast SeenControl
"; foreach($hosts as $key => $val) { $hname = $val["category"]; $hip = $val["name"]; $hg = $val["val"]; if($hg == "") $hg = "-"; - if($hg=="-") echo ""; + if($hg=="-") { + $lastseen = glcas_getLastSeen($hip, $this->config->getData("lastseen", "$hip")); + echo ""; + } } echo "
HostIPLast SeenControl
$hname$hip$hg...Delete
$hname$hip$lastseenDelete
"; echo ""; @@ -282,13 +285,16 @@ class GLCASHosts { echo ""; $grpname = $val["category"]; echo "

Host Group: $grpname Delete


"; - echo ""; + echo "
HostIPHost GroupLast SeenControl
"; if($hosts != false) foreach($hosts as $key => $val) { $hname = $val["category"]; $hip = $val["name"]; $hg = $val["val"]; if($hg == "") $hg = "-"; - if($hg==$grpname) echo ""; + if($hg==$grpname) { + $lastseen = glcas_getLastSeen($hip, $this->config->getData("lastseen", "$hip")); + echo ""; + } } echo "
HostIPLast SeenControl
$hname$hip$hg...Delete
$hname$hip$lastseenDelete
"; echo ""; -- 1.7.0.4