vabbeh mi rispondo da solo:
codice:
class IpUtility extends Object{
public $interface;
public $network;
public $netmask;
private $interface_long;
private $network_long;
private $netmask_long;
private $broadcast_long;
function __construct($interface=null, $netmask=null, $network=null){
$this->interface=$interface;
$this->network=$network;
$this->netmask=$netmask;
}
//match if ip matchs with network/netmask given
public function matchIp($ip){
$this->processData();
$ip_long=ip2long($ip);
return (($ip_long & $this->netmask_long) == $this->network_long);
}
//setup data
private function processData(){
if(!$this->interface || !$this->netmask)
throw new Exception('insert interface/netmask');
$this->interface_long=ip2long($this->interface);
$this->netmask_long=ip2long($this->netmask);
if(!$this->network){
$this->network_long=($this->interface_long & $this->netmask_long);
}else{
$this->network_long=ip2long($this->network);
}
$this->broadcast_long=$this->network_long | (~$this->netmask_long);
}
//return an array with network range
public function getNetRange(){
$this->processData();
return array( long2ip($this->network_long + 1) , long2ip($this->broadcast_long - 1));
}
//return broadcast ip
public function getBroadcast(){
$this->processData();
return long2ip($this->broadcast_long);
}
//return network ip
public function getNetwork(){
$this->processData();
$this->network=long2ip($this->network_long);
return $this->network;
}
//return true if the given range is valid in the network or not
public function isValidRange($ip1, $ip2){
$this->processData();
$ip1_long=ip2long($ip1);
$ip2_long=ip2long($ip2);
if($ip1_long>$ip2_long)
return false;
$valid_range=$this->getNetRange();
if($ip1_long<ip2long($valid_range[0]) || $ip1_long>ip2long($valid_range[1]))
return false;
if($ip2_long<ip2long($valid_range[0]) || $ip2_long>ip2long($valid_range[1]))
return false;
//valid range
return true;
}
}