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 :

Connexion à Tor via Python


Sujet :

Réseau/Web Python

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut Connexion à Tor via Python
    Bonjour à tous !

    Je développe en ce moment une application qui doit se connecter anonymement à des sites internet, en pouvant changer d'ip à chaque connexion, c'est pourquoi j'aimerai utiliser le réseau Tor qui remplit ces conditions. J'ai donc téléchargé Tor Browser. J'aurais besoin de me connecter avec une IP de TOR, en HTTP, à un site (prenons google comme exemple). Ensuite, je dois télécharger la page sous la forme d'une str (ou bytes) contenant le code HTML, j'extrais un ou plusieurs liens sur la page (ça, je sais faire) et je m'y connecte.
    Je me demandais juste s'il était possible, et si oui comment, d'écrire un code qui automatise ces connexions car je dois le faire pas mal de fois.
    Je tiens à préciser que j'ai effectué pas mal de tentatives avec différents codes fournis sur internet mais ils ne marchaient pas, même en adaptant avec python 3, je me retrouve pour la plupart des trucs que j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>>u = urllib2.urlopen(url)
    urllib.error.URLError: <urlopen error [WinError 10061] Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée>
    Je ne comprends pas pourquoi ça ne marche pas, ça a l'air de bien marcher pour ceux qui ont posté le code.

    Merci d'avance !
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Bonjour,

    Tu devrais utiliser une bibliothèque spécifique à python, comme stem par exemple...

    Existe pour la version 2.x et 3.x.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Merci beaucoup, c'est ce qu'il me faut. Mais j'ai toujours un problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from stem.control import Controller
     
    with Controller.from_port(port = 9051) as controller:
      controller.authenticate()  # provide the password here if you set one
     
      bytes_read = controller.get_info("traffic/read")
      bytes_written = controller.get_info("traffic/written")
     
      print ("My Tor relay has read %s bytes and written %s." % (bytes_read, bytes_written))
    input()
    Et j'obtiens (encore) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Traceback (most recent call last):
      File "C:\Documents and Settings\Anne Marie\Bureau\Programmation HTML\TOR\Tor avec stem.py", line 3, in <module>
        with Controller.from_port(port = 9051) as controller:
      File "C:\Program Files\Python scriptor\lib\site-packages\stem\control.py", line 659, in from_port
        control_port = stem.socket.ControlPort(address, port)
      File "C:\Program Files\Python scriptor\lib\site-packages\stem\socket.py", line 314, in __init__
        self.connect()
      File "C:\Program Files\Python scriptor\lib\site-packages\stem\socket.py", line 187, in connect
        self._socket = self._make_socket()
      File "C:\Program Files\Python scriptor\lib\site-packages\stem\socket.py", line 343, in _make_socket
        raise stem.SocketError(exc)
    stem.SocketError: [WinError 10061] Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Une solution ?
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    J'ai vu qu'il se connectait à "localhost", or ça refuse la connexion, je ne comprends vraiment pas ce qui se passe, ça a l'air de marcher pour les autres sur les exemples. Quelqu'un a une idée de ce qu'il faut faire ?
    J'avais tenté de mettre l'argument address avec l'ip de sites web et aussi l'ip de différents serveurs de TOR mais ça ne marche pas. Avez-vous une explication ? j'avoue que j'ai du mal à comprendre l'intérêt de se connecter à son propre ordinateur pour avoir un relais TOR pour nos données, mais bon...
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Salut, je ne suis pas spécialiste de Tor mais il me semble que l'application généré un proxy type Socks5 (sous linux c'est sur le port 9050). Il faut que tu utilise privoxy ou un autre soft du genre pour créer un proxy http et l'utiliser avec urllib. Sinon c'est normale de te connecter sur 127.0.0.1.
    Pour finir le message d'erreur que tu obtiens signifie que tu essais de te connecter sur un port non ouvert.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Merci pour la réponse. Mais comme l'indique ce topic juste en dessous, j'ai justement des problèmes pour me connecter à un proxy... peut-être que le problème vient de là.
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2013
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Après quelques recherches, voici les quelques solutions que je peux te proposer (en fonction de ce que fait ton programme) :
    - La solution de facilité qui est d’exécuter python en argument de torsocks mais ça t'oblige à utiliser uniquement Tor pour toutes les connections de ton programme.
    - Si tu utilise directement les socket dans ton programme (si tu gère toi même, en dur, les protocoles que tu utilises) tu peux regarder du coté de https://github.com/Anorov/PySocks
    - La 3eme solution ne permet que du web et utilise le proxy Tor via le module request :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if is_open('https://github.com/shazow/urllib3/pull/68'):  # ;)
        import requesocks as requests
    else:
        import requests
     
    session = requests.session()
    session.proxies = {'http': 'socks5://127.0.0.1:9050',
                       'https': 'socks5://127.0.0.1:9050'}
    resp = session.get('https://api.github.com', auth=('user', 'pass'))
    Pour finir, il semble que le port que tu essais d'utiliser n'est pas ouvert. Tu devrais vérifier si Tor est bien lancé (sans erreurs dans les logs) et quel port est configuré dans le fichier torrc.

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    L'erreur 10061 semble avoir des solutions, faudrait chercher, je connais pas stem

    Évidemment je considère que ton port 9051 n'est pas bloqué
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    C'était en réalité un simple problème de n° de port : mon tor, je ne sais pas pourquoi, était configuré pour utiliser le port de contrôle 9151, or j'utilisais le mauvais. Pourtant j'avais changé la configuration... Quoi qu'il en soit, la réponse était dans torrc-defaults :
    # applications.
    SocksPort 9150
    ControlPort 9151
    J'ai réussi à obtenir une connexion, je cherche maintenant quelle est la manière la plus simple d'effectuer une requête http. Je n'arrive malheureusement pas à trouver d'exemple en python 3. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from stem.control import Controller
    from stem import Signal
     
    with Controller.from_port(port = 9151) as controller:
      controller.authenticate()  # provide the password here if you set one
     
      bytes_read = controller.get_info("traffic/read")
      bytes_written = controller.get_info("traffic/written")
     
      print ("My Tor relay has read %s bytes and written %s." % (bytes_read, bytes_written))
    Merci pour vos réponses nombreuses !
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

Discussions similaires

  1. CONNEXION ORACLE VIA PERL
    Par bouda27 dans le forum Oracle
    Réponses: 1
    Dernier message: 07/04/2006, 17h06
  2. connexion à PHPMySQL via jdbc
    Par sjtraore dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/02/2006, 18h18
  3. Souci de connexion internet via PPPoE sous Knoppix
    Par Anomaly dans le forum Réseau
    Réponses: 11
    Dernier message: 23/09/2004, 20h38
  4. [linux] connexion LAN via ethernet - ping passerelle KO
    Par CLB dans le forum Développement
    Réponses: 5
    Dernier message: 26/03/2004, 14h40
  5. Erreur de connexion à PostGresql via pgAdminII
    Par LS dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 21/08/2003, 09h51

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