«Логический адрес» не имеет смысла. Вы либо хотите получить интерфейсный адрес (IP-адрес, который находится в той же локальной сети, что и компьютер), либо вам нужен общедоступный интернет-адрес (IP-адреса хосты увидят, когда этот компьютер подключится к ним). IP-адреса будут одинаковыми, только если аппарат напрямую подключен к Интернету, что часто не соответствует действительности.
Во-вторых, узлы Linux могут (и имеют) иметь несколько интерфейсов, поэтому , который интерфейс, так же важен. Это может быть связано с маршрутизацией (в этом случае это зависит от пункта назначения), или он может использовать политику маршрутизации (что опять-таки: будет зависеть от фактического трафика).
В-третьих: узлы Linux могут иметь несколько адресов . То есть системный администратор может привязать несколько IP-адресов к интерфейсу, либо используя подчиненные интерфейсы (например, ifconfig eth0:2 ...
), либо просто добавляя вторичные адреса (например, ip addr add ip dev eth0
).
Именно поэтому вам лучше всего сказать пользователю, что вы хотите сделать, и попросить пользователя предоставить вам нужную информацию, или просто попытайтесь установить соединение и полагаться на система, чтобы делать правильные вещи.
В тех немногих случаях, когда вам действительно нужен IP-адрес (например, если вы внедряете FTP-клиент), правильным будет специализированный подход (в случае клиента FTP: использование результатов getsockname()
на канале управления). Точное знание того, почему вы считаете, что вам нужен IP-адрес (и какая у вас информация), поможет вам лучше ответить.