Annonce

Réduire
Aucune annonce.

Scanner de ports en python

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Scanner de ports en python

    J'essaye de reprendre petit a petit l'apprentissage du python en reprenant les cours de Fred et quelques cours réseau disponible sur le web

    Code:
    import socket  # importation du module 
    timeout = 0.01
    socket.setdefaulttimeout(timeout)
    
    host = input("Adresse Ip: ")
    
    for y in range(1, 65535):
        x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# création de la socket nommé x avec deux arguments famille/type de socket
        if x.connect_ex((host, y)) == 0:
            print (("Port %s ouvert") % (y))
            x.close()
    Question: je ne comprend pas la différence entre "socket.connect(address)" et "socket.connect_ex(address)", d’après la doc socket.connect_ex(address) renvoie une erreur, mais j'ai du mal a comprendre

    c'est un scanner vraiment basique pour le moment, je débute , je pense avec le temps l’améliorer pour savoir quels sont les services utilisé sur les différents ports ouverts.
    Dernière modification par pl3x, 27 mars 2015, 18h28.

  • #2
    Je suis pas du tout un expert en Python, très loin de là, mais je vais essayer de te répondre au mieux en attendant les experts

    La documentation nous explique que connect renvois les erreurs de connexion via des exceptions (donc le bloc try...except en python), alors que connect_ex renvoi seulement false en cas de d'erreur, et tu peux pas vraiment en savoir plus sur l'erreur...

    Perso j'utiliserais pas les exceptions pour un code comme ça, on s'en fout de capturer les erreurs, qui seront plus courantes d'ailleurs que les réussites de connexion...donc connect_ex comme tu le fait


    Après c'est que ce que je viens de comprendre, je suis vraiment pas expert en Python...

    Commentaire


    • #3
      Techniquement, en python c'est du try-except

      Pour connect

      Code:
      try:
          # suite traitement
      except:
          raise ...
      Pour connect_ex

      Code:
      try:
          # suite traitement
      except:
          return -1 # par exemple
      Là où ça fait la différence, c'est que dans la situation du connect, si une erreur se produit, ça interrompt brutalement le programme, alors que dans l'autre cas avec connect_ex, tu gères ton erreur en interne en ayant la possibilité de continuer le programme.

      Commentaire


      • #4
        je continue mon petit script, mais j'ai du mal a comprendre pourquoi ça fonctionne que en local

        Code:
        import socket,sys
          
        timeout = 0.01
        socket.setdefaulttimeout(timeout)
        
        host = input("Adresse Ip: ")
        p = (socket.gethostbyaddr(host))
        print (("\n Host:"),(p),("\n"));
        try:
            for y in range(1, 600):
                x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                if x.connect_ex((host, y)) == 0:
                    print (("Port %s ouvert") % (y),(socket.getservbyport(y)))
                    x.close()
        except socket.gaierror:
                print ('\n Erreur, Host non valide, Recommencez')
                sys.exit()
        si juste vous pouvez me donner un indice, pour que je comprenne pourquoi ca fonctionne que en local.

        @fred est ce que tu a une idée pour implémenter une fonction fingerprinting sur mon scanner, mis a part ca, je ne vois pas beaucoup de solution, merci
        Dernière modification par pl3x, 11 juillet 2015, 00h24.

        Commentaire


        • #5
          @fred est ce que tu a une idée pour implémenter une fonction fingerprinting sur mon scanner, mis a part ca, je ne vois pas beaucoup de solution, merci
          Si c'est pour observer le traffic sur le serveur, dans ce cas tu peux utiliser psutil comme cet exemple...

          si juste vous pouvez me donner un indice, pour que je comprenne pourquoi ca fonctionne que en local.
          As-tu testé le mien, je n'ai guère de temps pour tester le tiens à cette heure-ci ?

          Commentaire


          • #6
            Salut ,

            C'est possible que ton timeout soit trop bas , tu l'as mis 0.01 ,
            j'avais test aussi chez moi et çà ne fonctionnait pas (avec mon script), donc j'ai fait plusieurs test en partant de 0.01 en incrémentant de 0.01 a chaque fois et chez moi ça fonctionne avec 0.9 pas plus bas

            moi aussi suis en plein apprentissage ^^

            ps: Après avoir testé ton script , il fonctionne avec un timeout a 0.9
            Dernière modification par blend, 11 juillet 2015, 14h34.

            Commentaire

            Chargement...
            X