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

Python Discussion :

comparaison dans un fichier


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut comparaison dans un fichier
    Bonjour,

    Mon tuteur de stage me demande de faire un script permettant de faire des réservations d'adresse ip. Au sein de l'entreprise, il y a plusieurs réseaux déclarés. Au final lorsqu'on lance le script on doit lui entrer un nom de groupe, chaque nom de groupe pointe vers un fichier précis. Dans ces fichiers, se trouve les adresses ip réservées. Un groupe a son propre réseau ip.

    Mon problème est que je voudrais comparer les adresses ip d'un réseau avec les adresses ip déjà réservées dans un fichier.

    Ex: ./add.py -g grp1

    grp1 pointe vers le fichier 193.49.106.0.net
    Dans ce fichier, il y a des adresses réservées :
    host laptop { hardware ethernet 01:AB:CD:EF:1A:34; fixed-address 193.49.106.1;}
    host laptop { hardware ethernet 02:AB:25:EF:1A:34; fixed-address 193.49.106.2;}
    ....

    J'ai trouvé un module (ipaddr) permettant de calculer toutes les adresses ip d'un plage.

    Et donc je voudrais comparer toutes les adresses ip d'un plage avec les adresses ip réservées dans un fichier.

    Est-ce possible? Quelqu'un aurait-il une solution?

    Merci

    PS: J'espère avoir était suffisament clair pour que vous cerniez mon problème.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonjour,

    C'est certainement pas bien compliqué, mais je n'ai pas tout compris.
    Citation Envoyé par kevins Voir le message
    Ex: ./add.py -g grp1
    Qu'est censé faire ce script ? Ne manque-t-il pas un argument (une adresse IP peut-être) ? Sinon pq s'appelle-t-il "add.py" ?
    Citation Envoyé par kevins Voir le message
    grp1 pointe vers le fichier 193.49.106.0.net
    Il pointe comment ? Ou se trouve la correspondance nom de groupe <--> nom de fichier ? Elle est codée en dur dans le script ou récupérée dans un autre fichier ? Et comment récupères-tu le masque de sous-réseau ? Le connais-tu également grâce au groupe ? Tous les sous-réseaux utilisent le même masque ? Ou bien tu dois le récupérer dans le fichier .net ?

    Qu'est-ce qui te pose problème exactement ? Récupérer les adresses IP dans le fichier ? Cela doit pouvoir se faire sans difficulté avec une expression régulière.

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Ok je vois que je n'ai pas été assez clair

    Au final, on lance le script de cette manière :
    ./add.py -n laptop -e 00:12:FE:A1:23:B1 -g grp1

    -n: le nom de machine qui sera utilisé pour réserver l'adresse ip.
    -e: adresse mac de la machine cliente
    -g: le groupe

    Selon le groupe choisi, il pointera vers un fichier précis (grp1=193.49.106.0.net ; grp2=193.49.108.0.net...). Oui, il y aura une correspondance dans un fichier (grp1=chemin_du_fichier).

    ==> Pour récupérer le masque de sous-réseaux je ne sais pas encore comment je vais faire, il me semble que le module ipaddr peut m'aider de ce côté là.

    ==> donc non je ne connais pas le masque grâce au groupe.

    ==> Chaque réseaux utilisent des masques différents (il y a des masques standard et d'autres non)

    ==> En ce qui concerne les adresses ip. Lorsqu'on lance le script, ce dernier doit trouver la première adresse ip disponible.
    Par exemple, avec le module ipaddr, je peux calculer toutes les adresses ip de la plage 193.49.106.0 avec un masque en /24 (193.49.106.1 à 193.49.106.254) et comparer ce résultat avec les adresses ip réservées du fichier 193.49.106.0.net pour faire resortir celles qui sont libres et en attribuer une à une machine

    Et donc c'est cette comparaison que je cherches à faire

  4. #4
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Personne pour éclairer ma lanterne?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Pour récupérer les adresses IP dans le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import re
     
    dhcp_data = open(net_file).read()
    reserved = re.findall("host\s+\w+\s+\{[^\}]*?fixed-address\s+(\d+(?:\.\d+){3})", dhcp_data)
    J'ai mis un minimum de validation dans l'expression régulière, ça devrait suffire...

    Je n'ai pas la librairie ipaddr mais, en me basant sur la PEP 3144, le code pour trouver la première adresse libre devrait ressembler à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    reserved = [IPv4Address(ip) for ip in reserved] # <-- peut-être pas nécessaire
    net = IPv4Network("193.49.106.0/24")
    for ip in net:
        if ip in (net.network, net.broadcast): continue
        if ip not in reserved: break
    else:
        raise Exception("Toutes les adresses sont reservées")
    print ip, "est dispo"

  6. #6
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    D'accord je vais essayer de suite.

    De mon côté j'ai continué mon script. Je me suis occupé de la partie calcul des adresses IP dans une plage d'adresse donnée.

    Dans le fichier "liste", j'ai des correspondances sous cette syntaxe:

    admin : 192.168.10.0 : 255.255.254.0
    test : 194.25.78.0 : 255.255.255.0
    Mon script récupère l'adresse réseau et la stocke dans la variable "t" et dans la variable "m" pour le masque.

    liste='/home/kevin/liste'
    arg=raw_input('Entrer un nom de groupe: ')
    def ip(liste):
    objfile = open(liste,"r")
    while 1:
    line=objfile.readline()
    if(line==""):
    objfile.close()
    return False
    elif line.startswith(arg):
    objfile.close()
    return line
    res=ip(liste)
    ipa=res.split(":")
    t=ipa[1]
    m=ipa[2]


    # A partir de là, je calcule l'ensemble des adresses IP pour une plage.

    for addr in ipaddr.IPNetwork(t + '/' + m).iterhosts(): addr
    Quand j'éxécute cette boucle, il m'affiche ce message d'erreur:

    Traceback (most recent call last):
    File "<pyshell#216>", line 1, in <module>
    for addr in ipaddr.IPNetwork(t + '/' + m).iterhosts(): addr
    File "/usr/local/lib/python2.6/dist-packages/ipaddr.py", line 116, in IPNetwork
    address)
    ValueError: ' 194.254.113.0 / 255.255.255.0\n' does not appear to be an IPv4 or IPv6 network
    Je suppose que ce message apparait parce qu'il y a un espace devant le contenu de ma variable "m" (masque) (verifier par un print). Pour remédier à ce problème, j'ai fait un split de la variable "m" mais un autre message d'erreur apparait en me disant qu'il n'est pas possible de concaténer une chaine de caractère et une liste.

    Je bloque sur ce petit point, si quelqu'un a une solution ?

    Merci

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Ce n'est pas split qu'il te faut pour cela mais strip, qui enlèvera d'ailleurs aussi le '\n' à la fin de la ligne.

    Attention ton code n'est pas très propre; le fonction ip utilise arg comme une variable globale (mais passe liste en argument...). De plus liste n'est pas une liste mais un fichier et ip ne renvoie pas une ip mais un string qui représente un réseau.

    Je suggère ceci:

    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
    import ipaddr
     
    F_RESEAUX = '/home/kevin/liste'
     
    def sous_reseau(grp):
        """Retourne le sous-réseau correspondant à un groupe donné
        dans le fichier F_RESEAUX, ou None si aucune correspondance
        n'est trouvée"""
        with open(F_RESEAUX) as f:
            for line in f:
                if line.starts_with(grp):
                    _, ip, masque = [s.strip() for s in line.split(':')]
                    return ipaddr.IPNetwork(ip + '/' + masque)
        return None
     
    grp = raw_input('Entrez un nom de groupe: ')
    net = sous_reseau(grp)
    if net:
        for addr in net.iterhosts():
            print addr

  8. #8
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Merci pour l'aide sur la syntaxe. Donc j'ai essayé ton code, pas de souci jusqu'au moment de retourner les adresses IP de la plage (boucle for), j'ai ce message qui apparait mais je ne vois pas d'où ça pourrait venir et pour l'instant je ne trouve rien sur Internet.

    Traceback (most recent call last):
    File "<pyshell#324>", line 2, in <module>
    for addr in net.interhosts():
    AttributeError: 'IPv4Network' object has no attribute 'interhosts'
    PS: tu as fait une petite erreur, ce n'est pas "starts_with" mais "startswith"

  9. #9
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Rectification ! la boucle "for" fonctionne correctement, désolé.

  10. #10
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Sinon j'ai regardé et testé ton code, il y a quelque petites choses que je n'ai pas bien compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import re
     
    dhcp_data = open(net_file).read()
    reserved = re.findall("host\s+\w+\s+\{[^\}]*?fixed-address\s+(\d+(?:\.\d+){3})", dhcp_data)
    Pour celui, est-ce que tu me confirmes qu'il récupère une ou plusieurs adresse IP dans le fichier passé en paramètre dans "dhcp_data"?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    reserved = [IPv4Address(ip) for ip in reserved] # <-- peut-être pas nécessaire
    net = IPv4Network("193.49.106.0/24")
    for ip in net:
        if ip in (net.network, net.broadcast): continue
        if ip not in reserved: break
    else:
        raise Exception("Toutes les adresses sont reservées")
    print ip, "est dispo"
    Ensuite j'ai testé ce deuxième bout de code, donc ok de ce côté il fonctionne (résultat: 193.49.106.0 est dispo). Par contre, lorsque j'ai réservé cette adresse IP dans mon fichier 193.49.106.0.net et que je réexécute le code, il me dit que cette adresse est disponible alors qu'il devrait m'afficher une autre adresse IP.

    As-tu une explication à cela?

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    L'expression régulière récupère les IP dans le fichier mais uniquement celles qui se présentent dans une structure particulière. Informellement, il retrouve la structure suivante et ne garde que l'adresse IP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    host XXXX { XXXX fixed-address A.B.C.D
    où XXXX peut-être plus ou moins n'importe quoi et A.B.C.D est l'adresse IP.

    Si certaines adresses ne se retrouvent pas sous cette forme, il faut adapter l'expression régulière.
    Ensuite j'ai testé ce deuxième bout de code, donc ok de ce côté il fonctionne (résultat: 193.49.106.0 est dispo)
    Hum c'est très étrange; la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ip in (net.network, net.broadcast): continue
    est censé passer l'adresse de réseau (193.49.106.0 dans cet exemple) et l'adresse de broadcast (193.49.106.255). La réponse aurait donc du être 193.49.106.1...

  12. #12
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Oups pardon c'est moi qui est fait une petite erreur de frappe, le résultat renvoyé est bien l'adresse 193.49.106.1.

    En ce qui concerne le problème, as-tu une explication?

    Par contre, lorsque j'ai réservé cette adresse IP dans mon fichier 193.49.106.0.net et que je réexécute le code, il me dit que cette adresse est disponible alors qu'il devrait m'afficher une autre adresse IP.

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Comme l’a dit divide , j’ai pensé au début
    C'est certainement pas bien compliqué, mais je n'ai pas tout compris.


    Puis voyant le développement de la file, je me suis dit que ce devait ête effectivement un peu plus compliqué que ce que je croyais.



    Mais voyant ce problème trainer en longueur, j’ai fini par regarder d’un peu plus près, et.... j’en arrive à penser qu’il y a quelque chose qui ne va pas là dedans.





    Tu ne connais pas les expressions régulières.
    Bon, ce n’est pas grave en soi, ce n’est pas une science infuse, mais...
    dividee introduit une expression régulière le 19 avril.
    Deux jours après:
    est-ce que tu me confirmes qu'il récupère une ou plusieurs adresse IP dans le fichier passé en paramètre dans "dhcp_data"?
    En deux jours tu devrais faire le minimum qu’il faut pour arriver à le déterminer toi même.
    Il me semble que quand on fait un code, surtout en tant que stagiaire, on doit s’efforcer d’acquérir au moins la compréhension de TOUS les composants du code. Et donc on regarde immédiatement un minimum comment fonctionne le bazar. Toi, tu sembles ne t’intéresser au sujet que parce que ça ne marche pas.
    De mon point de vue, dans un code fait en satge, si on ne maîtrise pas une solution, on l'élimine et on se débrouille autrement.





    Tu ne connais pas les fonctions de traitement des chaînes : ex. strip.
    Bon , là aussi ce n’est pas une tare congénitale.
    Mais s’intéresser aux fonctions de traitement de chaînes comme préalable, pour en avoir une idée, sans dépendre de quelqu’un qui va nous dire à quelle fonction il faut penser,
    est là aussi un minimum pour concevoir ce qu’on va bien pouvoir mettre en place pour traiter des chaînes. Donc manque d’intérêt semble-t-il pour chercher soi même et se donner les bases. Quand même, les bases ! Il faut bien les acquérir à un moment non ? Et pas saupoudrées quand le besoin s’en fait sentir.





    Dans le regsitre de la méthodologie de développement encore, je remarque qu’il passe 5 jours entre le premier message où tu dis disposer du module ipaddr et le moment où tu relates qu’une malheureuse boucle de deux lignes ne marche toujours pas.

    Au passage je trouve légèrement inquiétant que tu n’arrives pas à comprendre la nature du problème signalé par
    ValueError: ' 194.254.113.0 / 255.255.255.0\n' does not appear to be an IPv4 or IPv6 network
    C’est lié à la précédente insuffisance sur les chaînes.







    De plus, dans le premier message, ta présentation était insuffisante pour cerner le problème, ça a appelé une batterie de questions de la part de dividee. J’ai eu la flemme, mais j’ai failli poser les mêmes.
    Ce que je veux dire, c’est que cette insuffisance d’exposition traduit bien d’une part que la demande portait sur l’ensemble de ton problème et pas un point particulier, et d’autre part que tu as du mal à maîtriser les choses.

    Difficulté confirmée par
    Rectification ! la boucle "for" fonctionne correctement, désolé.
    Oups pardon c'est moi qui est fait une petite erreur de frappe, le résultat renvoyé est bien l'adresse 193.49.106.1.
    Quand même.... A quand la prochaine fois ?

    Je me demande d’ailleurs si la question que tu réitères dans le dernier message ne serait pas cette troisieme fois:
    Car si
    Ensuite j'ai testé ce deuxième bout de code, donc ok de ce côté il fonctionne (résultat: 193.49.106.0 est dispo). Par contre, lorsque j'ai réservé cette adresse IP dans mon fichier 193.49.106.0.net et que je réexécute le code, il me dit
    maintenant
    le résultat renvoyé est bien l'adresse 193.49.106.1.
    où est le problème ? N’est ce pas encore une erreur et un artefact de problème dans ta tête ?






    Et donc avec les derniers messages, voyant combien ton problème avance lentement et laborieusement, ça donne l’impression d’un développement dans lequel tu n’arrives pas à avancer tout seul sans obtenir sucessivement des composants, comme de la part d’un sous-traitant.

    Ça pose quand même un problème je trouve. Si tu as des blocages, le principe ne devrait il pas être de t’adresser à ton maître de stage ?

    Obtenir plus que des tuyaus, en fait un co-développement, de ton problème n’est pas sain. Arrivé au bout le maître de stage aura une vision faussée de tes capacités.



    ----------------------------



    Cependant je me demande si tu n'as pas une excuse et si les difficultés que tu as ne seraient pas dues au fait que tout en étant débutant en Python, on t’ait demandé de travailler avec le module ipaddr.py qui est si médiocre qu’il a été retiré l’an dernier de Python 3.1 release candidate, procédure tout à fait inhabituelle.

    Python and ipaddr.py June 17, 2009

    Pour quoi t'a-t-on donné un sujet pareil ? Ton maître de satge est il bien compétent dans son rôle ? C’est aussi des questions à se poser parfois.




    En tous cas, heureusement que tu as dividee pour te répondre, car je trouve que de ton coté ça pédale un peu dans la semoule.

  14. #14
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    OK au moins c'est clair et tu dis ce que tu penses (ce qui est bien).
    Je sais très bien que je ne suis pas super compétent en python et que cela se voit dans mes messages.

    Juste pour info, j'ai débuté le python et plus généralement le dévéloppement mi-mars d'où ces questions qui peut vous paraître bêtes.

    Tu as peut être l'impression que j'attends les réponses des membres de ce forum mais j'essaye de faire de mon mieux et d'avancer tout seul. Mais faut pas être imbécile, quand on ne sait pas, il faut demander de l'aide. Et justement grâce aux précieux conseils et/ou solutions donnés par les membres, j'ai pu apprendre des choses intéressantes et que je commence à maîtriser quelques éléments.

    En ce qui concerne mon maître de stage, il ne connait pas python et c'est justement pour ça que je suis en stage. Il m'aide comme il peut et est pas mal occupé.

    Pour la partie dhcp_data, je posais la question pour confirmer ce que je pensais, avant de poster le message, j'ai demandé à mon maître de stage qu'il m'explique mais il n'avait pas de réponse à me fournir.

    Je sais très bien que j'ai de la chance que dividee prenne du temps pour me répondre et je le remercie d'ailleurs pour ça.

    Pour le choix du module, je n'y suis pour rien, peut être pourrais-tu m'en conseiller un? (j'ai remarqué l'existence du module netaddr).

    Pour les messages que j'ai posté en signalant que c'était des erreurs de ma part, il faut savoir être compréhensible de temps en temps, après tout l'erreur est humaine, non?

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Ah d’aaacÔrd...
    La situation est en effet un peu spéciale. Il y a cumul:
    - Python et dev commencé mi-mars, tes difficultés sont à mon avis tout à fait normales
    - un module ipaddr.py qui n’est pas parfait
    - un maître de stage qui ne connaît pas Python et qui est très occupé
    Je pense que tu as des excuses.
    il faut savoir être compréhensible de temps en temps
    Compréhensif plutôt. Mais oui, j’essaie la plupart du temps, mais des fois je m’énerve un peu. C’est tombé sur toi , pardon.

    Il faut dire que le coup du maître de stage qui ne connaît pas Python, ça me scie. Enfin bon, je ne me suis pas trompé en sentant que quelque chose clochait.
    Si en plus il n’a pas le temps, je me demande si tu ne devrais pas te méfier un peu.
    Cette situation étant telle, je pense qu’il faut au contraire qu’on t’aide plus spécialement, et je suis partant aussi, mais bon, avec dividee, t’es pas mal tombé


    Tu as peut être l'impression que j'attends les réponses des membres de ce forum
    Ce n’est pas exactement ça. Je pense que tu n’aurais pas dû traiter tout de front, mais traiter l’un après l’autre: obtention des données à partir d’un fichier, calculs d’un ensemble d’ip, détermination des ip libres. Une progression plus ordonnée, et en revenant sur ce forum dès que tu es bloqué au lieu de donner l’impression de te contenter d’intégrer des éléments mal digérés. En fait, c’est parce que tu as essayé de « faire de ton mieux et d'avancer tout seul » que je suis en train de faire la critique contraire de celle que tu croyais... raah.





    Bon, c’est bien que tu n’aies pas trop mal pris ce que j’ai écrit.
    Qu’est ce qu’on peut faire pour t’aider maintenant ?
    Je ne connais pas ipaddr ni autre calculeurs d’ips.
    Je vais essayer de regarder un peu, mais je n’ai pas trop le temps de me plonger dans des choses compliquées.


    J’ai téléchargé le module ipaddr. Impressionante longueur. Est-ce que tu as vraiment besoin d’utiliser ce module pour faire ton programme qui me semblait simple au départ.
    La solution ne serait elle pas de créer toi même une fonction qui fera ce que tu demandes actuellement à ipaddr ?
    Je regarde un peu le problème.

  16. #16
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonsoir,

    ipaddr.py a visiblement évolué depuis son éviction de la librairie standard. Il n'y a plus de classe IPv4 (ou IPv6) et elle distingue bien à présent une adresse IP d'un réseau IP, ce qui adresse le principal reproche qui lui était fait. Cela dit, je ne vais pas prendre le temps de l'étudier en détail pour voir ce qu'elle vaut...

    D'ailleurs en la parcourant je constate que la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ip in (net.network, net.broadcast): continue
    dans mon code n'est en fait pas nécessaire. Le méthode iterhosts exclut déjà ces adresses.

  17. #17
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Pour m'aider, il n'y a pas grand chose à faire à part essayer de répondre à mes questions quand je bloque, tout simplement.

    Pour l'utilisation du module ipaddr, il n'est pas obligatoire en soi mais mon maître de stage souhaite que je manipule le moins possible de fichiers, j'avais déjà fait un script répondant à ma problèmatique mais il trouvait justement que je manipulais trop de fichiers et m'a donc proposé ce module.

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Pour m'aider, il n'y a pas grand chose à faire à part essayer de répondre à mes questions quand je bloque, tout simplement.
    Oui. Quelles questions restent elles ?

    Suite à ton message #12 et à l’information de dividee que le module ipaddr a été corrigé depuis l’article de l’an dernier, il me semble le mieux de garder ipaddr et que donc ton code ne doit pas être loin de tourner correctement.

    Est-ce le cas ? Sinon quel problème y a-t-il ?

  19. #19
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Oui, en effet le code est presque fonctionnel. Le hic, c'est que le script me dit que l'adresse 193.49.106.1 est dispo alors qu'elle est réservée. Donc en ce moment, je planche dessus pour tenter de résoudre le problème.

  20. #20
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 38
    Par défaut
    Bonjour,

    J'ai refait mon script pour réserver une adresse IP à cause d'un changement de la part du responsable donc contrairement à mon script précédent, ce dernier vérifie si une adresse est libre ou non. J'arrive également à sortir les adresses ip d'une plage mais je n'arrive toujours pas à comparer une adresse avec une autre.

    Si quelqu'un à une solution ou une piste à me fournir.

    Voici mon code:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #!/usr/bin/python
     
    # -*-coding:UTF-8 -*
     
    import optparse,sys,os,re, datetime, ipaddr
     
    #admin='/home/kevin/named2/hosts/admin'
    F_RESEAUX = '/home/kevin/liste'
     
     
    #Fonction qui permet d'afficher les adresses IP d'une plage
    def sous_reseau(grp):
        """Retourne le sous-réseau correspondant à un groupe donné
        dans le fichier F_RESEAUX, ou None si aucune correspondance
        n'est trouvée"""
        with open(F_RESEAUX) as f:
            for line in f:
                if line.startswith(grp):
                    _, ip, masque = [s.strip() for s in line.split(':')]
                    return ipaddr.IPNetwork(ip + '/' + masque)
        return None
     
     
    #Fonction qui permet de vérifier si une adresse IP est réservée ou non dans le serveur #DNS
    def check(adresseip): 
        fic = open('/home/kevin/named2/hosts/admin', "rb") 
        memo = fic.readlines()
        fic.close()
        for i in memo:
            beginI = i.find(adresseip)
            if beginI != -1:
                print "IP existe deja"
                print adresseip
     
     
     
    grp = raw_input('Entrez un nom de groupe: ')
    net = sous_reseau(grp)
    result = []
     
    #Appel de la fonction sous_reseau(grp)
    if net:
        for addr in net.iterhosts():
    	result.append (addr)
     
     
    result.__str__
     
     
    #Appel de la focntion check
    for une_ip in result :
     
        check(str(une_ip))

Discussions similaires

  1. Comparaison dans un fichier en cours de lecture
    Par CrissCross51 dans le forum Général Python
    Réponses: 3
    Dernier message: 11/04/2011, 09h04
  2. Réponses: 6
    Dernier message: 15/05/2008, 15h20
  3. Réponses: 2
    Dernier message: 29/04/2007, 20h43
  4. [2003] comparaison dans un fichier texte
    Par souaddemaroc dans le forum VB.NET
    Réponses: 14
    Dernier message: 09/02/2007, 09h28
  5. Réponses: 4
    Dernier message: 16/12/2005, 17h43

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