<?
// PHP class for NMAP under linux by Tomasz Malewski , Warsaw/Poland , Built 20081123
// depend function it requires access to NMAP , arping , host .
// If class works strange i suggest this record in /etc/sudoers
// ALL ALL=NOPASSWD: /usr/bin/nmap
// ALL ALL=NOPASSWD: /usr/sbin/arping
class adv_net
{
// var $ip,$status,$extra,$debug;
function ping() // Ping function return status
{
exec("sudo nmap ".$this->ip." -sP -n ".$this->cmd_extra." | grep 'host up'",$shell_out);
if ($this->cmd_debug==1) print_r ($shell_out); // DEBUG
if (strlen($shell_out[0])!='0')
{ $this -> hosts[$this->ip][up]="1";}
else
{ $this -> hosts[$this->ip][up]="0";}
} // function ping
function ip2mac() // IP to MAC converter
{
exec("sudo arping ".$this->ip." -c1 ".$this->cmd_extra." | grep '\[*\]'",$shell_out);
if ($this->cmd_debug==1) print_r ($shell_out); // DEBUG
preg_match ("/\ \[(.*?)\] /",$shell_out[0],$mac);
$this->hosts[$this->ip][mac]=$mac[1];
} // ip2mac
function rdns() // rDNS lookup
{
exec("host ".$this->ip." ".$this->cmd_extra." | grep Name",$shell_out);
if ($this->cmd_debug==1) print_r ($shell_out); // DEBUG
preg_match ("/Name: (.*)/",$shell_out[0],$rdns);
$this->hosts[$this->ip][name]=$rdns[1];
} // function rDNS
function dns() // DNS lookup
{
exec("host ".$this->ip_hostname." ".$this->cmd_extra." | grep ".$this->ip_hostname,$shell_out);
if ($this->cmd_debug==1) print_r ($shell_out); // DEBUG
preg_match ("/".$this->ip_hostname."(\s*)([^\s.]*)(\s*)(.*)/",$shell_out[0],$dns);
if ($this->cmd_debug==1) print_r ($dns); // DEBUG
$this->hosts[$dns[4]][name]=$this->ip_hostname;
} // function DNS
function lan_discovery($subnet) // Require subnet ex 24 for C subnet, or 32 for one IP.
{
exec("nmap -sL ".$this->ip."/$subnet ".$this->cmd_extra,$shell_out);
if ($this->cmd_debug==1) print_r ($shell_out); // DEBUG
$counter='0';
foreach ($shell_out as $line)
{
$hostup=preg_match ('/Host (.*?) \((.*?)\)/',$line,$line2);
if ($this->cmd_debug==1) print_r ( $line2); // DEBUG
if ($hostup==1)
{
// $this->host_up[$counter][0]=trim($line2[2]); // old concept
// $this->host_up[$counter][1]=trim($line2[1]); // old conecpt
$this->hosts[trim($line2[2])][name]=trim($line2[1]);
$counter++;
} // if hostup==1
} // foreach shell_out
} // lan_discovery
function port_discovery()
{
exec("nmap ".$this->ip." -sV ".$this->cmd_extra." | grep [0-9]/",$shell_out);
if ($this->cmd_debug==1) print_r ($shell_out); // DEBUG
foreach ($shell_out as $line)
{
$port=preg_match ('/([0-9]*)\/([a-z]*)(\s*)([a-z]*)(\s*)(.*) /',$line,$line2);
if ($this->cmd_debug==1) print_r ( $line2); // DEBUG
if ($port==1)
{
$this->hosts[$this->ip][ports][trim($line2[1])]=trim($line2[6]);
// $port_list[$counter][1]=trim($line2[1]); // old concept
// $port_list[$counter][2]=trim($line2[2]);
// $port_list[$counter][3]=trim($line2[3]);
// $port_list[$counter][4]=trim($line2[4]);
$counter++;
} // if port==1
} // foreach shell_out
} // scan_ports
} // class adv_net
|