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

时间:2016-08-15 15:36:36

标签: 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()

这是我的错误:

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
>>> 

2 个答案:

答案 0 :(得分:2)

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

bind_ip = "184.168.237.1"

请参阅Windows Sockets Error Codes documentation

  

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

     

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

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

绑定到0.0.0.0,它将使用所有可用的IP地址(localhost和配置的任何公共地址):

bind_ip = "0.0.0.0"

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

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

port = 5021  # arbitrary port number higher than 1023

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

答案 1 :(得分:0)

在遵循this Python TCP example的过程中,我只是遇到此错误,解决方案是使客户端使用“本地主机”而不是“ 0.0.0.0”进行连接。