Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

Détection des postes actifs

Salut,
J’essaye depuis 2 jours de trouver un moyen de d’afficher les ip des postes actifs dans mon réseau local…. J’en ai besoin pour un site dynamique, je bosse alors avec PHP comme langage.
Coté socket, toutes les fonctions qui existe en C existe en PHP, y a pas une très grande différence…
Bon, pour l’instant j’essaie seulement de tester la connexion via le code :

<?php
error_reporting(E_ALL);
$network = "192.168.0.";
$port = 10000;
$socket = socket_create(AF_INET, SOCK_RAW, 1 )
or die("impossible de creer la socket <br>");
for($i=1;$i<10;$i++)
{
$host = $network = "192.168.0." . $i ;
if (socket_connect($socket, $host, $port))
echo "connexion OK avec $host <br>";
else
echo "connexion OFF avec $host <br>";
}
?>

Le problème, c’est ce script me retourne :
connexion OK avec 192.168.0.1
connexion OK avec 192.168.0.2
connexion OK avec 192.168.0.3
…..
même si 192.168.0.2 n’existe même pas dans le réseau ?!!!
Avez-vous une des remarques ?
Merci d’avance
Lu trinity,

Pourquoi passes tu en mode RAW ? Ne serais tu pas mieux en mode TCP ?

@+
_SebF - Sébastien FONTAINE
Peut etre c'est même pas la bonne méthode car:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP )
or die("impossible de creer la socket <br>");
socket_connect($socket, "127.0.0.1", 10000)
or die("impossible de se connecter <br>");

me retourne avec TCP: "impossible de se connecter"
Exactement.

Est ce que le port 10000 est listen ?
_SebF - Sébastien FONTAINE
j'ai utilisé le mode RAW en espirant sniffer le réseau et donc savoir les les postes qui bougent... mais c'est pas aussi évident.

je ne sais pas mais ce que tu me proposes suppose un truc client/serveur.. CAD deux sockets qui se connectent...
mais moi je cherche seulement à tester le poste... c'est comme un ping...
J'avoue que... ce que je fais avec les sockets, c'est plutôt du "learning by doing", j'ai pas trop bosser d'exemples et de tp pour savoir ce que je dois ou pas faire ...
Merci
Exactement

La tu test si le port 10000 TCP est ouvert sur l'host distant. Et donc il te répond non.

Soit tu test un pourt ouvert (essai le netbios)
Soit tu n'utilise pas TCP mais ping

@+
_SebF - Sébastien FONTAINE
Merci pour votre patience avec quelqu'un aussi nulle que moi...
J'ai tester d'autres ports et c'est idem

<?php
error_reporting(E_ALL);
$socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP )
or die("impossible de creer la socket1 <br>");
if (socket_connect($socket1, "192.168.0.3", 80)) //http
echo "c'est ok sur 80<br>";
else
echo "impossible de se connecter sur 80<br>";

$socket2 = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP )
or die("impossible de creer la socket1 <br>");
if (socket_connect($socket2, "192.168.0.3", 137)) //netBios
echo "c'est ok sur 137<br>";
else
echo "impossible de se connecter sur 137<br>";
?>
alors si le host existe dans le réseau; j'ai:

Warning: socket_connect() unable to connect [0]: Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée. in c:\program files\easyphp1-8\www\socket\myex1.php on line 5
impossible de se connecter sur 80
c'est ok sur 137
[/color:143fdc7864]
et s'il n'existe pas:

Warning: socket_connect() unable to connect [0]: Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu. in c:\program files\easyphp1-8\www\socket\myex1.php on line 5
impossible de se connecter sur 80
c'est ok sur 137
[/color:143fdc7864]
Je ne sais pas, mais je pense que je suis super trés loin de la solution...
je fais fausse route, c'est sûr, c'est pas comme ça que je vais detecter les postes de mon réseau...
Merci quand même
Lu,

Tu ne dois pas utiliser UDP, car tu n'aura pas de réponse vu qu'il n'y a pas de session. Je pensais plus à Netbios, comme le port 135, en mode TCP.

Sinon, ton test précédent t'indiquait si le Pc était présent ou pas :

Warning: socket_connect() unable to connect [0]: Une tentative de connexion a échoué => PC éteind
Warning: socket_connect() unable to connect [0]: Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée => PC allumé.

Cependant, c'est pas très propre 🙂 L'idéale serait de passer par icmp
_SebF - Sébastien FONTAINE
salut _sebf
t'as pas un script en icmp meme s'il est en C... j'essairai de le traduire en php.
merci
Si tu veux bidouiller un peu, j'ai pensé à un truc assez facile mais bon:

[code:1:c18a676af0]exec("ping -a -n 1 $target > $outFile");[/code:1:c18a676af0]

Reste plus qu'a parser le fichier de sortie.
(cette solution est purement informative et non optimisée pour scanner un grand nombre de postes :>)