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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение 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 адрес, буду весьма признателен.
Спасибо
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение 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-адресов. Другой вопрос - что дальше с этим делать?
We are hard at work… for you. :)
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение Alex_G »

Спасибо, но это извлечение из реестра, и совершенно согласен , непонятно что дальше с этим делать.
Хотелось бы иметь аналог ipconfig для получения IPv4 локального (внутреннего) ID адреса, и дополнительно внешнего IP.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

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

Сообщение Дед Пахом »

Есть API GetAdaptersAddresses.
С уважением, ДП
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

Посмотрел утилиту ipconfig. Она ссылается на GetNetworkParams из модуля iphlpApi https://docs.microsoft.com/en-us/window ... workparams.

А та, в свою очередь... :D
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Alex_G писал(а): 07 Октябрь 2020, 14:43 Спасибо, но это извлечение из реестра, и совершенно согласен , непонятно что дальше с этим делать.
Хотелось бы иметь аналог ipconfig для получения IPv4 локального (внутреннего) ID адреса, и дополнительно внешнего IP.
О чём Вы? Каждое сетевое устройство на компе имеет ip-адрес. Я считаю, в принципе, в реестре хранится всё правильно. Или вот такой момент. Запустил "ipconfig /all" на своём компе. Четыре адаптера найдено. И что?
We are hard at work… for you. :)
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

При работе через портал приложений TSPlus все юзеры входят под одним логином и потом запускают каждый свою копию проги, но уже с индивидуальным логином. Чтобы подключаться к их сессиям я определяю IP-адрес, с которого они подключились. При запуске моя программа втихую вызывает cmd-программу "gettscip.exe > %1", которая записывает в файл IP.
Вложения
GETTSCIP.zip
(16.3 КБ) 129 скачиваний
WBR, morkovin
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение Alex_G »

Спасибо всем , кто откликнулся.
Буду пробовать через GetAdaptersAddresses .
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение Alex_G »

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

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

Сообщение kreator »

А нет основного. Если у Вас есть подключения по всем интерфейсам, то будут все "основные". Изначально, что Вы хотите узнать? Может некий функционал перенести на сервер?
We are hard at work… for you. :)
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение Alex_G »

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

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

Сообщение kreator »

Ваш конкретный случай лечится может быть вот так - https://social.technet.microsoft.com/Fo ... networking.
Но мне всё равно не понятно зачем Вы привязываетесь к частным случаям? Вот у меня четыре интерфейса. Ладно я, оставим меня. Есть типичный ноутбук, который подключён к одному роутеру и проводным соединением и по WiFi. Так многие делают, это повышает скорость интернета. По DHCP ноутбук имеет два живых ip-шника, которые рабочие и имеют траффик. Игровые компы (большие как у меня) могут подключаться к роутеру через WiFi, через две сетевых карты на матери плюс через отдельные сетевые карты. Игрокам тоже нужна скорость и они так делают. Всё-таки какая изначальная задача?
We are hard at work… for you. :)
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение Alex_G »

kreator писал(а): 11 Октябрь 2020, 11:59 Ваш конкретный случай лечится может быть вот так - https://social.technet.microsoft.com/Fo ... networking.
Но мне всё равно не понятно зачем Вы привязываетесь к частным случаям? Вот у меня четыре интерфейса. Ладно я, оставим меня. Есть типичный ноутбук, который подключён к одному роутеру и проводным соединением и по WiFi. Так многие делают, это повышает скорость интернета. По DHCP ноутбук имеет два живых ip-шника, которые рабочие и имеют траффик. Игровые компы (большие как у меня) могут подключаться к роутеру через WiFi, через две сетевых карты на матери плюс через отдельные сетевые карты. Игрокам тоже нужна скорость и они так делают. Всё-таки какая изначальная задача?
У пользователей программа крутится на виртуальных серверах в локальной сети. Пользователь заходит под своим логином но на каком виртуальном сервере - это вопрос случая(тот который в данный момент менее загружен). Такая у них конфигурация. И админ хочет иметь информацию, кто где "крутится". Параллельно кто-то может заходить и со своего ноутбука.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Alex_G писал(а): 11 Октябрь 2020, 12:04 У пользователей программа крутится на виртуальных серверах в локальной сети.
Как вот это понять? RDP?
We are hard at work… for you. :)
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

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

Сообщение Alex_G »

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