IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[FTP] Tester un port avec php.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut [FTP] Tester un port avec php.
    Bonsoir à tous,

    Voici ce qui me fait venir vers vous.

    Je possède plusieurs serveur sur ma machine (HTTP, FTP, Mail, Telnet, VNC, Teamspeak...)

    Tous ces serveurs utilisent différents port(80, 21...)

    De façon à ce que mes amis puissent savoir si tel ou tel serveur et en ligne (ils ne sont pas lancés en permanence) je souhaiterai créer un script me permettant de tester la connectivitée à ces serveurs.

    Ma page se lance sur un hébergeur gratuit.

    J'ai essayé avec ce script pris sur un autre site et proposé en téléchargement pas waz :

    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
    <?php 
    // Adresse du serveur Web à tester 
    $server = 'http://www.google.com:80'; 
     
    // Temps avant expiration du test de connexion 
    define('TIMEOUT', 30); 
     
    $tab = parse_url($server); 
    $tab['port'] = isset($tab['port']) ? $tab['port'] : 80; 
    if(false !== ($fp = fsockopen($tab['host'], $tab['port'], $errno, $errstr, TIMEOUT))) { 
        fclose($fp); 
        header('Location: ' . $server); 
    } else { 
        die('Erreur #' . $errno . ' : ' . $errstr); 
    } 
    ?>
    PS : C'est pas de la pub, juste le respect des droits d'auteur.

    Apparemment, ca ne fonctionne pas sur les hébergeurs gratuits. Voici les erreurs qui s'affichent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: fsockopen() has been disabled for security reasons in /www/sites/1/ifrance.com/X/X/XXXXX/site/Testping.php on line 37
     
    Warning: fclose(): supplied argument is not a valid stream resource in /www/sites/1/ifrance.com/X/X/XXXXX/site/Testping.php on line 38
    Quelqu'un connait t'il une solution pour que je puisse effectuer un test et si le test est concluant afficher une image verte (ce qui veut dire que le serv est online et dans le cas contraire afficher une image rouge qui veut dire que le serv est offline.

    Si possible une solution simple fonctionnant sur les hégergeurs gratuit.

    Merci d'avance pour vos réponses.

    EDIT ==> Ceci pour chaque port du serveur le serveur Web peut très bien être actif mais pas le FTP par exemple.

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Essaie avec curl

  3. #3
    Membre Expert
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 291
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 291
    Par défaut

    http://php.developpez.com/faq/?page=...ivers_verifurl

    Merci de chercher un peu la prochaine fois.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut Re: Tester un port avec php.
    Citation Envoyé par Trebor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: fsockopen() has been disabled for security reasons in /www/sites/1/ifrance.com/X/X/XXXXX/site/Testping.php on line 37
    Le message est clair : la fonction à été désactivée par l'hebergeur en question

    Tu peux essayer de te rabattre sur la libraire de socket (socket_create/socket_connect etc...), au cas où celle ci serait installée et pas bridée, mais il y a peu de chances que ça fonctionne amha

    Le mieux serait encore, si tu peux, de trouver un hebergeur qui accepte que tu utilises ces fonctions
    Par exemple j'ai un script sur free.fr qui fonctionne très bien (avec des sockets) -> voir ici.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Merci, je vais faire un test.

    Bidouille, j'ai utilisé la fonction rechercher. Tu n'as pas du lire complètement le post car la fonction fsockopen est désactivé sur l'hébergeur en question (ifrance).

    De plus, ceci me permet seulement de tester un http ou alors puis je l'utiliser pour tester Telnet, FTP, Mail et autre ?

    La librarie de socket à l'air pas mal à utiliser mais je ne vois pas trop comment l'utiliser peut être un exemple rapide de code ?

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Et curl, il sent le paté ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Non excuses moi j'avais zappé. Je viens de regarder mais pareil si je pouvais avoir un tit exemple car pour l'utilisation, je galère un peu.

    PS : Y'a pas un moyen de tester si un port est ouvert sur une machine distante à l'aide d'un script plutôt simple en php ?

  8. #8
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Il y a CURLOPT_PORT il suffit de mettre ce flag à la valeur a priori...

    Remarque: je ne connais pas mieux curl que ça, je m'en suis servi pour faire des requêtes vers un serveur web normal. Pour faire un scan de port je sais pas si c'est adapté...

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Citation Envoyé par sur http://curl.haxx.se/ il y
    curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, TFTP, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP.
    Bon je dis pas que ça peut pas marcher avec curl, mais en tout cas c'est pas conçu pour ça



    Pour un exemple d'utilisation des sockets, tu en as sur php.net

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    error_reporting(E_ALL);
     
    echo "<h2>Connexion TCP/IP</h2>\n";
     
    $service_port = 80;
     
    /* Lit l'adresse IP du serveur de destination */
    $address = gethostbyname('www.example.com');
     
    /* Cree une socket TCP/IP. */
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket < 0) {
       echo "socket_create() a échoué : raison :  " . socket_strerror ($socket) . "\n";
    } else {
       echo "OK.\n";
    }
     
    echo "Essai de connexion à '$address' sur le port '$service_port'...";
    $result = socket_connect($socket, $address, $service_port);
    if ($result < 0) {
       echo "socket_connect() a échoué : raison : ($result) " . socket_strerror($result) . "\n";
    } else {
       echo "OK.\n";
    }
     
    socket_close($socket);
    ?>

  10. #10
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par Taum
    Citation Envoyé par sur http://curl.haxx.se/ il y
    curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, TFTP, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP.
    Bon je dis pas que ça peut pas marcher avec curl, mais en tout cas c'est pas conçu pour ça
    Par ce que les sockets c'est fais pour tester des ports ???

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Je viens d'essayer le code donné par Taum en local avec Easyphp 1.8 et j'ai un message d'erreur. Je vais vérifier mon install pour voir si des fois il n'y a pas une erreur dans mon php.ini

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Et si tu nous donnais le message d'erreur ?

    De mémoire il me semble que l'extension socket est désactivée par défaut.
    Pour l'activer, il faut chercher dans ton php.ini cette ligne et la décommenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extension=php_sockets.dll

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Alors,

    Je viens de tester différents code en local pour déjà voir ce que ca donne.

    Problème... Ca me dit toujours que le port est ouvert...

    Voici le dernier code que j'ai utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(false !== ($test = fsockopen("localhost", 21, $errno, $errstr, 30))) {
            fclose($test);
            echo "Port ouvert";
            } else {
            echo "Port fermé";
     
    }
    Bref, que je mette 1 à 5000 ca me dis tjrs que le port est ouvert. Pourtant en testant le port 21 alors que mon serveur ftp n'est pas allumé, il devrait me dire que le port est fermé non ???

    Je comprends plus rien.

    Ca me gonfle de pas trouver alors je relance ma recherche sur le net et je tombe la dessus...

    http://www.sitepoint.com/article/udp-portscanning-php

    Si des fois quelqu'un pouvait m'expliquer ce que je peux faire avec cet article.

    Merci tout plein.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 14
    Par défaut
    Je suis également intéressé par ce sujet. Quelqu'un à t'il trouvé une solution au problème ?

  15. #15
    Invité de passage
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1
    Par défaut Reponse
    Voila je pense avoir trouver une combine en 2 petit fichier:
    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php 
     
    define('TIMEOUT', 5); 
     
    if(fsockopen('localhost',80,$errno,$errstr,TIMEOUT))
    {
    $result = "true";
    }
    else
    {
    $result = "false";
    }
    print "<meta http-equiv=refresh content=0;URL=result.php?var=$result>"
    ?>
    et

    result.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $result = $_GET['var'];
    if($result == "true")
    {
    print "ok";
    }
    else
    {
    print "pas ok";
    }
    ?>

  16. #16
    Membre averti Avatar de _PaTaTe_
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 23
    Par défaut
    Citation Envoyé par ortys4 Voir le message
    Voila je pense avoir trouver une combine en 2 petit fichier:
    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php 
     
    define('TIMEOUT', 5); 
     
    if(fsockopen('localhost',80,$errno,$errstr,TIMEOUT))
    {
    $result = "true";
    }
    else
    {
    $result = "false";
    }
    print "<meta http-equiv=refresh content=0;URL=result.php?var=$result>"
    ?>
    et

    result.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $result = $_GET['var'];
    if($result == "true")
    {
    print "ok";
    }
    else
    {
    print "pas ok";
    }
    ?>
    Perso, j'aurais fais bien plus cours en un seul fichier. Ton fichier result.php ne sert à rien il convertit un true en "ok" et un false en "pas ok" !

    Autant faire comme ça (en bonus l'affichage de l'erreur et de son numéro ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php 
    define('TIMEOUT', 5); 
    if(fsockopen('localhost', 5858, $errno, $errstr, TIMEOUT)){
    	print 'ok';
    }else{
    	print 'pas ok ('.$errno.' - '.$errstr.')';
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/07/2011, 17h34
  2. automatiser une porte avec php
    Par ramoul dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 14/01/2009, 09h05
  3. [Système] Tester un port UDP avec PHP
    Par kanaziwok dans le forum Langage
    Réponses: 17
    Dernier message: 16/07/2007, 15h01
  4. Réponses: 5
    Dernier message: 10/05/2007, 11h54
  5. [FTP] Tester connexion à Internet en PHP
    Par nin47 dans le forum Langage
    Réponses: 10
    Dernier message: 22/05/2006, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo