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

Я запускаю Ubuntu 20.04 в Windows 10 с использованием WSL2.

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

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

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

Traceback (most recent call last):
  File "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", line 308, in <module>
    run_lab_4()
  File "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", line 236, in run_lab_4
    block_info = connect_rpc(which_port, rpc_username, rpc_password, block_to_get)
  File "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", line 41, in connect_rpc
    return rpc_connection.getblock(block_hash)
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/site-packages/bitcoinrpc/authproxy.py", line 132, in __call__
    self.__conn.request('POST', self.__url.path, postdata,
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/http/client.py", line 1257, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/http/client.py", line 1303, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/http/client.py", line 1252, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/http/client.py", line 1012, in _send_output
    self.send(msg)
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/http/client.py", line 952, in send
    self.connect()
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/http/client.py", line 923, in connect
    self.sock = self._create_connection(
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/socket.py", line 843, in create_connection
    raise err
  File "/home/linuxbrew/.linuxbrew/Cellar/python@3.9/3.9.6/lib/python3.9/socket.py", line 831, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
1
задан 25 July 2021 в 03:14

1 ответ

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

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

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

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

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

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

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

0
ответ дан 28 July 2021 в 11:15

Другие вопросы по тегам:

Похожие вопросы: