Điểm:1

Sự cố kết nối mạng với Python3 và bitcoinrpc trong WSL2 chứ không phải WSL1

lá cờ in

Tôi đang chạy Ubuntu 20.04 trên Windows 10 bằng WSL2.

Tôi đang cố gắng kết nối với máy chủ testnet bitcoin trên máy của mình 127.0.0.1 thông qua Python

Các tập lệnh python hoạt động tốt trên Pycharm, Command Prompt và Powershell, và cho đến gần đây vẫn hoạt động tốt trong Ubuntu khi tôi chạy nó trên WSL1

Sau khi chuyển sang WSL2 cho Ubuntu, tôi nhận được lỗi sau mặc dù cùng hoạt động trong CMD, PS và Pycharm. Có vẻ như có thứ gì đó đang chặn ở phía Ubuntu. Làm thế nào để tôi khắc phục điều này? Vô hiệu hóa Windows Fast Start không giải quyết được vấn đề này.

Traceback (cuộc gọi gần đây nhất cuối cùng):
  Tệp "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", dòng 308, trong <module>
    run_lab_4()
  Tệp "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", dòng 236, trong run_lab_4
    block_info = connect_rpc( which_port, rpc_username, rpc_password, block_to_get)
  Tệp "/home/lalexk/mpcs56600-work/Lab4/Lab4.py", dòng 41, trong connect_rpc
    trả về rpc_connection.getblock(block_hash)
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/site-packages/bitcoinrpc/authproxy.py", dòng 132, trong __call__
    self.__conn.request('POST', self.__url.path, postdata,
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", dòng 1257, theo yêu cầu
    self._send_request(phương thức, url, nội dung, tiêu đề, mã hóa_chunked)
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", dòng 1303, trong _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", dòng 1252, trong tiêu đề cuối
    self._send_output(message_body, encode_chunked=encode_chunked)
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", dòng 1012, trong _send_output
    self.send(tin nhắn)
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", dòng 952, gửi
    self.connect()
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/http/client.py", dòng 923, trong kết nối
    self.sock = self._create_connection(
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/socket.py", dòng 843, trong create_connection
    tăng lỗi
  Tệp "/home/linuxbrew/.linuxbrew/Cellar/[email protected]/3.9.6/lib/python3.9/socket.py", dòng 831, trong create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Kết nối bị từ chối
Điểm:0
lá cờ vn

Tôi không quen lắm với những tập lệnh này, nhưng có vẻ như bạn đang nói rằng máy chủ Bitcoin đang chạy trên máy chủ Windows của bạn và bạn đang cố gắng kết nối với nó tại 127.0.0.1 từ bên trong WSL2. Điều đó ít nhất sẽ giải thích những gì bạn đang trải qua.

Sự khác biệt giữa WSL1 và WSL2 trong trường hợp này là:

  • WSL1 đã chia sẻ mạng Windows theo cách rất đơn giản. Phiên bản WSL1 có cùng địa chỉ IP với máy chủ Windows của nó và 127.0.0.1/máy chủ cục bộ từ bên trong WSL1 giống như Windows máy chủ cục bộ. Nó hoạt động như một mạng lưới bắc cầu.

  • Mặt khác, WSL2 chạy trong một môi trường ảo hóa hơn, chủ yếu sử dụng các thành phần của trình ảo hóa Windows Hyper-V. Mạng của nó nằm trên một NIC ảo chạy NAT'd phía sau máy chủ Windows. 127.0.0.1/máy chủ cục bộ đề cập đến bộ điều hợp mạng ảo WSL2, không phải của máy chủ Windows của nó.

Giải pháp nên khá đơn giản. Sử dụng:

  • Địa chỉ của máy chủ lưu trữ Windows (ví dụ: 192.168.1.10)
  • Địa chỉ của bộ định tuyến ảo mà Hyper-V thiết lập, có thể được xác định bằng ip r l mặc định trong WSL.
  • Hoặc tên mDNS cho bộ định tuyến ảo đó. Đây là "Tên máy tính" của Windows, theo sau là .địa phương. Nếu bạn cần xác định tên đó từ bên trong WSL2, bạn có thể sử dụng:
    echo "$(powershell.exe '[Console]::Write($env:COMPUTERNAME)').local"
    

Nếu tôi hiểu nhầm cách thiết lập của bạn và cách đó không hoạt động, hãy cho tôi biết và chúng ta có thể làm rõ cấu hình.

Tennis Tubbies avatar
lá cờ in
Cảm ơn rất nhiều, bạn đã giúp rất nhiều. Tôi có thể thấy tại sao nó không hoạt động bây giờ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.