begin process at 2012 05 27 22:15:01
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE DE GESTION D'INTERFACE RÉSEAUX

CLASSE DE GESTION D'INTERFACE RÉSEAUX


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :network, interface, ipconfig, netsh Niveau :Initié Date de création :18/02/2009 Date de mise à jour :10/03/2009 14:06:06 Vu / téléchargé :4 134 / 936

Auteur : madislak

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Bonjour à tous,

C'est la première source que je partage.

Il s'agit d'une classe qui permet de récupérer les paramètres réseau du SERVEUR (IP, netmask, gateway, etc.) et de les modifier.

Elle ne fonctionne qu'avec Windows pour le moment. Elle a encore besoin d'être améliorée, notament au niveau des problèmes de charset dans la réponse de la fonction "exec()", et au niveau de la méthode de parsing de cette réponse, que je trouve au peu "bourrin".
Donc je compte beaucoup sur vos remarques.

Le fichier index.php ne sert qu'aux tests.

Enjoy :-)

Edit :
Compatible Linux en lecture seulement car je n'ai pas encore trouvé comment donner les droits d'exécution à apache.

Source

  • <?php
  • /**
  • * class NetworkInterface
  • * @author Madislak <madislak@yahoo;fr>
  • * @version 20090218
  • * @licence : GPL
  • */
  • class networkManager {
  • var $os;
  • public static $netshOutput;
  • public static $ifconfigaOutput;
  • public static $ifconfigOutput;
  • public function __construct($status=""){
  • /* Detection de l'OS */
  • if(eregi("win",$_SERVER["SERVER_SOFTWARE"],$result)) $this->os = "windows";
  • else $this->os = "linux";
  • if($this->os=="windows") {
  • $this->netshOutput = array();
  • try{ exec('netsh interface show interface',$this->netshOutput); } catch (Exception $e) { } // Affiche la liste des interfaces reseau sous Windows
  • }
  • else {
  • $this->ifconfigaOutput = array();
  • try{ exec('ifconfig -a | grep eth',$this->ifconfigaOutput); } catch (Exception $e) { } // Affiche la liste des interfaces reseau sous Linux
  • $this->ifconfigOutput = array();
  • try{ exec('ifconfig | grep eth',$this->ifconfigOutput); } catch (Exception $e) { } // Affiche la liste des interfaces reseau actives sous Linux
  • }
  • }
  • function getNetworkInterfaces(){
  • $interfaces = array();
  • /* Detection de toutes les interfaces reseau de la machine */
  • if($this->os=="windows") {
  • $nb_lines = sizeof($this->netshOutput);
  • for($i=3; $i<$nb_lines; $i++){
  • $infos = preg_split("/\s{2,}/", $this->netshOutput[$i]); // Parsing de la reponse
  • if($infos[3]!="") $interfaces[] = $infos[3]; // Ajout d'une nouvelle interface
  • }
  • }
  • else {
  • $interfaces = array();
  • $nb_lines = sizeof($this->ifconfigaOutput);
  • for($i=0; $i<$nb_lines; $i++){
  • if(eregi("eth[0-9]",$this->ifconfigaOutput[$i],$result)){ // Parsing de la reponse
  • if($result[0]!="") $interfaces[] = $result[0]; // Ajout d'une nouvelle interface
  • }
  • }
  • }
  • sort($interfaces);
  • return $interfaces;
  • }
  • }
  • class NetworkInterface {
  • var $os;
  • var $name;
  • var $status;
  • var $mac_address;
  • var $ip_address;
  • var $ip_address_v6;
  • var $netmask;
  • var $gateway;
  • var $dns1;
  • var $dns2;
  • var $is_dhcp;
  • var $description;
  • var $language;
  • public function __construct($name){
  • $this->name = $name;
  • $this->language = "fr";
  • $this->ip_address = "0.0.0.0";
  • $this->netmask = "0.0.0.0";
  • $this->gateway = "0.0.0.0";
  • $this->dns1 = "0.0.0.0";
  • $this->dns2 = "0.0.0.0";
  • /* Detection de l'OS */
  • if(eregi("win",$_SERVER["SERVER_SOFTWARE"],$result)) $this->os = "windows";
  • else $this->os = "linux";
  • /* Detection du status de l'interface : Activee/Desactivee, Connectee/deconnectee */
  • if($this->os=="windows"){
  • $output = array();
  • try{ exec('netsh interface show interface',$output); } catch (Exception $e) { return false; } // Affiche la liste des interfaces reseau sous Windows
  • $nb_lines = sizeof($output);
  • for($i=3; $i<$nb_lines; $i++){
  • $infos = preg_split("/\s{2,}/", $output[$i]);
  • if($infos[3]==$this->name){
  • if($infos[1]=="Connect‚") $this->status = 2; // Manque gestion charset
  • else if($infos[0]=="Activ‚" && $infos[1]=="D‚connect‚") $this->status = 1; // Manque gestion charset
  • else $this->status = 0;
  • }
  • }
  • }
  • else {
  • $output = array();
  • try{ exec('ifconfig | grep eth',$output); } catch (Exception $e) { return false; } // Affiche la liste des interfaces reseau actives sous Linux
  • $nb_lines = sizeof($output);
  • for($i=0; $i<$nb_lines; $i++){
  • $this->status = 0;
  • if(eregi("eth[0-9]",$output[$i],$result) && $result[0]==$this->name) $this->status = 2;
  • }
  • }
  • /* Detection des parametres de l'interface : */
  • if($this->os=="windows" && $this->status==2){
  • $output = array();
  • $write = false; // Active ou pas l'ecriture des parametres
  • $previous_line_empty = false; // Indique si la ligne precedente est vide, cad s'il s'agit d'une nouvelle interface
  • try{ exec("ipconfig /all",$output); } catch (Exception $e) { return false; } // Affiche les parametres IP sous Windows
  • $nb_lines = sizeof($output);
  • for($i=0; $i<$nb_lines; $i++){
  • /* On parcourt le resultat de la commande. On active l'écriture en arrivant a la partie concernant l'interface et on la desactice en arrivant a l'interface suivante */
  • if((eregi("Carte Ethernet",$output[$i],$result)||eregi("Carte r‚seau sans fil",$output[$i],$result)) && $previous_line_empty && eregi($this->name,$output[$i],$result)) $write = true;
  • else if(eregi("Carte",$output[$i],$result) && $previous_line_empty && $write) $write = false;
  • /* Detection de la description hardware de l'interface */
  • if(eregi("Description",$output[$i],$result) && $write) {
  • $tmp = explode(":",str_replace(" : ",":",$output[$i]));
  • $this->description = $tmp[1];
  • }
  • /* Detection de l'adresse MAC de l'interface */
  • if(eregi("Adresse physique",$output[$i],$result) && $write) {
  • preg_match("/([0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->mac_address = str_replace("-",":",$matches[0][0]);
  • }
  • /* Detection du mode de l'interface : statique ou DHCP*/
  • if(eregi("DHCP activ‚",$output[$i],$result) && $write) {
  • if(eregi("Oui",$output[$i], $matches)) $this->is_dhcp = 1;
  • else $this->is_dhcp = 0;
  • }
  • /* Detection de l'adresse IPv4 de l'interface */
  • if(eregi("IPv4",$output[$i],$result) && $write) {
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->ip_address = $matches[0][0];
  • }
  • /* Detection de l'adresse IPv6 de l'interface */
  • if(eregi("IPv6",$output[$i],$result)) {
  • preg_match("/([0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->ip_address_v6 = $matches[0][0];
  • }
  • /* Detection du masque de sous-reseaux de l'interface */
  • if(eregi("Masque",$output[$i],$result) && $write) {
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->netmask = $matches[0][0];
  • }
  • /* Detection de la passerelle par defaut de l'interface */
  • if(eregi("Passerelle",$output[$i],$result) && $write) {
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->gateway = $matches[0][0];
  • }
  • /* Detection des serveurs DNS de l'interface */
  • if(eregi("Serveurs DNS",$output[$i],$result) && $write) {
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->dns1 = $matches[0][0];
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[($i+1)], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->dns2 = $matches[0][0];
  • }
  • if($output[$i]=="") $previous_line_empty = true;
  • else $previous_line_empty = false;
  • }
  • }
  • else if($this->status==2){
  • $output = array();
  • $write = true; // Active ou pas l'ecriture des parametres
  • try{ exec("ifconfig -a ".$this->name,$output); } catch (Exception $e) { return false; } // Affiche les parametres IP sous Linux
  • $nb_lines = sizeof($output);
  • for($i=0; $i<$nb_lines; $i++){
  • /* Detection de l'adresse MAC de l'interface */
  • if(eregi("HWaddr",$output[$i],$result) && $write) {
  • preg_match("/([0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->mac_address = str_replace("-",":",$matches[0][0]);
  • }
  • /* Detection de l'adresse IPv4 de l'interface */
  • if(eregi("inet addr",$output[$i],$result) && $write) {
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->ip_address = $matches[0][0];
  • }
  • /* Detection de l'adresse IPv6 de l'interface */
  • if(eregi("inet6 addr",$output[$i],$result)) {
  • preg_match("/([0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->ip_address_v6 = $matches[0][0];
  • }
  • /* Detection du masque de sous-reseaux de l'interface */
  • if(eregi("Mask",$output[$i],$result) && $write) {
  • preg_match_all("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->netmask = $matches[0][2][0];
  • }
  • }
  • /* Detection de la description hardware de l'interface */
  • $output = array();
  • try{ exec("cat /etc/sysconfig/network-scripts/ifcfg-".$this->name." | grep \"#\"",$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
  • $this->description = str_replace("# ","",$output[0]);
  • /* Detection du mode de l'interface : statique ou DHCP*/
  • $output = array();
  • try{ exec("cat /etc/sysconfig/network-scripts/ifcfg-".$this->name." | grep BOOTPROTO",$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
  • if(eregi("dhcp",$output[0], $matches)) $this->is_dhcp = 1;
  • else $this->is_dhcp = 0;
  • /* Detection des serveurs DNS de l'interface */
  • $output = array();
  • try{ exec("cat /etc/resolv.conf | grep nameserver",$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[1], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->dns1 = $matches[0][0];
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[2], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->dns2 = $matches[1][0];
  • /* Detection de la passerelle par defaut de l'interface */
  • $output = array();
  • try{ exec("route | grep default | grep ".$this->name,$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
  • preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[0], $matches, PREG_OFFSET_CAPTURE, 3);
  • $this->gateway = $matches[0][0];
  • }
  • // Petite bidouille de charset pour Windows en francais
  • if($this->language=="fr" && $this->os=="windows") $this->name = str_replace("","é",$this->name);
  • }
  • function getName(){ return $this->name; }
  • function getStatus(){ return $this->status; } // 0: desactivee, 1: deconnectee, 2: connectee
  • function getMacAddress(){ return $this->mac_address; }
  • function getIPv4(){ return $this->ip_address; }
  • function getIPv6(){ return $this->ip_address_v6; }
  • function getNetmask(){ return $this->netmask; }
  • function getGateway(){ return $this->gateway; }
  • function getDNS(){ return $this->dns1; }
  • function getDNS2(){ return $this->dns2; }
  • function getDHCPmode(){ return $this->is_dhcp; } // 0: static mode, 1: DHCP mode
  • function getDescription(){ return $this->description; }
  • function setIPv4($value){ $this->ip_address = $value; }
  • function setIPv6($value){ $this->ip_address_v6 = $value; }
  • function setNetmask($value){ $this->netmask = $value; }
  • function setGateway($value){ $this->gateway = $value; }
  • function setDNS($value){ $this->dns1 = $value; }
  • function setDNS2($value){ $this->dns2 = $value; }
  • function activate() {
  • if($this->os=="windows") try{ exec('netsh interface set interface name="'.$this->name.'" admin=ENABLE',$output); } catch (Exception $e) { return array(); }
  • else try{ exec('ifup '.$this->name,$output); } catch (Exception $e) { return 0; }
  • if($output[0]=="") return 1;
  • else return 0;
  • }
  • function desactivate() {
  • if($this->os=="windows") try{ exec('netsh interface set interface name="'.$this->name.'" admin=DISABLE',$output); } catch (Exception $e) { return array(); }
  • else try{ exec('ifdown '.$this->name,$output); } catch (Exception $e) { return 0; }
  • if($output[0]=="") return 1;
  • else return 0;
  • }
  • function setDHCP() {
  • if($this->os=="windows") {
  • try{ exec('netsh interface ip set address "'.$this->name.'" dhcp',$output); } catch (Exception $e) { return array(); }
  • try{ exec('netsh interface ip set dns "'.$this->name.'" dhcp',$output); } catch (Exception $e) { return array(); }
  • }
  • else try{ exec('dhclient '.$this->name,$output); } catch (Exception $e) { return 0; }
  • if($output[0]=="") {
  • $this->is_dhcp = 1;
  • return 1;
  • }
  • else return 0;
  • }
  • function setStatic($ip_address="",$netmask="",$gateway="",$dns="") {
  • if($ip_address=="") $ip_address = $this->ip_address;
  • if($netmask=="") $netmask = $this->netmask;
  • if($gateway=="") $gateway = $this->gateway;
  • if($dns=="") $dns = $this->dns1;
  • if($ip_address=="") return 0;
  • if($this->os=="windows") {
  • try{ exec('netsh interface ip set address "'.$this->name.'" static '.$ip_address.' '.$netmask.' '.$gateway.' 1',$output); } catch (Exception $e) { return 0; }
  • try{ exec('netsh interface ip set dns "'.$this->name.'" static '.$dns.'',$output); } catch (Exception $e) { return 0; }
  • }
  • else {
  • try{ exec('ifconfig '.$this->name.' inet '.$ip_address.' netmask '.$netmask,$output); } catch (Exception $e) { return 0; }
  • try{ exec('route add default gw '.$gateway,$output); } catch (Exception $e) { return 0; }
  • }
  • if($output[0]=="") {
  • $this->is_dhcp = 0;
  • return 1;
  • }
  • else return 0;
  • }
  • }
  • ?>
<?php
/**
 * class NetworkInterface
 * @author Madislak <madislak@yahoo;fr>
 * @version 20090218
 * @licence : GPL
 */

class networkManager {
	var $os;
	public static $netshOutput;
	public static $ifconfigaOutput;
	public static $ifconfigOutput;
	
	public function __construct($status=""){
		/* Detection de l'OS */
		if(eregi("win",$_SERVER["SERVER_SOFTWARE"],$result)) $this->os = "windows";
		else $this->os = "linux";
		
		if($this->os=="windows") {
			$this->netshOutput = array();
			try{ exec('netsh interface show interface',$this->netshOutput); } catch (Exception $e) { } // Affiche la liste des interfaces reseau sous Windows
		}
		else {
			$this->ifconfigaOutput = array();
			try{ exec('ifconfig -a | grep eth',$this->ifconfigaOutput); } catch (Exception $e) { } // Affiche la liste des interfaces reseau sous Linux
			$this->ifconfigOutput = array();
			try{ exec('ifconfig | grep eth',$this->ifconfigOutput); } catch (Exception $e) { } // Affiche la liste des interfaces reseau actives sous Linux	
		}
	}
	
	function getNetworkInterfaces(){
		$interfaces = array();
		
		/* Detection de toutes les interfaces reseau de la machine */
		if($this->os=="windows") {
			$nb_lines = sizeof($this->netshOutput);
			for($i=3; $i<$nb_lines; $i++){
				$infos = preg_split("/\s{2,}/", $this->netshOutput[$i]); // Parsing de la reponse
				if($infos[3]!="") $interfaces[] = $infos[3]; // Ajout d'une nouvelle interface
			}
		}
		else {
			$interfaces = array();
			$nb_lines = sizeof($this->ifconfigaOutput);
			for($i=0; $i<$nb_lines; $i++){
				if(eregi("eth[0-9]",$this->ifconfigaOutput[$i],$result)){ // Parsing de la reponse
					if($result[0]!="") $interfaces[] = $result[0]; // Ajout d'une nouvelle interface
				}
			}
		}
		sort($interfaces);
		return $interfaces;
	}
}

class NetworkInterface {
	var $os;
	var $name;
	var $status;
	var $mac_address;
	var $ip_address;
	var $ip_address_v6;
	var $netmask;
	var $gateway;
	var $dns1;
	var $dns2;
	var $is_dhcp;
	var $description;
	var $language;
	
	public function __construct($name){
		$this->name = $name;
		$this->language = "fr";
		
		$this->ip_address = "0.0.0.0";
		$this->netmask = "0.0.0.0";
		$this->gateway = "0.0.0.0";
		$this->dns1 = "0.0.0.0";
		$this->dns2 = "0.0.0.0";
		
		/* Detection de l'OS */
		if(eregi("win",$_SERVER["SERVER_SOFTWARE"],$result)) $this->os = "windows";
		else $this->os = "linux";
		
		/* Detection du status de l'interface : Activee/Desactivee, Connectee/deconnectee */
		if($this->os=="windows"){
			$output = array();
			try{ exec('netsh interface show interface',$output); } catch (Exception $e) { return false; } // Affiche la liste des interfaces reseau sous Windows
			$nb_lines = sizeof($output);
			for($i=3; $i<$nb_lines; $i++){
				$infos = preg_split("/\s{2,}/", $output[$i]);
				if($infos[3]==$this->name){
					if($infos[1]=="Connect‚") $this->status = 2; // Manque gestion charset
					else if($infos[0]=="Activ‚" && $infos[1]=="D‚connect‚") $this->status = 1; // Manque gestion charset
					else $this->status = 0;
				}
			}	
		}
		else {
			$output = array();
			try{ exec('ifconfig | grep eth',$output); } catch (Exception $e) { return false; } // Affiche la liste des interfaces reseau actives sous Linux
			$nb_lines = sizeof($output);			
			for($i=0; $i<$nb_lines; $i++){
				$this->status = 0;
				if(eregi("eth[0-9]",$output[$i],$result) && $result[0]==$this->name) $this->status = 2;
			}
		}
		
		/* Detection des parametres de l'interface : */
		if($this->os=="windows" && $this->status==2){
			$output = array();
			$write = false; // Active ou pas l'ecriture des parametres
			$previous_line_empty = false; // Indique si la ligne precedente est vide, cad s'il s'agit d'une nouvelle interface
			try{ exec("ipconfig /all",$output); } catch (Exception $e) { return false; } // Affiche les parametres IP sous Windows
			$nb_lines = sizeof($output);
			
			for($i=0; $i<$nb_lines; $i++){
				/* On parcourt le resultat de la commande. On active l'écriture en arrivant a la partie concernant l'interface et on la desactice en arrivant a l'interface suivante */
				if((eregi("Carte Ethernet",$output[$i],$result)||eregi("Carte r‚seau sans fil",$output[$i],$result)) && $previous_line_empty && eregi($this->name,$output[$i],$result)) $write = true;
				else if(eregi("Carte",$output[$i],$result) && $previous_line_empty && $write) $write = false;
				
				/* Detection de la description hardware de l'interface */
				if(eregi("Description",$output[$i],$result) && $write) {
					$tmp = explode(":",str_replace(" : ",":",$output[$i]));
					$this->description = $tmp[1];
				}
				
				/* Detection de l'adresse MAC de l'interface */
				if(eregi("Adresse physique",$output[$i],$result) && $write) {
					preg_match("/([0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*\-[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->mac_address = str_replace("-",":",$matches[0][0]);
				}
				
				/* Detection du mode de l'interface : statique ou DHCP*/
				if(eregi("DHCP activ‚",$output[$i],$result) && $write) {
					if(eregi("Oui",$output[$i], $matches)) $this->is_dhcp = 1;
					else $this->is_dhcp = 0;
				}
				
				/* Detection de l'adresse IPv4 de l'interface */
				if(eregi("IPv4",$output[$i],$result) && $write) {
					preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->ip_address = $matches[0][0];
				}
				
				/* Detection de l'adresse IPv6 de l'interface */
				if(eregi("IPv6",$output[$i],$result)) {
					preg_match("/([0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->ip_address_v6 = $matches[0][0];
				}
				
				/* Detection du masque de sous-reseaux de l'interface */
				if(eregi("Masque",$output[$i],$result) && $write) {
					preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->netmask = $matches[0][0];
				}
				
				/* Detection de la passerelle par defaut de l'interface */
				if(eregi("Passerelle",$output[$i],$result) && $write) {
					preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->gateway = $matches[0][0];
					
				}
				
				/* Detection des serveurs DNS de l'interface */
				if(eregi("Serveurs DNS",$output[$i],$result) && $write) {
					preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->dns1 = $matches[0][0];
					preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[($i+1)], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->dns2 = $matches[0][0];
				}
				
				if($output[$i]=="") $previous_line_empty = true;
				else $previous_line_empty = false;
			}
		}
		else if($this->status==2){
			$output = array();
			$write = true; // Active ou pas l'ecriture des parametres
			try{ exec("ifconfig -a ".$this->name,$output); } catch (Exception $e) { return false; } // Affiche les parametres IP sous Linux
			$nb_lines = sizeof($output);
			
			for($i=0; $i<$nb_lines; $i++){
				/* Detection de l'adresse MAC de l'interface */
				if(eregi("HWaddr",$output[$i],$result) && $write) {
					preg_match("/([0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->mac_address = str_replace("-",":",$matches[0][0]);
				}
				
				/* Detection de l'adresse IPv4 de l'interface */
				if(eregi("inet addr",$output[$i],$result) && $write) {
					preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->ip_address = $matches[0][0];
				}
				
				/* Detection de l'adresse IPv6 de l'interface */
				if(eregi("inet6 addr",$output[$i],$result)) {
					preg_match("/([0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*\:[0-9A-F]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->ip_address_v6 = $matches[0][0];
				}
				
				/* Detection du masque de sous-reseaux de l'interface */
				if(eregi("Mask",$output[$i],$result) && $write) {
					preg_match_all("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[$i], $matches, PREG_OFFSET_CAPTURE, 3);
					$this->netmask = $matches[0][2][0];
				}					
			}
			
			/* Detection de la description hardware de l'interface */
			$output = array();
			try{ exec("cat /etc/sysconfig/network-scripts/ifcfg-".$this->name." | grep \"#\"",$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
			$this->description = str_replace("# ","",$output[0]);
			
			/* Detection du mode de l'interface : statique ou DHCP*/
			$output = array();
			try{ exec("cat /etc/sysconfig/network-scripts/ifcfg-".$this->name." | grep BOOTPROTO",$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
			if(eregi("dhcp",$output[0], $matches)) $this->is_dhcp = 1;
			else $this->is_dhcp = 0;
			
			/* Detection des serveurs DNS de l'interface */
			$output = array();
			try{ exec("cat /etc/resolv.conf | grep nameserver",$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
			preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[1], $matches, PREG_OFFSET_CAPTURE, 3);
			$this->dns1 = $matches[0][0];
			preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[2], $matches, PREG_OFFSET_CAPTURE, 3);
			$this->dns2 = $matches[1][0];
			
			/* Detection de la passerelle par defaut de l'interface */
			$output = array();
			try{ exec("route | grep default | grep ".$this->name,$output); } catch (Exception $e) { return false; } // Affiche la liste des DNS sous Linux
			preg_match("/([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)/", $output[0], $matches, PREG_OFFSET_CAPTURE, 3);
			$this->gateway = $matches[0][0];
		}
		
		// Petite bidouille de charset pour Windows en francais
		if($this->language=="fr" && $this->os=="windows") $this->name = str_replace("‚","é",$this->name);
	}
	
	function getName(){ return $this->name; }
	function getStatus(){ return $this->status; } // 0: desactivee, 1: deconnectee, 2: connectee
	function getMacAddress(){ return $this->mac_address; }
	function getIPv4(){ return $this->ip_address; }
	function getIPv6(){ return $this->ip_address_v6; }
	function getNetmask(){ return $this->netmask; }
	function getGateway(){ return $this->gateway; }
	function getDNS(){ return $this->dns1; }
	function getDNS2(){ return $this->dns2; }
	function getDHCPmode(){ return $this->is_dhcp; } // 0: static mode, 1: DHCP mode
	function getDescription(){ return $this->description; }
	
	function setIPv4($value){ $this->ip_address = $value; }
	function setIPv6($value){ $this->ip_address_v6 = $value; }
	function setNetmask($value){ $this->netmask = $value; }
	function setGateway($value){ $this->gateway = $value; }
	function setDNS($value){ $this->dns1 = $value; }
	function setDNS2($value){ $this->dns2 = $value; }
	
	function activate() {
		if($this->os=="windows") try{ exec('netsh interface set interface name="'.$this->name.'" admin=ENABLE',$output); } catch (Exception $e) { return array(); }
		else try{ exec('ifup '.$this->name,$output); } catch (Exception $e) { return 0; }
		if($output[0]=="") return 1;
		else return 0;
	}
	
	function desactivate() {
		if($this->os=="windows") try{ exec('netsh interface set interface name="'.$this->name.'" admin=DISABLE',$output); } catch (Exception $e) { return array(); }
		else try{ exec('ifdown '.$this->name,$output); } catch (Exception $e) { return 0; }
		if($output[0]=="") return 1;
		else return 0;
	}
	
	function setDHCP() {
		if($this->os=="windows") {
			try{ exec('netsh interface ip set address "'.$this->name.'" dhcp',$output); } catch (Exception $e) { return array(); }
			try{ exec('netsh interface ip set dns "'.$this->name.'" dhcp',$output); } catch (Exception $e) { return array(); }
		}
		else try{ exec('dhclient '.$this->name,$output); } catch (Exception $e) { return 0; }
		if($output[0]=="") {
			$this->is_dhcp = 1;
			return 1;
		}
		else return 0;
	}
	
	function setStatic($ip_address="",$netmask="",$gateway="",$dns="") {
		if($ip_address=="") $ip_address = $this->ip_address;
		if($netmask=="") $netmask = $this->netmask;
		if($gateway=="") $gateway = $this->gateway;
		if($dns=="") $dns = $this->dns1;
		if($ip_address=="") return 0;
		
		if($this->os=="windows") {
			try{ exec('netsh interface ip set address "'.$this->name.'" static '.$ip_address.' '.$netmask.' '.$gateway.' 1',$output); } catch (Exception $e) { return 0; }
			try{ exec('netsh interface ip set dns "'.$this->name.'" static '.$dns.'',$output); } catch (Exception $e) { return 0; }
		}
		else {
			try{ exec('ifconfig '.$this->name.' inet '.$ip_address.' netmask '.$netmask,$output); } catch (Exception $e) { return 0; }
			try{ exec('route add default gw '.$gateway,$output); } catch (Exception $e) { return 0; }
		}
		if($output[0]=="") {
			$this->is_dhcp = 0;
			return 1;
		}
		else return 0;
	}
}
?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

10 mars 2009 14:03:34 :
Compatibilité Linux Création d'une classe propre pour lister les interfaces
10 mars 2009 14:06:06 :
Compatibilité Linux Création d'une classe propre pour lister les interfaces réseau

 Sources du même auteur

Source avec Zip TRADUCTION DE FICHIERS DE LANGUE AVEC GOOGLE GTRANSLATE

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip SERVICE DESIGN PATTERN / CHARGEMENT DYNAMIQUE DE SERVICES D'... par aKheNathOn
Source avec Zip IP CALCULATOR par X_Cli
Source avec Zip INTERFACE ADMIN par mitchmitch74
Source avec Zip Source avec une capture ASCIIART : PHP-CURSES par coucou747
Source avec Zip INTERFACE DATABASE ET CLASSE MYSQL par Davjack

Commentaires et avis

Commentaire de aKheNathOn le 19/02/2009 10:19:11 9/10

Superbe source, utile et bien codée. Super simpa les 4 fonctions de manipulation.

A quand une version compatible linux :) ?

Quelques conseils :
La class devrait pouvoir prendre en argument optionnel un paramètre statut pour ne pas avoir à executer pour chaque interface 2 commandes. La fonction getInte... devrait plutôt être une classe de type collection d'interfaces permettant de lister toutes les interfaces. Tu les chargerais dans le construct en indiquant le statut automatiquement à ce moment (ça optimisera le temps d'exécution).

Sinon tu devrait te renseigner sur la fonction popen qui te permettrait de lancer les commandes en mode threadé et par conséquent tu optimisera encore plus le temps d'exécution.

J'irais même plus loin en te disant que le IPConfig /ALL et l'autre commande pourraient tous deux être lancés dans la collection et le résultat stocké dans une variable static publique :

class listeInterfaces {
  public static $ipconfig;
  public static $netsh;
  public function __construct() {
    ... tu charges le contenu de ces commandes ...
    self::$ipconfig = exec...
  }
}

class interface {
  public function __construct() {
    // tu lis le contenu d'un ipconfig :
    listeInterfaces::$ipconfig ...
  }
}

Bonne prog et à+

Commentaire de bentom32390 le 21/02/2009 08:10:28

dans tu code fait attention au <? et mettre <?php sinon ton scripte ne marche pas sur tout les serveurs

Commentaire de verdy_p le 02/03/2009 16:35:59

C'est vrai, de même on évite de mettre "?>" à la fin c'est une instruction inutile servant seulement à changer le contexte syntaxique, pour que la suite soit copiée dans le corps du document résultat.

Comme il n'est pas sensé y avoir de suite ni rien de copié dans le corps de la réponse, il est recommandé de ne pas utiliser "?>" du tout, sauf si cette suite est le code complet d'une page HTML quand tous les entêtes HTTP ont été générés, avec des inclusions très réduites de code PHP comme l'affichage de la valeur d'une variable.

Commentaire de aKheNathOn le 02/03/2009 16:48:11

sympa l'optimisation, je la connaissait pas celle-la :)

Commentaire de verdy_p le 02/03/2009 17:26:59

Mettre un "?>" à la fin c'est une syntaxe équivalent à écrire un write() supplémentaire (dont la fin de chaine serait délimitée par "<?php" ou la fin de fichier).

Il n'y a qu'au début du fichier où on peut garder un "<?php" qui met fin à l'instruction write() implicite (qui n'est éliminée QUE s'il n'y a strictement rien avant).

Le problème du "?>" à la fin est qu'il peut trop facilement y avoir des blancs et sauts de lignes après (parfois ajoutés involontairemet dans les éditeurs par simpel navigation avec les flèches, et que les éditeurs de texte ne suppriment pas non plus automatiquement), et donc cette suite ne sera pas vide et compilera une instruction write() indésirable (qui plantera tout appel ultérieur à header() par exemple)...

Commentaire de madislak le 10/03/2009 14:15:26

Voila c'est compatible Linux :-)
Par contre ça ne marche que si apache a les droits root pour les commandes concernées.

J'ai mis le resultat des commandes netsh, etc dans des variables publiques pour ne pas avoir à réexécuter les commandes à chaque fois comme le conseillais aKheNathOn, mais je n'arrive pas à les réutiliser dans l'autre classe (enfin bon j'ai pas cherché très longtemps non plus, donc je ferais ptet une autre MaJ plus tard).

J'ai mis des <?php partout dans le index pour vous faire plaisir ;-)
Vous avez raison sur ce point, mais sans vouloir relancer le débat, d'un autre côté je ne connais aucun serveur qui n'accepte pas les shorts tags, à part peut être les vielles versions d'IIS.

Commentaire de verdy_p le 17/03/2009 19:14:41

Les "short tags" sont une nuisance dans le cas où un serveur héberge plusieurs moteurs de scripts: un même source doit alors être traité en plusieurs étapes, la sortie de PHP pouvant apsser par un filtre suivant (ou bien l'inverse aussi, selon l'extension donée au fichier source qui associé généralement le type du premier filtre utilisé).
Certaines de ces instructions de traitement (processing instructions) peuvent être nécessaires pour être compatibles avec des filtres XML, ou SSI par exemple, PHP le script PHP n'étant qu'une des mailles de la suite générale des traitements.
D'une façon générale, les tags plus explicites permettent aussi une identification plus sûre du contenu, surtut quand un source n'est plus lui-même associé à un nom avec une extension mais incorporé au sein d'un autre langage ou protocole de transport n'indiquant pas le type de fichier ni son nom.
C'est une bonne pratique de toute façon d'utiliser "<?php" et non "<?" seul qui reste ambigu.

Note: la non reconnaissance des short tags ne concerne pas QUE les vieilles versions de serveurs (d'aileurs ta remarque à propos d'IIS est inappropriée car IIS n'a pas de support de PHP par défaut, et IIS a toujours cette contrainte nécessitant un label pour associer le filtre correct devant traiter le script; et quel que soit l'age d'IIS, on a toujours eu la possibilité d'utiliser l'association de fichier pour désigner le premier filtre). Enfin même PHP lui-même, dans ses versions les plus récentes, peut encore être configuré pour ne PAS autoriser les short tags (l'option de configuration est présente depuis longtemps). La désactivation des shorttags est en fait bien plus souvent faite sur des serveurs Apache qu'IIS, Apache étant largement plus présent pour les serveurs pour le Web public qu'IIS utilisé principalement pour des Intranet et quelques applications métier ou pour des services d'administration locaux de Windows (qui de toute façon se fait plutôt avec des pages ASP, voire JSP, et pratiquement jamais avec PHP, pour des raisons de sécurité où le nombre de moteurs de scripts à maintenir est réduit au strict minimum, le tag "<?" étant alors utilisé pour désigner ce seul moteur de script autorisé et sans aucun chaînage vers un autre moteur ou filtre, toutes les autres PI comme "<?xml" étant passés en transparence complète dans le résultat, ou son contenu totalement filtré si le label de l'extension PI n'est pas explicitement déclaré et autorisé).

C'est donc bien "<?" qui est obsolète et vraiment trop vieux (et partiellement supporté encore, s'il n'est pas tout bonnement supprimé dans une version ultérieure en tant que nuisance) alors que "<?php" est hautement recommandé depuis maintenant longtemps et s'est imposé depuis des années (et sur certains serveurs partagés, l'option désactivant les shorttags est configurée mais pas modifiable du tout), avec un coût vraiment minime (3 caractères, est-ce que ça tue un source?).

Note: on trouve aussi "<?php5" et "<?php4" pour désigner la version de PHP à utiliser (PHP pouvant être lui-même configuré pour indiquer le label qu'il reconnaitra et ceux qu'il ignorera. Un filtre SSI d'Apache peut alors être configuré pour exécuter la bonne version en fonction des PI qu'il trouve dans un source. On trouve aussi "<?perl", "<?SSI", "<?asp", "<?xml", "<?python", etc... et il existe dans PHP des extensions permettant d'utiliser des sous-filtres en amont ou en aval de traitement, ou pour reprendre le traitement du résultat produit après un filtre intermédiaire (qui peut lui-même générer un script PHP dans son résultat, ou retourner des résultats dans divers autres formats indiqués par la signature du label PI en tête du fichier qu'ils produisent.) J'ai même vu "<?text" pour indiquer que toute la suite est du texte brut qui ne doit pas être parsé mais transmis en transparence complète (en ignorant toute présence d'un autre "<?" dedans ou "?>" qui ne doit pas autoriser la reprise de l'analyse lexico-syntaxique.)

Commentaire de hornetbzz le 08/01/2010 06:02:56

1) C'est bien codé, mais juste une petite remarque de détail:

if($this->os=="windows") {

Tu peux aussi coder :
if( "windows" == $this->os) {

ça t'évitera des warnings inutiles si $this->os n'est pas définie

2) A propos de ton edit : Compatible Linux en lecture seulement car je n'ai pas encore trouvé comment donner les droits d'exécution à apache.

Il est FORTEMENT déconseillé - par seulement par moi :-) - de donner les droits root au user Apache (il s'appelle en général "guest", "nobody" ou "www", l'affectation des droits s'effectue via un "visudo" sous Nux). Sans quoi tu ouvres la porte à tous les délires possibles. Plutôt dangereux comme approche.

C'est bien codé, mais tous cela s'effectue aussi très bien en shell sous Nux avec la maîtrise de la sécurité. Donc à part pour une utilisation Windows sur les distri type Easyphp ou Wamp, je ne vois pas trop l'intérêt.

J'ai peut être loupé qq chose ..

3) Tu devrais préciser aussi que ta POO est destinée à PHP5. ça ne marchera tel quel pas en PHP4

A+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Interface WYSIWYG pour edition de news [ par Joez ] Bonjour je recherche une Interface WYSIWYG pour edition de news pour mon site en PHP.quelqu'un à ça ? ticket a grater [ par thmtd ] c'est un jeu, je pense un truck avec tirage aléatoire contenant un code php et un source en c (code) pour des sockets en plus il faut faire aussi Probleme d'include chez free [ par lil_jam63 ] Bonsoir, voilà un moment que je me casse la tête avec un probleme que je ne comprends pas, j'ai une page index.php qui est faites de 5 includes:-haut comment Modifier l'interface de JMstudio? [ par yaanovitch78 ] bonjour à vous tous, cela fait maintenant quelque mois que j'etudie le language JAVA ( notemment la JMF), mais je suis encore un pauvre débutant. En Recherche moteur de workflow [ par dannywilde ] Bonjour a tous, je recherche un moteur de cr&#233;ation de workflow en php ayant une interface graphique permettant de "dessiner" la d&#233;finition d AIde pour Newsletter [ par Nownow ] Bonjour,Je souhaiterai r&#233;aliser un newsletter editable bas&#233;e sur ce principe :http://www.phpcs.com/code.aspx?ID=13411Cette newsletter &#233; Image numérique et php [ par bouffard ] Bonjour,J'amerais savoir s'il&nbsp;est possible de r&#233;cup&#233;rer &#224; l'&#233;cran gr&#226;ce &#224; un interface en php une image (photo) pro LDAP interface client [ par Ben Coverflag ] Bonjour,je viens de cr&#233;er mon serveur ldap avec openldap. Donc j'ai une base de don&#233;e ldap que je peux interroger au moyen du terminal.J'aim BD ldap interface client [ par Ben Coverflag ] Bonjour,je viens de cr&#233;er mon serveur ldap avec openldap. Donc j'ai une base de don&#233;e ldap que je peux interroger au moyen du terminal.J'aim Interface hébergement [ par thomvaill ] Bonjour, j'ai un serveur d&#233;di&#233; et j'aimerai faire de l'h&#233;bergement (web, shell..) Donc, je boss sur une interface compl&#232;tement au


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales