Рейтинг:1

Проблемы с сетевым подключением с Python3 и bitcoinrpc в WSL2, но не в WSL1

флаг in

Я использую Ubuntu 20.04 в Windows 10, используя WSL2.

Я пытаюсь подключиться к серверу тестовой сети биткойнов на моей машине 127.0.0.1 через Python.

Скрипты Python отлично работают в Pycharm, Command Prompt и Powershell и до недавнего времени отлично работали в Ubuntu, когда я запускал его на WSL1.

Перейдя на WSL2 для Ubuntu, я получаю следующую ошибку, несмотря на то, что при этом работаю в CMD, PS и Pycharm. Кажется, что-то блокирует на стороне Ubuntu. Как я могу это исправить? Отключение быстрого запуска Windows не решило эту проблему.

Traceback (последний последний вызов):
  Файл "/home/lalexk/mpc56600-work/Lab4/Lab4.py", строка 308, в <module>
    run_lab_4()
  Файл "/home/lalexk/mpc56600-work/Lab4/Lab4.py", строка 236, в run_lab_4
    block_info = connect_rpc (какой_порт, rpc_username, rpc_password, block_to_get)
  Файл "/home/lalexk/mpc56600-work/Lab4/Lab4.py", строка 41, в connect_rpc
    вернуть rpc_connection.getblock(block_hash)
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/site-packages/bitcoinrpc/authproxy.py", строка 132, в __call__
    self.__conn.request('POST', self.__url.path, postdata,
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", строка 1257, в запросе
    self._send_request (метод, URL, тело, заголовки, encode_chunked)
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", строка 1303, в _send_request
    self.endheaders (тело, encode_chunked = encode_chunked)
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", строка 1252, в конечных заголовках
    self._send_output(message_body, encode_chunked=encode_chunked)
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", строка 1012, в _send_output
    self.send (сообщение)
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", строка 952, при отправке
    самоподключение()
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", строка 923, при подключении
    self.sock = self._create_connection(
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/socket.py", строка 843, в create_connection
    поднять ошибку
  Файл "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/socket.py", строка 831, в create_connection
    sock.connect (са)
ConnectionRefusedError: [Errno 111] В соединении отказано
Рейтинг:0
флаг vn

Я не очень хорошо знаком с этими сценариями, но похоже, что вы говорите, что биткойн-сервер работает на вашем хосте Windows, и вы пытаетесь подключиться к нему по адресу 127.0.0.1 изнутри WSL2. Это, по крайней мере, объяснило бы то, что вы испытываете.

Разница между WSL1 и WSL2 в этом случае:

  • WSL1 очень просто разделил сеть Windows. Экземпляр WSL1 имеет тот же IP-адрес, что и его хост Windows, и 127.0.0.1/локальный хост изнутри WSL1 такой же, как в Windows локальный хост. Он действует как мостовая сеть.

  • WSL2, с другой стороны, работает в более виртуализированной среде, в основном с использованием элементов гипервизора Windows Hyper-V. Его сеть находится на виртуальном сетевом адаптере, на котором работает NAT. позади хост Windows. 127.0.0.1/локальный хост относится к виртуальному сетевому адаптеру WSL2, нет что его хоста Windows.

Решение должно быть довольно простым. Используйте либо:

  • Адрес хоста Windows (например, 192.168.1.10)
  • Адрес виртуального маршрутизатора, настроенного Hyper-V, который можно определить с помощью ip r l по умолчанию в ВСЛ.
  • Или имя mDNS для этого виртуального маршрутизатора. Это «Имя компьютера» в Windows, за которым следует .местный. Если вам нужно определить это имя изнутри WSL2, вы можете использовать:
    echo "$(powershell.exe '[Console]::Write($env:COMPUTERNAME)').local"
    

Если я неправильно понимаю ваши настройки и это не работает, дайте мне знать, и мы сможем уточнить конфигурацию.

Tennis Tubbies avatar
флаг in
Большое спасибо, вы очень помогли. Теперь я понимаю, почему это не работает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.