У меня есть программа сервер. У меня получается к нему подключаться по всем 3 ip:
127.0.0.1 локально
192.168.1.3 роутер
109.127.85.64 интернет
Я только UDP смог сделать чтобы работало.
Как можно узнать свой айпишник в сети?(программе надо, я то на 2ip могу узнать). Может через какой-то ресурс можно? Или какой функцией особой. На линукс надо.
Элементарного способа сделать это нет. Во-первых нужен, какой-то внешний сервис, который ответит на наш запрос, можно даже тот же 2ip использовать, но лучше найти какой-то попроще и поинтернациональней, например ipecho.net. Во-вторых с сервисом нужно будет взаимодействовать по какому-то протоколу, обычно это http и для этого понадобится сторонняя библиотека или программа(вариант ).
Самый простой/топорный способ использовать wget и popen(3) (обработка ошибок опущена):
#include <stdio.h>
// ...
char ipaddr[16];
FILE *f = popen ("wget -qO - http://ipecho.net/plain","r");
fnscanf (f, 16, "%s", ipaddr);
fclose (f);
// в ipaddr получаем адрес в обычной точечено-десятичной форме.
Минус в данном подходе — зависимость от внешней программы, хотя он же является и плюсом: это позволяет предоставить пользователю возможность настраивать сервис запроса на уровне команды, так что если сторонний сервис перестанет работать, у пользователя будет простой способ поменять его.
Альтернативы/дальнейшие усовершенствования:
myip.opendns.com на один из его серверов, например resolver1.opendns.com, возвращает адрес запрашивающего. т.е. если реализовывать всё на низкоуровневых сокетах, достаточно будет одного DNS запроса аналогичного nslookup myip.opendns.com resolver1.opendns.com.Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости