请求的地址在其上下文错误中无效

Mou*_*ios 9 python python-2.7 server

我正在学习一个名为“Black Hat Python”的教程,并收到“请求的地址在其上下文中无效”错误。我是 Python IDE 版本:2.7.12 这是我的代码:

import socket
import threading

bind_ip = "184.168.237.1"
bind_port = 21

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((bind_ip,bind_port))

server.listen(5)

print "[*] Listening on %s:%d" % (bind_ip,bind_port)

def handle_client(client_socket):

    request = client_socket.rev(1024)

    print "[*] Recieved: %s" % request

    client_socket.close()

while True:

    client,addr = server.accept()

    print "[*] Accepted connection from: %s:%d" % (addr[0],addr[1])

    client_handler = threading.Thread(target=handle_client,args=(client,))
    client_handler.start()
Run Code Online (Sandbox Code Playgroud)

这是我的错误:

Traceback (most recent call last):
  File "C:/Python34/learning hacking.py", line 9, in <module>
    server.bind((bind_ip,bind_port))
  File "C:\Python27\lib\socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 10049] The requested address is not valid in its context
>>> 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

您正在尝试绑定到实际上并未分配给您的网络接口的 IP 地址:

bind_ip = "184.168.237.1"
Run Code Online (Sandbox Code Playgroud)

请参阅Windows 套接字错误代码文档

WSAEADDRNOTAVAIL 10049
无法分配请求的地址。

请求的地址在其上下文中无效。这通常是由于尝试绑定到对本地计算机无效的地址造成的。

这可能是您的路由器在使用 NAT(网络地址转换)与您的计算机通信之前侦听的 IP 地址,但这并不意味着您的计算机根本无法看到该 IP 地址。

要么绑定到0.0.0.0,这将使用所有可用的 IP 地址(本地主机和配置的任何公共地址):

bind_ip = "0.0.0.0"
Run Code Online (Sandbox Code Playgroud)

或使用您的计算机配置的任何地址;ipconfig /all在控制台中运行以查看您的网络配置。

您可能也不想使用小于 1024 的端口;这些是为仅以 root 身份运行的进程保留的。如果你想运行一个非特权进程,你必须选择一个比这个更高的数字(在大多数教程程序中,这正是你想要的):

port = 5021  # arbitrary port number higher than 1023
Run Code Online (Sandbox Code Playgroud)

我相信您正在关注的具体教程使用BIND_IP = '0.0.0.0'BIND_PORT = 9090.