Python Tor torrequest / stem сделать запрос на получение из указанной c страны - PullRequest
0 голосов
/ 31 января 2020

Я работаю над веб-сканером, чтобы сгенерировать веб-трафик c, подумал, что мне понадобится использовать tor (reset_identity ()) после того, как я зайду на нужный веб-сайт. Также мне нужно мое соединение для выхода через Германию специально. Я работал с парой библиотек (stem и torrequest), каждая из которых зашла в тупик ...

import torrequest
import requests

with torrequest.TorRequest(password=None) as tr:
    response = requests.get('http://ipecho.net/plain')
    print("My Original IP Address:", response.text)

    tr.reset_identity()  # Reset Tor
    response = tr.get('http://ipecho.net/plain')
    print("New Ip Address", response.text)

Работает просто отлично, я получаю два IP-адреса: первый - мой IP адрес и второй узел выхода tor. Но он все еще нужен для выхода через Германию, поэтому я использовал launch_tor_with_config ().

torrequest.launch_tor_with_config(
    tor_cmd='/usr/bin/tor',
    config={
        'ExitNodes': '{DE}'  # exiting through Germany
    }
)

Но с этого момента я понятия не имею, как обрабатывать запрос get. Я попытался:

import requests
import stem.process

tor_process = stem.process.launch_tor_with_config(tor_cmd='/usr/bin/tor',
                                                  config={
                                                      'ExitNodes': '{DE}'  # exiting through Germany
                                                  }
                                                  )

response = tor_process.communicate(requests.get('http://ipecho.net/plain'))
print("New Ip Address", response.text)

И он заканчивается кодом 1:

Traceback (most recent call last):
  File "/root/PycharmProjects/webtraffic/webtraffic1.py", line 10, in <module>
    response = tor_process.communicate(requests.get('http://ipecho.net/plain'))
  File "/usr/lib/python3.7/subprocess.py", line 964, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "/usr/lib/python3.7/subprocess.py", line 1667, in _communicate
    self.stdin.flush()
ValueError: flush of closed file

Process finished with exit code 1

Я использую гостевую кали linux на хосте windows 10 с python3 .7.

Спасибо большое заранее !!

1 Ответ

1 голос
/ 01 февраля 2020

Примерно через полтора дня работы я нашел решение. Я не мог продолжить с launch_tor_with_config () так сильно, как я пытался. Вместо этого я пошел на обходной путь. В отличие от того, что в Интернете говорится об изменении? / Добавление 'ExitNodes': '{de}' в ваш tor-browser_en-US / Browser / TorBrowser / Data / Tor / torr c не поможет, равно как и / etc / tor / торр c. Что я сделал, так это изменил код torrequest, добавив 'ExitNodes': '{de}' следующим образом:

  def _launch_tor(self):
    return launch_tor_with_config(
      config={
        'SocksPort': str(self.proxy_port),
        'ControlPort': str(self.ctrl_port),
        'ExitNodes': '{de}'
      },
      take_ownership=True)

С наилучшими пожеланиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...