Вопрос сложнее, чем кажется, потому что во многих случаях «IP-адрес для локального компьютера» не столько, сколько количество IP-адресов. Например, Mac, на котором я сейчас печатаю (это довольно простая стандартная настройка Mac), имеет следующие IP-адреса:
fe80::1%lo0
127.0.0.1
::1
fe80::21f:5bff:fe3f:1b36%en1
10.0.0.138
172.16.175.1
192.168.27.1
... и дело не только в том, чтобы выяснить, что из вышеперечисленного является "реальным IP-адресом", либо ... все они "настоящие" и полезные; некоторые более полезны, чем другие, в зависимости от того, для чего вы собираетесь использовать адреса.
По моему опыту, часто лучший способ получить "IP-адрес" для вашего локального компьютера - это вообще не запрашивать локальный компьютер, а спрашивать компьютер, с помощью которого ваша программа говорит об IP-адресе вашего компьютера , например если вы пишете клиентскую программу, отправьте на сервер сообщение с просьбой отправить обратно в качестве данных IP-адрес, с которого пришел ваш запрос. Таким образом, вы будете знать, что такое релевантный IP-адрес, учитывая контекст компьютера, с которым вы общаетесь.
Тем не менее, этот трюк может не подходить для некоторых целей (например, когда вы не общаетесь с конкретным компьютером), поэтому иногда вам просто нужно собрать список всех IP-адресов, связанных с вашей машиной. Лучший способ сделать это в Unix / Mac (AFAIK) - вызвать getifaddrs () и перебрать результаты. Под Windows попробуйте GetAdaptersAddresses (), чтобы получить аналогичную функциональность. Например, использование обоих, см. Функцию GetNetworkInterfaceInfos () в этот файл .