Tor не может работать с Failed для привязки одного из портов слушателя

Когда я запускаю [пример][1] из документации по основам, я получаю сообщение об ошибке:

OSError: Process terminated: Failed to bind one of the listener ports.

Точный код, который я запускаю ниже:

import socks
import socket
import stem.process
import urllib

from stem.util import term

SOCKS_PORT = 7000

# Set socks proxy and wrap the urllib module

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket

# Perform DNS resolution through the socket

def getaddrinfo(*args):
  return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]

socket.getaddrinfo = getaddrinfo

def query(url):
    return urllib.urlopen(url).read()

def print_bootstrap_lines(line):
  if "Bootstrapped " in line:
    print(term.format(line, term.Color.BLUE))

print(term.format("Starting Tor:\n", term.Attr.BOLD))

tor_process = stem.process.launch_tor_with_config(
  config = {
    'SocksPort': str(SOCKS_PORT),
    'ExitNodes': '{ru}',
  },
  init_msg_handler = print_bootstrap_lines,
)

print(term.format("\nChecking our endpoint:\n", term.Attr.BOLD))
print(term.format(query("https://www.atagar.com/echo.php"), term.Color.BLUE))

print(query("https://stackru.com/questions/30286293/make-requests-using-python-over-tor"))

tor_process.kill()  

Я видел ответы о том, что на порту 9050 запущен другой процесс, но он выполняет команду sudo netstat -anl | grep 9050 в терминале не дает мне результата.

Пожалуйста, не стесняйтесь предложить что-нибудь, что может помочь.

Кроме того, первый пример "России с любовью" работает без нареканий.

Спасибо за любую помощь, которую вы можете оказать.

1 ответ

Проверка tor установлена

sudo apt install tor

Проверь это

sudo gedit /etc/default/tor

найти и заменить "да" на "нет" там

RUN_DAEMON="yes"

остановить демона

sudo /etc/init.d/tor stop

Работал и столкнулся с этим на Linux Mint.

Был в состоянии обойти это путем сна / паузы в течение длительных периодов времени.

Import time
time.sleep(1000)      #usually sleep it over 10 minutes for my case

Из того, что я скребу, нужно спать, поэтому это прекрасно, но я определенно вижу, что это не помогает в других случаях.

Поскольку вы используете SOCKS_PORT как 7000, используйте команду ниже, чтобы найти процесс, использующий его.

sudo netstat -plnt | grep 7000

Если вы получите что-то вроде этого (см. Tor в конце),

tcp        0      0 127.0.0.1:7000          0.0.0.0:*               LISTEN      13009/tor

использовать sudo killall tor чтобы завершить процесс tor.

Использование "sudo" и имени процесса ("tor") для завершения команды не рекомендуется. Вместо этого вы должны использоватьkill pid команда, где pid - это идентификатор процесса (13009), представленный в приведенном выше выводе.

Я столкнулся с этой проблемой при использовании пакета "threading", и вот мое решение, которое может оказаться полезным для странников.

Я использовал решение, предоставленное лучшим ответом, а также сделал это:

for thread in threads_list:
    time.sleep(0.1)
    thread.run()
Другие вопросы по тегам