Bonjour,
Je travaille actuellement dans un établissement scolaire utilisant un serveur Kwartz. Je cherche une fonction en php qui pourrait m'indiquer si telle ou telle IP est bien raccordée au réseau. Je n'ai plus touché de PHP depuis 5 ans, donc je suis un peu rouillé... J'ai testé pas mal de solutions, mais aucune ne me convient...
Avant tout, La méthode @fsockopen sur le port 80 fonctionne très bien pour les imprimantes, celles-ci ayant une interface web, mais ne marche pas du tout pour les ordinateurs:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php if (!$socket = @fsockopen("IP.A.TESTER", 80, $errno, $errstr, 30)) { echo "<font color='red'><strong>Offline!</strong></font>"; } else { echo "<font color='green'><strong>Online!/strong></font>"; fclose($socket); } ?>
La fonction socket_create() n'est pas permise:
Warning: socket_create() [function.socket-create]: Unable to create socket [1]: Operation not permitted in /home/kwartz/www/bidon/index.php on line 14
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 function ping($host, $timeout = 1) { /* ICMP ping packet with a pre-calculated checksum */ $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; $socket = socket_create(AF_INET, SOCK_RAW, 1); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); socket_connect($socket, $host, null); $ts = microtime(true); socket_send($socket, $package, strLen($package), 0); if (socket_read($socket, 255)) $result = microtime(true) - $ts; else $result = false; socket_close($socket); return $result; } ping("172.16.113.1");
De ce fait, j'essaye la fonction exec, mais elle tourne en rond, sans rien réussir à m'afficher...
J'avoue ne plus trop bien savoir où chercher. la fonction @fsockopen me semble être l'idéale dans mon cas, mais il me faudrait savoir si il existe un port toujours actif sur un ordinateur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ping_ex = exec("ping 172.16.113.1", $ping_result, $pr); if (count($ping_result) > 1){ echo 'online'; } else { echo 'offline'; }
Encore merci d'avance!
Partager