我正在关注一个名为“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
>>>
答案 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”进行连接。