Annonce

Réduire
Aucune annonce.

[Ebook] Hacking et Forensic Développez vos propres outils en Python.pdf

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

  • #16
    T'es pas trop vieux pour télétubbies ?!

    Merci, ça marche!
    Mad Hacker

    Commentaire


    • #17
      J'ai hâte de le lire

      Commentaire


      • #18
        super

        Commentaire


        • #19
          Merci beaucoup rowe pour avoir déterré ce sujet. Cela m'a bien fait rire. Je m'explique :

          J'ai commencé à lire l'ouvrage et lu les premiers scripts en Python. Oui, Python. Cela fait longtemps que je me dis que je devrais regarder un peu ce langage très usité et en particulier dans les exploits (non sans oublier la tonne de logiciels écrits avec Python).
          J'ai donc pris l'un des premiers scripts fournis (je l'ai quelque peu adapté car j'ai un serveur NGINX en local) :
          Code:
          import socket
          s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          s.connect(('localhost', 80))
          s.send("GET /index.html\r\n\r\n")
          d = s.recv(2048)
          print d
          s.close()
          Code:
          % python2.7 pysc.py
          Et ça marche ! Cool. Mais Python 2 est mort depuis l'an dernier si je ne me trompe pas. Alors, ça donne quoi avec Python 3 ?
          Code:
          % python3.7 pysc.py
          File "pysc.py", line 6
          print d
          ^
          SyntaxError: Missing parentheses in call to 'print'. Did you mean print(d)?
          Hum... print (d) alors ?
          Code:
          % python3.7 pysc.py
          Traceback (most recent call last):
          File "pysc.py", line 4, in <module>
          s.send("GET /index.html\r\n\r\n")
          TypeError: a bytes-like object is required, not 'str'
          Alors, la première erreur est juste due à des parenthèses qui manquent ? J'y reviendrai...
          La fonction send() attend une suite d'octets.. Une chaîne de caractères n'est-elle pas une suite d'octets ?
          Ouai, pas tout à fait. Cela dépend de l'encodage des dits caractères...
          Alors, on le refait :
          Code:
          import socket
          s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          s.connect(('localhost', 80))
          s.send("GET /index.html\r\n\r\n".encoding('utf-8'))
          d = s.recv(2048)
          print (d)
          Et, miracle, ça marche !

          Où est la chute me direz-vous ? Ben, en fait que ce code modifié pour Python 3 marche parfaitement pour Python 2. L'inverse n'étant pas vrai, pas vrai du tout.

          Alors que la plupart des langages tendent vers la rétro-compatibilité (avec plus ou moins de succès), les développeurs de Python ont - pour ainsi dire - inventé l' Ante-compatibilité. A savoir que python 2 peut exécuter certains morceaux de Python 3 mais pas l'inverse.

          A commencer par générer une erreur parce qu'il n'y a pas de parenthèses autour de la fonction print. Franchement... Ils n'avaient que ça à faire ? Comment foutre en l'air des millions de lignes de code sur une envie grotesque d'épurer le code Python en général.

          Je ne veux pas aller très loin dans la comparaison mais PHP n'a jamais fait telle chose. Et, en ce qui me concerne, je veux dire ce que je connais le mieux, C++ (nouvelles versions) se contente d'avertissements la plupart du temps, laissant le code se compiler (et donc s'exécuter).

          Bref... Cela me dissuade d'apprendre Python. Déjà que je n'y voyais que peu d'intérêt...

          Commentaire

          Chargement...
          X