Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    IP e Netmask: l'ip appartiene alla netmask?

    Salve,

    io ho un ip, una netmask e un'interfaccia di rete col suo ip.. come faccio a capire se l'ip appartiene alla netmask e alla stessa interfaccia? o meglio, come si fa in php a fare l'and bit-a-bit? si può fare con le stringhe?

    tipo:

    codice:
    $ip1="192.168.0.1";
    $ip2="192.168.1.250";
    $netmask="255.255.255.128";
    $interface="192.168.0.240";
    
    
    echo "ip1 = int: ".($ip1 ^ $netmask === $interface ^ $netmask)."
    ";
    echo "ip2 = int: ".($ip2 ^ $netmask === $interface ^ $netmask)."
    ";
    è corretto secondo voi? oggi non ci sto con la testa
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  2. #2
    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;
    	}
    }

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.