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

Réseau/Web Python Discussion :

Vérifier si un object est une adresse joignable


Sujet :

Réseau/Web Python

  1. #1
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut Vérifier si un object est une adresse joignable
    Bonjour,
    Voilà j'aimerai vérifier si l'user ne me raconte pas des cracks lorsqu'il me donne une adresse IP (ou un nom de domaine).

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Un petit ping devrait suffire
    http://svn.pylucid.net/pylucid/CodeSnippets/ping.py
    Je n'ai absolument pas testé le lien ci dessus, mais on peut tjs espérer

  3. #3
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    le probleme du ping c'est que beaucoup de serveur utilise leur firewall pour que le ping ne reponde pas.

  4. #4
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Si le ping ne convient pas, il faudra te plier à un protocole accepté.
    Pour quel genre de service as-tu besoin de ces adresses ?
    Si c'est mail, vois du côté de pop/imap voire smtp. Mais ici encore, ce n'est pas tjs disponible.
    Si c'est http, une petite requete HEAD sur le port 80 devrait suffire
    etc... à chaque service son truc.

    Tu peux aussi utiliser socket.gethostbyname, qui te renvoie l'adresse IP selon un nom "human-readable", et lève une gaierror s'il ne peut pas trouver l'hôte.
    Enfin j'ai testé, mais j'ai des drôles de trucs quand même :p

    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
    In [1]: import socket
     
    In [2]: socket.gethostbyname("sdfsdf.zerozier")
    Out[2]: '67.215.65.132'
     
    In [3]: socket.gethostbyname("sdfsdf.zerozierc")
    Out[3]: '67.215.65.132'
     
    In [4]: socket.gethostbyname("google.be")
    Out[4]: '209.85.229.104'
     
    In [5]: socket.gethostbyname("google.com")
    Out[5]: '74.125.45.100'
     
    In [6]: socket.gethostbyname("efddnf ekjezzef")
    ---------------------------------------------------------------------------
    gaierror                                  Traceback (most recent call last)
     
    C:\Windows\system32\<ipython console> in <module>()
     
    gaierror: [Errno 11001] getaddrinfo failed

  5. #5
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour,
    Le but sera de se connecter a une base MySQL, mon probleme est que j'utilise python-mysql et que j'arrive pas a gerer les exceptions convenablement (j'ai bien vu qu'une erreur etait levee lorsque l'hote n'existait pas, une autre que le couple login/mdp n'est pas bon ect) mais j'arrive pas a les intercepter :/

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Fais voir un bout de code qui lance une erreur, et montre aussi un traceback d'une de ces erreurs, on pourra sans doute aller plus loin
    Aussi, si tu as le lien vers ce package pour MySQL... non seulement ça m'intéresse, mais en plus ça permettrait de trouver l'erreur plus facilement

    Le fait est que toutes les exceptions ne découlent (hélas) pas de BaseException (ou Exception dans Python < 2.5). socket.error est un bel exemple.

  7. #7
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Sur le site de MySQL dans la section d'intégration avec python, ca semble vide.
    J'ai trouve le projet MySQL for Python qui est d'une simplicité absolue.
    Je vais le reinstaller sur ma machine (tout est sur la machine du travail) et donner des exemples de code et les traceback. (j'edite d'ici une dizaine de minute).
    merci de m'aider

  8. #8
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Hello,
    Dsl du retard, quelques petit problème a l'installation (au fait il est dans les paquets debian si besoins).

    Bon, un petit exemple simple:

    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
    >>> import MySQLdb
    >>> 
    >>> #Connexion correcte
    >>> connexion = MySQLdb.connect('127.0.0.1', 'root', 'titi')
    >>>
    >>> #Connexion avec une adresse inexistane
    >>> badadress = MySQLdb.connect('512.0.0.1', 'root', 'toto')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/var/lib/python-support/python2.5/MySQLdb/__init__.py", line 74, in Connect
        return Connection(*args, **kwargs)
      File "/var/lib/python-support/python2.5/MySQLdb/connections.py", line 170, in __init__
        super(Connection, self).__init__(*args, **kwargs2)
    _mysql_exceptions.OperationalError: (2005, "Unknown MySQL server host '512.0.0.1' (3)")
    >>> 
    >>> #connexion avec un mauvais mots de passe
    >>> badpassword = MySQLdb.connect('127.0.0.1', 'root', 'toto')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/var/lib/python-support/python2.5/MySQLdb/__init__.py", line 74, in Connect
        return Connection(*args, **kwargs)
      File "/var/lib/python-support/python2.5/MySQLdb/connections.py", line 170, in __init__
        super(Connection, self).__init__(*args, **kwargs2)
    _mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
    >>>
    mon but est de captuer
    _mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

    toutes les autres erreurs de connexion je m'en fiche pas mal.

  9. #9
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Essaye ceci, ça devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        # Ton code...
    except _mysql_exceptions.OperationalError, e:
        # gère l'exception
    Et visiblement, le code d'erreur qui indique qu'un serveur est inexistant est le 2005

  10. #10
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    EDIT://
    Oui ca correspond bien a ce que j'ai pu essayer mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameError: global name '_mysql_exceptions' is not defined
    EDIT bis://
    import _mysql_exceptions regle le probleme

  11. #11
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Le "e" pourrait être défini comme "le nom donné à la variable qui contiendra l'exception".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try:
        raise ValueError("Just for fun")
    except ValueError, e: # "e", ou "zglabalabardan" si tu préfères
        print repr(e)
    "e" (ou quoi que soit le nom que tu lui as donné donc) contient l'exception en elle-même. Cette exception possède des attributs.
    Et il y a fort à croire que l'OperationalException possède un attribut / une méthode qui permet de récupérer le code d'erreur.

  12. #12
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour et merci de ta reponse, j'ai neanmoins edite mon poste du dessus car je ne te voyais pas en ligne

    EDIT://
    Merci des explications, tout fonctionne beaucoup mieu

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

Discussions similaires

  1. [XL-2003] Vérifier que la saisie est une date
    Par Liloo14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/01/2013, 15h55
  2. Réponses: 3
    Dernier message: 08/01/2010, 16h13
  3. vérifier que que L est une liste
    Par xeron33 dans le forum Prolog
    Réponses: 2
    Dernier message: 05/06/2009, 23h31
  4. VB6 Connection à une base de données dont la source est une adresse url
    Par yangoal25 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/11/2006, 18h47
  5. Réponses: 6
    Dernier message: 06/12/2004, 22h18

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