8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'aurais besoin d'un petit coup de main concernant un projet pro.

Je récupère avec phpseclib et une commande Cisco l'information des ports de mon Switch.


	set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
	include('Net/SSH2.php');

	$ssh = new Net_SSH2('*.*.*.*');
	if (!$ssh->login('Login', 'Password')) {
		exit('Login Failed');
	}
	print_r($ssh->exec('Show interfaces status'));


Voici le résulstat :


################################ # unauthorized access prohibited ################################ Port Name Status Vlan Duplex Speed Type Fa1/0/1 Imprimante connected trunk a-full a-100 10/100BaseTX Fa1/0/2 Imprimante connected trunk a-full a-100 10/100BaseTX Fa1/0/3 Imprimante connected trunk a-full a-100 10/100BaseTX Fa1/0/4 Imprimante notconnect 1 auto auto 10/100BaseTX Fa1/0/5 Users notconnect 1 full 100 10/100BaseTX Fa1/0/6 Users notconnect 1 full 100 10/100BaseTX Fa1/0/7 Users notconnect 1 full 100 10/100BaseTX Fa1/0/8 Users notconnect 1 full 100 10/100BaseTX Fa1/0/9 Users connected trunk full 100 10/100BaseTX Fa1/0/10 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/11 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/12 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/13 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/14 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/15 Users connected 11 a-full a-100 10/100BaseTX Fa1/0/16 Users notconnect 11 auto auto 10/100BaseTX Fa1/0/17 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/18 Users notconnect 11 auto auto 10/100BaseTX Fa1/0/19 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/20 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/21 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/22 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/23 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/24 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/25 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/26 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/27 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/28 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/29 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/30 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/31 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/32 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/33 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/34 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/35 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/36 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/37 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/38 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/39 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/40 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/41 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/42 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/43 Users connected trunk a-full a-100 10/100BaseTX Fa1/0/44 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/45 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/46 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/47 Users notconnect 1 auto auto 10/100BaseTX Fa1/0/48 Users notconnect 1 auto auto 10/100BaseTX Gi1/0/1 Uplink-to-FRAUDROU connected trunk a-full a-1000 1000BaseLX SFP Gi1/0/2 Uplink-Ready notconnect 1 auto auto Not Present Gi1/0/3 Uplink-Ready notconnect 1 auto auto Not Present Gi1/0/4 Uplink-Ready notconnect 1 auto auto Not Present Fa2/0/1 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/2 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/3 Users notconnect 11 auto auto 10/100BaseTX Fa2/0/4 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/5 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/6 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/7 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/8 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/9 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/10 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/11 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/12 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/13 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/14 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/15 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/16 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/17 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/18 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/19 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/20 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/21 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/22 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/23 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/24 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/25 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/26 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/27 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/28 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/29 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/30 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/31 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/32 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/33 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/34 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/35 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/36 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/37 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/38 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/39 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/40 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/41 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/42 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/43 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/44 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/45 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/46 Users notconnect 1 auto auto 10/100BaseTX Fa2/0/47 Users connected trunk a-full a-100 10/100BaseTX Fa2/0/48 Users connected trunk a-full a-100 10/100BaseTX Gi2/0/1 Uplink-Ready notconnect 1 auto auto Not Present Gi2/0/2 notconnect 1 auto auto Not Present Gi2/0/3 notconnect 1 auto auto Not Present Gi2/0/4 notconnect 1 auto auto Not Present


Je souhaite avoir un tableau comme ci-dessous :


Array(
[0] => Fa1/0/1   Imprimante         connected    trunk      a-full  a-100 10/100BaseTX
[1] => Fa1/0/2   Imprimante         connected    trunk      a-full  a-100 10/100BaseTX
[2] => Gi1/0/1 Uplink-to-FRAUDROU connected trunk a-full a-1000 1000BaseLX SFP
)


J'ai testé avec Explode en délimiteur Fa mais le résultat obtenu ne correspond pas car au moment de la ligne Gi j'ai un souci de plus Fa et supprimé alors que je souhaite le conserver.

J’ai testé cette petite fonction :


	function explodeX( $delimiters, $string ){
		return explode( chr( 1 ), str_replace( $delimiters, chr( 1 ), $string ) );
	}
	$exploded = explodeX( array('Fa', 'Gi'), $ssh->exec('Show interfaces status') );


Le résultat et bien mieux mais Fa et Gi sont aussi effacés.

Quelqu'un pour m'aider ?

Merci d'avance.
Modifié par Chouchou (16 Feb 2017 - 11:00)
salut,

il faut que tu rajoutes le délimiteur dans le remplacement.
tu peux passer un tableau en second paramètre de str_replace

function explodeX( $delimiters, $string ){
  $replacement = [];
  foreach ($delimiters as $key => $value) {
    $replacement[$key] = PHP_EOL.$value;
  }
  $retour = explode( "\n", str_replace( $delimiters, $replacement, $string ) );
  array_shift($retour);
	return $retour;
}


le array_shift c'est pour virer l'entête.

ensuite il y a moyen d'utiliser str_getcsv ou explode pour parser la ligne.

@+
Modifié par moogliBZH (16 Feb 2017 - 11:51)
Hello,

Merci beaucoup ça fonctionne par contre quelque chose me semble étrange.

Si je fais ça :


	function explodeX( $delimiters, $string ){
		$replacement = [];
		foreach ($delimiters as $key => $value) {
			$replacement[$key] = $value;
		}
		$retour = explode( "\n", str_replace( $delimiters, $replacement, $string ) );
		array_shift($retour);
		return $retour;
	}
	
	$exploded = explodeX( array('Fa','Gi'), $ssh->exec('Show interfaces status') );


J'ai le même résultat que ça :


	function explodeX( $delimiters, $string ){
		$replacement = [];
		foreach ($delimiters as $key => $value) {
			$replacement[$key] = $value;
		}
		$retour = explode( "\n", str_replace( $delimiters, $replacement, $string ) );
		array_shift($retour);
		return $retour;
	}
	
	$exploded = explodeX( array(), $ssh->exec('Show interfaces status') );


et je n'arrive pas à comprendre comment c'est possible.
salut,
tu peux faire beaucoup plus simple avec la fonction native preg_split.
Elle se comporte comme un explode sauf qu'elle utilise une expression rationnelle à la place.
Avec le bon pattern, tu pourrais simplement établir le délimiteur comme étant l'espace précédent "Fa" ou "Gi" et pour cela, tu utilise les assertions avant :

$exploded = preg_split('` (?=Fa|Gi)`', $ssh->exec('Show interfaces status'));
Meilleure solution
Zelalsan a écrit :
salut,
tu peux faire beaucoup plus simple avec la fonction native preg_split.
Elle se comporte comme un explode sauf qu'elle utilise une expression rationnelle à la place.
Avec le bon pattern, tu pourrais simplement établir le délimiteur comme étant l'espace précédent "Fa" ou "Gi" et pour cela, tu utilise les assertions avant :

$exploded = preg_split('` (?=Fa|Gi)`', $ssh->exec('Show interfaces status'));


Super merci !

Super fonction . Je vais regarder de suite comment elle marche.

Encore merci à tous !