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 :

[Script] Scan de réseau


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 46
    Par défaut [Script] Scan de réseau
    Bonjour à tous,

    Je rencontres un petit soucis dans le cadre d'un script.

    Celui ci à pour but de scanner une plage d'adresses IP afin de retourner le nom de domaine correspondant grace à un socket.gethostbyaddr(ip).

    J'ai donc une variable de type liste 'list' (list = [192.9.202.1, 192.9.202.2, ...] avec toutes les IP, voici comment je fonctionnes (j'utilise le threading pour que les requêtes soit effectué simultanément) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for x in list:
        t=threading.Thread(target=scan, args=(x,))
        t.start
     
    def scan(ip):
        try:
            name,alias,addresslist = socket.gethostbyaddr(ip)
            final = final.append(ip + ' <-> ' + name)
        except socket.herror:
            final = final.append(ip + ' <->  Aucune reponse')
    Je me retrouves donc avec une liste 'final' contenant les résultats des requêtes. Après sa, je créé un document excel qui liste tout sa ... Mon problème vient ici, car les ip ne sont pas en ordre croissant ...

    Comment est il possible d'enregistrer les résultats, tout en liant l'ip + name et de pouvoir réorganiser sa avec les adressis ip par ordre croissant ? Dictionnaire ? Tuple ? N'ayant pas trop utilisé ceux ci je vous avou être en difficulté ...

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Donne un exemple de la liste 'avant', et le résultat que tu souhaites 'après'.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 828
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BUENOO Voir le message
    Comment est il possible d'enregistrer les résultats, tout en liant l'ip + name et de pouvoir réorganiser sa avec les adressis ip par ordre croissant ? Dictionnaire ? Tuple ? N'ayant pas trop utilisé ceux ci je vous avou être en difficulté ...
    Salut
    Moi je passerais par un dictionnaire de type "ip" => "name".
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    final={
        "127.0.0.1" : "localhost",
        "158.55.42.123" : "www.truc.com",
        "222.41.77.30" : "www.chose.com",
    }

    Ensuite, en utilisant sorted(final.keys(), fct) ça te donnerait les IP par ordre croissant (à toi de programmer la fonction "fct" pour que sorted connaisse ta façon de comparer 2 IP) ce qui amènerait automatiquement les noms associés...
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def fct(ip1, ip2):
        if ip1 < ip2: return -1
        if ip1 > ip2: return 1
        return 0
        # Bien entendu à toi d'écrire le vrai code permettant de comparer 2 IP
    # fct()
     
    for k in sorted(final.keys(), fct):
        print "ip:[%s] => [%s]" % (k, final[k])
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    pour trier de l' ip, le plus simple est de s'arranger pour le faire en mode texte, mais en formatant les ips. Par exemple trier '127.0.0.1' et '127.255.0.0' ne donnera pas forcément le même résultat que trier '127000000001' et '127255000000'. En python on a hérité du printf du C, le "f" de printf signifiant format.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    text = "%03u%03u%03u%03u"%(127, 0, 0, 1)
    print text
    Il y a également une méthode split qui se révèle très utile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    words = '127.0.0.1'.split('.')
    print words
    Avec ça, tu devrais t'en sortir

    A+

    Pfeuh

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 46
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Alors voilà comment ma liste est construite :
    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
     
    #Recuperation des donnees (ip debut et ip fin)
    debut = raw_input('Ip du debut de la plage a scanner : \n')
    fin = raw_input('Ip de la fin de la plage a scanner : \n')
     
    #Separation des ip par les points 192.9.200.1 = '192', '9', '200', '1'
    d_split = debut.split('.')
    f_split = fin.split('.')
     
    #Creation d'une ip de base 192.9.200
    base = '.'.join(d_split[0:3])
     
    #Creation list vide pour reception des ip a scanner
    list = []
    i = int(d_split[3])
     
    #Listing et ajout des ip a scanner dans list
    while i <= int(f_split[3]):
    			list.append(str(base) + '.' + str(i))
    			i += 1
    Sa me donne donc par exemple : list = ['192.9.202.1','192.9.202.2','192.9.202.3','192.9.202.4',.....]

    La solution de Svear est ce que je recherches je penses. Le but étant simplement de pouvoir réorganiser les IP une fois qu'un nom lui à été attribué par la requête.
    Par exemple pour réorganiser une liste comme celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final= {
        "192.9.202.15" : "Toto.domaine",
        "192.9.202.11" : "Stagiaire.domaine",
        "192.9.202.8" : "Thomas.domaine",
        "192.9.202.5" : "Benjamin.domaine",
    }
    De sorte que sa donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final = {
        "192.9.202.5" : "Benjamin.domaine",
        "192.9.202.8" : "Thomas.domaine",
        "192.9.202.11" : "Stagiaire.domaine",
        "192.9.202.15" : "Toto.domaine",
    }
    Je vais regarder sa cette après midi dès que j'ai le temps et je me retournes vers vous pour vous tenir informer.

    Merci bien.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Pour info.

    Python 3.3 vient avec le module "ipaddress" - ce module doit pouvoir être installé sur des versions antérieures. Il contient des tas de fonctions pour convertir des adresses IPv4 et v6 dans tous les sens.

    Si vous voulez convertir des adresses IP en entiers (et les ranger par ordre croissants par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> int(ipaddress.IPv4Address('192.168.1.0'))
    3232235776
    Réciproquement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> ipaddress.IPv4Address(3232235776)
    IPv4Address('192.168.1.0')
    D'un autre côté, une plage d'adresse IP est généralement associé à un s/réseau "192.168.1.0/24" et les numéros 1.255 sont des numéros de host dans ce s/réseau.
    => ranger par s/réseau puis par numéro de "host" est une autre façon de faire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Intéressant, merci wiztricks.

    Il s'agit en fait de convertir en décimal un nombre écrit en base 256, et vice versa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x1, x2, x3, x4 = 192, 168, 1, 0
    print x4 + x3*256 + x2*256**2 + x1*256**3
    3232235776
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    x = 3232235776
    x, x4 = divmod(x, 256)
    x, x3 = divmod(x, 256)
    x, x2 = divmod(x, 256)
    x1 = x
    print x1, x2, x3, x4
    192 168 1 0

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

Discussions similaires

  1. Batch script de mappage réseau
    Par user2010 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 27/04/2010, 17h03
  2. Script de configuration réseau Debian
    Par leoph dans le forum Réseau
    Réponses: 4
    Dernier message: 13/08/2009, 14h52
  3. envoi script sur un réseau
    Par shyx21 dans le forum Développement
    Réponses: 1
    Dernier message: 20/05/2008, 17h39
  4. [XP Pro] Script modification paramètres réseau
    Par lidouka dans le forum Administration
    Réponses: 4
    Dernier message: 10/03/2007, 22h03

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