Подключиться к сокету из внешней локальной сетиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Подключиться к сокету из внешней локальной сети

Сообщение Anonymous »

Я пытаюсь установить сокетное соединение между двумя разными терминалами. Когда они оба находятся на одном компьютере или на разных компьютерах в одной сети (за моим домашним маршрутизатором), все работает нормально.
Вот минимальный пример кода, который я использую. . На стороне клиента я ввожу IP-адрес, который я получаю при запуске ipconfig на сервере, он работает как с адресом IPv4, так и с временным адресом IPv6 (разумеется, меняя соответствующий флаг)
СЕРВЕР

Код: Выделить всё

import socket

ip_address = ""
ipv6 = False  # True

PORT = 12345
STREAM = socket.SOCK_STREAM
if ipv6:
FAMILY = socket.AF_INET6
bind_args = (ip_address, PORT, 0, 0)
else:
FAMILY = socket.AF_INET
bind_args = (ip_address, PORT)

server_socket = socket.socket(FAMILY, STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

server_socket.bind(bind_args)
server_socket.listen()
unsecured_sock, client_address = server_socket.accept()
print("accepted from", client_address)
КЛИЕНТ

Код: Выделить всё

import socket

ip_address = "Entered from ipconfig or whatsmyip.com run from server"
ipv6 = False  # True

PORT = 12345
STREAM = socket.SOCK_STREAM
if ipv6:
FAMILY = socket.AF_INET6
bind_args = (ip_address, PORT, 0, 0)
else:
FAMILY = socket.AF_INET
bind_args = (ip_address, PORT)

sock = socket.socket(FAMILY, STREAM)
sock.connect(bind_args)
print("Connected!")
Проблемы возникают, когда я вывожу один из компьютеров из домашней сети. Поскольку у меня нет двух стандартных сетей, к которым я мог бы получить доступ одновременно, я проверяю это, подключив один из компьютеров к Интернету через 4G на моем телефоне или через VPN. В любом случае я затем использую IP-адрес, полученный от сайта Whatsmyip.com, запущенного с сервера. Я пробовал все комбинации IPv4 и IPv6 и независимо от того, находится ли сервер или клиент за моим домашним маршрутизатором. Во всех случаях это не удается (обратите внимание: я не получаю IPv6-адрес, когда сервер подключается к Интернету через 4G на моем телефоне). На самом деле, я даже не могу пропинговать или отследить IP-адрес сервера с клиентского терминала.
Подозреваю, что делаю что-то очень основная ошибка, но я не знаю, что. Я подозревал, что это связано с переадресацией портов, поэтому попробовал следующий скрипт UPnP

Код: Выделить всё

import upnpy

upnp = upnpy.UPnP()
devices = upnp.discover()
device = upnp.get_igd()
service = device.WANIPConn1

service.AddPortMapping(
NewRemoteHost='',
NewExternalPort=12345,
NewProtocol='TCP',
NewInternalPort=12345,
NewInternalClient='192.168.0.136',  # Local server IP
NewEnabled=1,
NewPortMappingDescription='Test port mapping entry from UPnPy.',
NewLeaseDuration=600)
print("added new port mapping")
который работает правильно, но не имеет никакого значения. Прав ли я, полагая, что для IPv6 это в любом случае не должно быть проблемой? Если это имеет значение, провайдер моего Интернета сообщает, что у меня соединение IPv6 и что у меня нет подходящего общедоступного адреса IPv4. Учитывая, что я хочу, чтобы это было переносимо и, в конечном итоге, распространялось, я бы предпочел, чтобы это не зависело от определенных настроек, недоступных пользователю.

Подробнее здесь: https://stackoverflow.com/questions/659 ... al-network
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»