LittleBob
@LittleBob

Как подключиться к внешнему IP с помощью tcp?

Я использую tcpClient и tcpListener для подключения.
Команда для получения ip:
string hostName = Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostEntry(hostName);
IPAddress[] ipAdresses = ipEntry.AddressList;

listener = new TcpListener(ipAdresses[1], port);

Подключение работает, но только если устройства подключены к одной сети (WiFi или моб. сеть), тем самым подключение ограничено в пределах одной сети.
Можно ли как-то соединиться по внешнему ip адресу или по ip из другой сети, при этом с условием, что сервер может разворачиваться на любом устройстве?
Получается такая схема: любой пользователь может создать сервер на своём устройстве и любой другой пользователь, зная порт и ip может к этому серверу подключиться.
  • Вопрос задан
  • 581 просмотр
Решения вопроса 2
@Flatt10342
Да, это возможно, но при соблюдении одного условия - белый IP адрес у сервера. В этом случае сервер будет доступен для всех, кто знает IP вашего сервера. Для этих целей вы так же можете использовать сторонние сервисы, например, NGROK.
Однако, обратите внимание, что в таком случае вы работаете с url, а не с IP адресом.

Если же вы хотите, чтобы сервер был доступен только конкретным участникам, то вы можете поднять свой VPN сервер и выдать сертификаты всем, кто сможет в дальнейшем воспользоваться вашим сервером. Т.е. доступ к этой сети будет строго ограничен теми людьми, у которых есть учетные данные и сертификат. Одним из вариантов реализации такого решения может стать, например, OpenVPN.

Здесь адресация будет работать так же, как и в локальной сети
Ответ написан
Комментировать
@none7
В нынешних условиях когда каждое подключение проходит через домашний роутер с NAT, нет не у кого "белого" ip-адреса(глобального, внешнего), кроме как у серверов. Даже если "белый" ip-адрес выдаётся провайдером роутеру(что не факт), то нужно сперва пробросить порт через UPnP или пользователем вручную. В последнем случае пользователь должен указать Вашей программе адрес и порт. Конечно есть ещё IPv6, но тех у кого он есть не слишком много. Есть Teredo, но включать его без спроса пользователя не стоит. Да и как любая технология основанная на STUN, работает он не всегда. Метод который работает абсолютно всегда это VPN, который будет проксировать подключения.
Кстати Ваш код очень наивен. У меня в системе есть сетевые адаптеры виртуальных машин, VPN-соединений, даже могут быть дополнительные Loopback, ну и конечно физические. В каком порядке будут выдаваться адреса всех этих адаптеров?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы