Страница 1 из 2

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 13:28
Alex_G
Всем привет.
Возникла, элементарная с виду задача, получить в программе IP адрес компьютера, на котором запущена программа.
Взял старый код, который работал когда-то давно на ХР. Но на 10-ке ничего не выдает.

Код: Выделить всё

GetIpAddress         FUNCTION ( )         
 DATA        
InetAddr      ulong
LocalHost     cstring(100)
LocalIP       cstring(15)
  CODE                                                     
 LocalIP='' 
 IF ~GetHostName(LocalHost,100)  
    InetAddr=GetHostByName(LocalHost)
    if InetAddr
       peek(InetAddr+12,InetAddr)
       peek(InetAddr,InetAddr)
       peek(InetAddr,InetAddr)
       peek(Inet_NToA(InetAddr),LocalIP)
    end
 END
 Return(LocalIP)
Если кто-нибудь сможет подсказать, как получить IP адрес, буду весьма признателен.
Спасибо

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 13:52
kreator
У нас вот такой код:

Код: Выделить всё

LOC:TempString = ''
GetRegSubKeys(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces' , LOC:RegSubKeysQueue)
loop i#=1 to records(LOC:RegSubKeysQueue)
  get(LOC:RegSubKeysQueue , i#)
  s" = GetReg(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & clip(LOC:RegSubKeysQueue.LOC:RegSubKeyName), 'IPAddress')
  if s"[1:7]<>'0.0.0.0'
    LOC:TempString = clip(LOC:TempString) & ' ' & clip(s")
  end  
  s" = GetReg(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & clip(LOC:RegSubKeysQueue.LOC:RegSubKeyName), 'DhcpIPAddress')
  if s"[1:7]<>'0.0.0.0'
    LOC:TempString = clip(LOC:TempString) & ' ' & clip(s")
  end  
end  
LOC:TempString = LOC:TempString[2:len(clip(LOC:TempString))]
GLO:IPAddresses = LOC:TempString
Получается список ip-адресов. Другой вопрос - что дальше с этим делать?

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 14:43
Alex_G
Спасибо, но это извлечение из реестра, и совершенно согласен , непонятно что дальше с этим делать.
Хотелось бы иметь аналог ipconfig для получения IPv4 локального (внутреннего) ID адреса, и дополнительно внешнего IP.

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 15:54
Дед Пахом
Есть API GetAdaptersAddresses.

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 16:37
Yufil
Посмотрел утилиту ipconfig. Она ссылается на GetNetworkParams из модуля iphlpApi https://docs.microsoft.com/en-us/window ... workparams.

А та, в свою очередь... :D

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 16:57
kreator
Alex_G писал(а): 07 Октябрь 2020, 14:43 Спасибо, но это извлечение из реестра, и совершенно согласен , непонятно что дальше с этим делать.
Хотелось бы иметь аналог ipconfig для получения IPv4 локального (внутреннего) ID адреса, и дополнительно внешнего IP.
О чём Вы? Каждое сетевое устройство на компе имеет ip-адрес. Я считаю, в принципе, в реестре хранится всё правильно. Или вот такой момент. Запустил "ipconfig /all" на своём компе. Четыре адаптера найдено. И что?

Получение IP адреса компьютера

Добавлено: 07 Октябрь 2020, 17:47
morkovin
При работе через портал приложений TSPlus все юзеры входят под одним логином и потом запускают каждый свою копию проги, но уже с индивидуальным логином. Чтобы подключаться к их сессиям я определяю IP-адрес, с которого они подключились. При запуске моя программа втихую вызывает cmd-программу "gettscip.exe > %1", которая записывает в файл IP.

Получение IP адреса компьютера

Добавлено: 10 Октябрь 2020, 16:47
Alex_G
Спасибо всем , кто откликнулся.
Буду пробовать через GetAdaptersAddresses .

Получение IP адреса компьютера

Добавлено: 10 Октябрь 2020, 17:06
Alex_G
kreator писал(а): 07 Октябрь 2020, 16:57
Alex_G писал(а): 07 Октябрь 2020, 14:43 Спасибо, но это извлечение из реестра, и совершенно согласен , непонятно что дальше с этим делать.
Хотелось бы иметь аналог ipconfig для получения IPv4 локального (внутреннего) ID адреса, и дополнительно внешнего IP.
О чём Вы? Каждое сетевое устройство на компе имеет ip-адрес. Я считаю, в принципе, в реестре хранится всё правильно. Или вот такой момент. Запустил "ipconfig /all" на своём компе. Четыре адаптера найдено. И что?
В этом то и проблема, как понять, какой IP адрес "основной", по которому можно идентифицировать компьютер в сети

Получение IP адреса компьютера

Добавлено: 10 Октябрь 2020, 17:17
kreator
А нет основного. Если у Вас есть подключения по всем интерфейсам, то будут все "основные". Изначально, что Вы хотите узнать? Может некий функционал перенести на сервер?

Получение IP адреса компьютера

Добавлено: 10 Октябрь 2020, 17:42
Alex_G
kreator писал(а): 10 Октябрь 2020, 17:17 А нет основного. Если у Вас есть подключения по всем интерфейсам, то будут все "основные". Изначально, что Вы хотите узнать? Может некий функционал перенести на сервер?
IPConfig выдает
Безимени-1.jpg
Безимени-1.jpg (128.95 КБ) 4542 просмотра
где "основной" IP адрес 192.168.1.3
В реестре этот адрес прописан в интерфейсе ({98ce00e3-3b73-4d78-93e7-619c434e04e5})
Безимени-3.jpg
Безимени-3.jpg (245.87 КБ) 4542 просмотра
Но кроме него еще есть и другой интерфейс ({090012e6-0edd-4967-b08e-585b689e70a5})
Безимени-2.jpg
Безимени-2.jpg (243.12 КБ) 4542 просмотра
с адресом 192.168.1.46 который в IPconfig не отображается. Возможно это какой-то "мусор".
И вопрос, как их отличить, получить тот , который выдается в IPConfig.

Получение IP адреса компьютера

Добавлено: 11 Октябрь 2020, 11:59
kreator
Ваш конкретный случай лечится может быть вот так - https://social.technet.microsoft.com/Fo ... networking.
Но мне всё равно не понятно зачем Вы привязываетесь к частным случаям? Вот у меня четыре интерфейса. Ладно я, оставим меня. Есть типичный ноутбук, который подключён к одному роутеру и проводным соединением и по WiFi. Так многие делают, это повышает скорость интернета. По DHCP ноутбук имеет два живых ip-шника, которые рабочие и имеют траффик. Игровые компы (большие как у меня) могут подключаться к роутеру через WiFi, через две сетевых карты на матери плюс через отдельные сетевые карты. Игрокам тоже нужна скорость и они так делают. Всё-таки какая изначальная задача?

Получение IP адреса компьютера

Добавлено: 11 Октябрь 2020, 12:04
Alex_G
kreator писал(а): 11 Октябрь 2020, 11:59 Ваш конкретный случай лечится может быть вот так - https://social.technet.microsoft.com/Fo ... networking.
Но мне всё равно не понятно зачем Вы привязываетесь к частным случаям? Вот у меня четыре интерфейса. Ладно я, оставим меня. Есть типичный ноутбук, который подключён к одному роутеру и проводным соединением и по WiFi. Так многие делают, это повышает скорость интернета. По DHCP ноутбук имеет два живых ip-шника, которые рабочие и имеют траффик. Игровые компы (большие как у меня) могут подключаться к роутеру через WiFi, через две сетевых карты на матери плюс через отдельные сетевые карты. Игрокам тоже нужна скорость и они так делают. Всё-таки какая изначальная задача?
У пользователей программа крутится на виртуальных серверах в локальной сети. Пользователь заходит под своим логином но на каком виртуальном сервере - это вопрос случая(тот который в данный момент менее загружен). Такая у них конфигурация. И админ хочет иметь информацию, кто где "крутится". Параллельно кто-то может заходить и со своего ноутбука.

Получение IP адреса компьютера

Добавлено: 11 Октябрь 2020, 12:18
kreator
Alex_G писал(а): 11 Октябрь 2020, 12:04 У пользователей программа крутится на виртуальных серверах в локальной сети.
Как вот это понять? RDP?

Получение IP адреса компьютера

Добавлено: 11 Октябрь 2020, 13:30
Alex_G
kreator писал(а): 11 Октябрь 2020, 12:18
Alex_G писал(а): 11 Октябрь 2020, 12:04 У пользователей программа крутится на виртуальных серверах в локальной сети.
Как вот это понять? RDP?
Не обязательно. На одном "железе" развертывают несколько виртуальных машин. Честно говоря, всех деталей и ньюансов я не знаю. Сам этим делом не занимаюсь. Просто в программе требуется знать IP машины, на которой она запущена.