Python: подключение с помощью сокетов через внешний IP

Сегодня я сделал свою самую первую программу sockets — я сделал клиент и сервер, которые сообщают друг другу (вроде чата) с помощью sockets. При использовании внутреннего IP в качестве ‘хоста’ устанавливается соединение, в противном случае при использовании внешнего IP соединение не устанавливается.

Редактировать 1:

#Client 
s = socket.socket()
host = '123.123.123.123'
port = 9999
s.connect((host, port))

#Server
host = ''
port = 9999
s = socket.socket()
s.bind((host, port))
s.listen(5)
connection, address = s.accept()

Как это будет правильно работать, например, с ноутбуком? Так как ваш IP меняется каждый раз, когда вы переключаете Wi-Fi, как я смогу создать программу, которая будет постоянно работать с этим конкретным ноутбуком?

Я понимаю, что я должен передать определенный порт на определенную внутреннюю машину, такую как 192.168.0.5. но что делать, если я использую ноутбук, и у меня нет доступа к маршрутизатору WIFI. У меня не было бы доступа к каждому маршрутизатору, который использует ноутбук.

Я хочу, чтобы код был постоянно совместим.

1 ответ

  1. Использовать DynDNS.comили NoIP.comпортал. Вы устанавливаете программу на ноутбук, который проверяет ваш IP frequencly и отправляет текущий IP порталу, который назначает этот IP на ваш адрес, как «my_laptop.noip.com». Тогда люди могут получить доступ к вашему ноутбуку с помощью «my_laptop.noip.com» вместо IP-адреса.

    Вы всегда назначаете сокет к IP карточки локальной сети (NIC) как WiFi. Ассинг на внешний IP невозможен. Вы должны настроить маршрутизатор так, чтобы запросы к внешнему IP: port отправлялись на ваш локальный IP: port. Конечно, маршрутизаторы интернет-провайдера могут заблокировать ваши порты, и это не будет работать.