Python Socket соединение через 2 разные сети
Я знаю, что есть множество подобных вопросов, но ни один из них не помог мне. Я пытаюсь подключить компьютер и VM, которые находятся в 2 разных сетях.
Сервер:
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 Scan находит его и говорит, что он открыт).
Клиент:
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 и подключил к нему свою внешнюю карту Wi-Fi.
Сервер начал слушать, и клиент запустился. Я получаю сообщение об ошибке, что сервер не отвечает должным образом через некоторое время при попытке подключения. Я также попытался подключиться с использованием шлюза по умолчанию, но безуспешно.
Я немного запутался, потому что Википедия говорит:
Шлюз по умолчанию в компьютерной сети - это узел, который должен знать, как пересылать пакеты в другие сети. Как правило, в сети TCP/IP узлы, такие как серверы, рабочие станции и сетевые устройства, имеют определенный параметр маршрута по умолчанию (указывающий на шлюз по умолчанию), определяющий, куда отправлять пакеты для IP-адресов, для которых они не могут определить конкретный маршрут.,
Что я понимаю, так как он используется для связи через 2 разные сети? В любом случае, кто-нибудь знает, как я могу решить эту проблему и что я делаю не так?