我知道有很多像这样的问题,但没有一个问题对我有帮助。我正在尝试连接两个不同网络上的计算机和虚拟机。
服务器:
import socket
HOST = '0.0.0.0'
PORT = 1080
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(5)
print("\n Listening on port " +str(PORT)+ ", waiting for client to connect...")
client_socket, (client_ip, client_port) = server_socket.accept()
print("[+] Client " +client_ip+ " connected!\n")
while True:
try:
command = raw_input(client_ip+ ">")
if(len(command.split()) != 0):
client_socket.send(command)
else:
continue
except Exception,e:
print("[-]Something went wrong")
continue
if(command == "stop"):
break
data = client_socket.recv(1024)
print(data + "\n")
client_socket.close()
如您所见,我打开了一个侦听端口1080并接受所有连接的服务器。我关闭了Windows防火墙和SPI防火墙。我还转发了端口1080(nmap扫描找到并打开它)。
客户端:
import socket
import platform
HOST = "output of whatismyipaddress.com when run on server computer"
PORT = 1080 # port(same as on server.py)
connection_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connection_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
connection_socket.connect((HOST, PORT))
print("\n[*] Connected to " +HOST+ " on port " +str(PORT)+ ".\n")
while True:
command = connection_socket.recv(1024)
split_command = command.split()
print("Received command : " +command)
if (command == "stop"):
break
elif (command == "info"):
connection_socket.send(("Info: " + str(tuple(platform.uname()))))
connection_socket.close()
因此客户端正在向服务器发送数据,服务器正在向客户端发送命令。
我认为客户端不需要转发任何端口。
客户端(vm)已连接到Android HotSpot。服务器已连接到已转发端口的路由器。我为vm选择了桥接连接,并连接了我的外部wifi卡。
服务器已启动侦听并已启动客户端。我得到错误,服务器在尝试连接一段时间后没有正确响应。我也尝试使用默认网关连接,但没有成功。
我有点困惑,因为维基百科说:
计算机网络中的默认网关是假定知道如何将数据包转发到其他网络的节点。通常,在TCP / IP网络中,诸如服务器,工作站和网络设备之类的节点均具有定义的默认路由设置(指向默认网关),定义在何处发送IP地址的数据包,以便确定没有特定路由的
我理解它用于通过2个不同的网络进行通信? 无论如何,有谁知道如何解决这个问题以及我做错了什么?