Gestion des cartes réseau en PHP

Petit nouveau ! | 4 Messages

01 mai 2013, 13:40

Bonjour,
je vies vers vous car j'ai un petit projet qui me dérange tellement, et je n'ai jamais utilisé la programmation orienté objet.
le sujet est le suivant:
- j'ai une machine avec Unix et qui contiens 4 cartes réseau je veux avoir une interface en php qui affiche la configuration de chaque carte avec la possibilité de modifier l'adresse ip.
PI: j'ai déja débuté sur ce projet et je n'ai pas utilisé les class, j'ai fais un script normal en exécutant juste les commande unix pour récupération des données.

mon besoin exacte est le suivant:
l'affichage de ma page dois être sous la forme suivante:
(tableau)
Catre réseau : "nom de la carte"
Adresse Ip: "@ip"
Masque de sous réseau: "masque"
Passerelle: "passerelle"

je vous remercie d'avance pour vos réponses

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 mai 2013, 14:45

salut,

qu'est ce que tu ne sais pas faire exactement ?

est tu obligé d'utiliser la poo ?

si tu le souhaite je t'invite à regarder ce qu'est un MVC.

dans ton cas tu auras :
- Un vue : la page qui affiche les données sous formes de tableau
- Un contrôleur qui va demander au modèle les informations
- Le modèle va contenir une classe DAO et (au moins) un classe représentant une carte réseau.

Tous ceci découle d'une modélisation simple. Tu peux regarder d'uml pour cela (et par exemple la méthode de craig lermann).


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 4 Messages

01 mai 2013, 14:51

merci de ta réponse je vais voir et reviens vers vous au cas ou

Petit nouveau ! | 4 Messages

02 mai 2013, 18:57

re bonjour,
j ai fais ce que vous m'avez demande mais le problème que je rencontre c'est sur les commandes Linux, j'arrive pas à avoir l'adresse Ip à part et le mask à part.
je ne sais pas comment faire une class qui pourra m'affichez les données dont j'ai besoin.

Petit nouveau ! | 4 Messages

02 mai 2013, 19:08

j'ai le code suivant pour ma class mais il ne marche pas en php5 plusieurs erreur:
<?php

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;
	}
}
?>