Автор | Сообщение |
|
| постоянный участник
|
Пост N: 768
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.12.08 18:17. Заголовок: Как узнать IP адрес компьютера ?
Всем привет... Подскажите как можно из программы узнать IP адрес компа ? И какой он, динамический или статический ?
| |
|
Ответов - 18
[только новые]
|
|
|
| |
Пост N: 78
Зарегистрирован: 30.05.05
|
|
Отправлено: 24.12.08 21:35. Заголовок: Где-то в инете было ..
Где-то в инете было что-то вроде этого: //Функция определяющая Имя компьютера и имя пользователя //и возвращающая массив IP адресов компа //GetIpStation(@cName,@cUserName)->aHosts FUNCTION GetIpStation(cName,cUserName) LOCAL aHosts:=NIL cName:=NetName(.F.) //F имя компьютера cUserName:=NetName(.T.) //.T. имя пользователя InetInit() aHosts := InetGetHosts(cName) IF aHosts == NIL aHosts := InetGetAlias(cName) ENDIF InetCleanup() RETURN aHosts а статический IP или динамический, это наверное через реестр надо узнавать!
| |
|
|
| |
Пост N: 34
Зарегистрирован: 19.12.06
|
|
Отправлено: 25.12.08 11:51. Заголовок: Отсюда можно узнать ..
Отсюда можно узнать все, например 4-й элемент возвращаемого массива ip-адрес // Fetches the MAC address and prints it HB_FUNC( GETMACADDRESSES ) { IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information // for up to 16 NICs // http://msdn2.microsoft.com/En-US/library/aa366062.aspx DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo AdapterInfo, // [out] buffer to receive data &dwBufLen); // [in] size of receive data buffer PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to // current adapter info char cMacAddress[18]; PHB_ITEM pItem; PHB_ITEM paAddress = hb_itemArrayNew( 0 ); // Verify return value is valid, no buffer overflow... if (dwStatus != ERROR_SUCCESS) { hb_itemRelease(hb_itemReturn(paAddress)); return; } pItem = hb_itemNew(NULL); do { PHB_ITEM pSubArray = hb_itemArrayNew(10); // Description of NIC hb_arraySet(pSubArray, 1, hb_itemPutC(pItem, pAdapterInfo->Description)); // MAC address sprintf( cMacAddress, "%02X-%02X-%02X-%02X-%02X-%02X", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]); hb_strUpper( cMacAddress, strlen(cMacAddress)); hb_arraySet(pSubArray, 2, hb_itemPutC(pItem, cMacAddress )); // GUID of NIC hb_arraySet(pSubArray, 3, hb_itemPutC(pItem, pAdapterInfo->AdapterName)); // IP Address hb_arraySet(pSubArray, 4, hb_itemPutC(pItem, pAdapterInfo->IpAddressList.IpAddress.String )); // IP Mask hb_arraySet(pSubArray, 5, hb_itemPutC(pItem, pAdapterInfo->IpAddressList.IpMask.String )); // IP Gateway hb_arraySet(pSubArray, 6, hb_itemPutC(pItem, pAdapterInfo->GatewayList.IpAddress.String )); // DHCP server IP & Lease Obtained if (pAdapterInfo->DhcpEnabled) { hb_arraySet(pSubArray, 7, hb_itemPutC( pItem, pAdapterInfo->DhcpServer.IpAddress.String )); hb_arraySet(pSubArray, 8, hb_itemPutNL(pItem, pAdapterInfo->LeaseObtained )); } else { hb_arraySet(pSubArray, 7, hb_itemPutC( pItem, "" )); hb_arraySet(pSubArray, 8, hb_itemPutNI(pItem, 0 )); } // WINS server info - Primary & Secondary ip address if (pAdapterInfo->HaveWins) { hb_arraySet(pSubArray, 9, hb_itemPutC( pItem, pAdapterInfo->PrimaryWinsServer.IpAddress.String )); hb_arraySet(pSubArray, 10, hb_itemPutC( pItem, pAdapterInfo->SecondaryWinsServer.IpAddress.String )); } else { hb_arraySet(pSubArray, 9, hb_itemPutC( pItem, "" )); hb_arraySet(pSubArray, 10, hb_itemPutC( pItem, "" )); } hb_arrayAdd(paAddress, pSubArray); hb_itemRelease(pSubArray); pAdapterInfo = pAdapterInfo->Next; // Progress through // linked list } while(pAdapterInfo); // Terminate if last adapter hb_itemRelease(pItem); hb_itemRelease(hb_itemReturn(paAddress)); }
| |
|
|
| |
Пост N: 10
Зарегистрирован: 23.06.08
|
|
Отправлено: 14.02.09 18:13. Заголовок: А как его вызывать ?
Здравствуйте ! А как его вызывать ??? Попробовал вот, что: Procedure Main() Clear screen ? GETMACADDRESSES() wait Return /////////////////////////////////////////////////////////// #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> #include <shlobj.h> // Fetches the MAC address and prints it HB_FUNC( GETMACADDRESSES ) { IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information // for up to 16 NICs // http://msdn2.microsoft.com/En-US/library/aa366062.aspx DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo AdapterInfo, // [out] buffer to receive data &dwBufLen); // [in] size of receive data buffer PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to // current adapter info char cMacAddress[18]; PHB_ITEM pItem; PHB_ITEM paAddress = hb_itemArrayNew( 0 ); // Verify return value is valid, no buffer overflow... if (dwStatus != ERROR_SUCCESS) { hb_itemRelease(hb_itemReturn(paAddress)); return; } pItem = hb_itemNew(NULL); do { PHB_ITEM pSubArray = hb_itemArrayNew(10); // Description of NIC hb_arraySet(pSubArray, 1, hb_itemPutC(pItem, pAdapterInfo->Description)); // MAC address sprintf( cMacAddress, "%02X-%02X-%02X-%02X-%02X-%02X", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]); hb_strUpper( cMacAddress, strlen(cMacAddress)); hb_arraySet(pSubArray, 2, hb_itemPutC(pItem, cMacAddress )); // GUID of NIC hb_arraySet(pSubArray, 3, hb_itemPutC(pItem, pAdapterInfo->AdapterName)); // IP Address hb_arraySet(pSubArray, 4, hb_itemPutC(pItem, pAdapterInfo->IpAddressList.IpAddress.String )); // IP Mask hb_arraySet(pSubArray, 5, hb_itemPutC(pItem, pAdapterInfo->IpAddressList.IpMask.String )); // IP Gateway hb_arraySet(pSubArray, 6, hb_itemPutC(pItem, pAdapterInfo->GatewayList.IpAddress.String )); // DHCP server IP & Lease Obtained if (pAdapterInfo->DhcpEnabled) { hb_arraySet(pSubArray, 7, hb_itemPutC( pItem, pAdapterInfo->DhcpServer.IpAddress.String )); hb_arraySet(pSubArray, 8, hb_itemPutNL(pItem, pAdapterInfo->LeaseObtained )); } else { hb_arraySet(pSubArray, 7, hb_itemPutC( pItem, "" )); hb_arraySet(pSubArray, 8, hb_itemPutNI(pItem, 0 )); } // WINS server info - Primary & Secondary ip address if (pAdapterInfo->HaveWins) { hb_arraySet(pSubArray, 9, hb_itemPutC( pItem, pAdapterInfo->PrimaryWinsServer.IpAddress.String )); hb_arraySet(pSubArray, 10, hb_itemPutC( pItem, pAdapterInfo->SecondaryWinsServer.IpAddress.String )); } else { hb_arraySet(pSubArray, 9, hb_itemPutC( pItem, "" )); hb_arraySet(pSubArray, 10, hb_itemPutC( pItem, "" )); } hb_arrayAdd(paAddress, pSubArray); hb_itemRelease(pSubArray); pAdapterInfo = pAdapterInfo->Next; // Progress through // linked list } while(pAdapterInfo); // Terminate if last adapter hb_itemRelease(pItem); hb_itemRelease(hb_itemReturn(paAddress)); } #pragma ENDDUMP Но он выдаёт множество Type mismatch ошибок...
| |
|
|
| |
Пост N: 35
Зарегистрирован: 19.12.06
|
|
Отправлено: 16.02.09 16:29. Заголовок: добавь #include <..
добавь #include <iphlpapi.h>
| |
|
|
| |
Пост N: 11
Зарегистрирован: 23.06.08
|
|
Отправлено: 16.02.09 22:36. Заголовок: Всё равно не пашет
Ещё 14 ошибок выдаёт... Файл прилагаю
| |
|
|
| |
Пост N: 36
Зарегистрирован: 19.12.06
|
|
Отправлено: 17.02.09 10:02. Заголовок: там выдает ошибки об..
там выдает ошибки об отсутствии прототипов xharbour функций - добавь еще #include "hbapiitm.h" #include "hbvm.h"
| |
|
|
| |
Пост N: 13
Зарегистрирован: 23.06.08
|
|
Отправлено: 17.02.09 13:35. Заголовок: Выдает теперь всего ..
Выдает теперь всего одну ошибку: Error: Unresolved external 'GetAdaptersInfo' referenced from W:\IP2.OBJ
| |
|
|
| Администратор
|
Пост N: 1077
Зарегистрирован: 23.05.05
|
|
Отправлено: 17.02.09 14:03. Заголовок: SkyNET пишет: Выдае..
| |
|
|
| |
Пост N: 14
Зарегистрирован: 23.06.08
|
|
Отправлено: 17.02.09 17:49. Заголовок: Спасибо большое всем..
Спасибо большое всем ! Выкладываю рабочий пример: Procedure Main() LOCAL aDim, nI, nJ Clear screen ? "Текущий пользователь: ", HB_ANSITOOEM(NetName(.T.)) ? "Имя компьютера: ", HB_ANSITOOEM(NetName(.F.)) ? aDim:=GetIpStation() For nI:=1 to LEN(aDim) ? "IP адрес "+ALLTRIM(STR(nI))+": "+aDim[nI] Next ? // Вызов функции из библиотеки ..\BCC55\Lib\PSDK\iphlpapi.lib // необходимо ее прилинковать к проекту. aDim := GETMACADDRESSES() For nI:=1 to LEN(aDim) ? "-"+ALLTRIM(STR(nI))+": " //,VALTYPE(aDim[nI]),LEN(aDim[nI]) FOR nJ := 1 TO 5 //LEN(aDim[nI]) ? " "+ALLTRIM(STR(nJ))+"- ",HB_ANSITOOEM(aDim[nI,nJ]) NEXT Next wait Return //Функция определяющая Имя компьютера и имя пользователя //и возвращающая массив IP адресов компа //GetIpStation(@cName,@cUserName)->aHosts FUNCTION GetIpStation(cName,cUserName) LOCAL aHosts:=NIL cName:=NetName(.F.) //F имя компьютера cUserName:=NetName(.T.) //.T. имя пользователя InetInit() aHosts := InetGetHosts(cName) IF aHosts == NIL aHosts := InetGetAlias(cName) ENDIF InetCleanup() RETURN aHosts /////////////////////////////////////////////////////////// #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> #include <shlobj.h> #include <iphlpapi.h> #include "hbapiitm.h" #include "hbvm.h" // Fetches the MAC address and prints it HB_FUNC( GETMACADDRESSES ) { IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information // for up to 16 NICs // http://msdn2.microsoft.com/En-US/library/aa366062.aspx DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer DWORD dwStatus = GetAdaptersInfo( // Call GetAdapterInfo AdapterInfo, // [out] buffer to receive data &dwBufLen); // [in] size of receive data buffer PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to // current adapter info char cMacAddress[18]; PHB_ITEM pItem; PHB_ITEM paAddress = hb_itemArrayNew( 0 ); // Verify return value is valid, no buffer overflow... if (dwStatus != ERROR_SUCCESS) { hb_itemRelease(hb_itemReturn(paAddress)); return; } pItem = hb_itemNew(NULL); do { PHB_ITEM pSubArray = hb_itemArrayNew(10); // Description of NIC hb_arraySet(pSubArray, 1, hb_itemPutC(pItem, pAdapterInfo->Description)); // MAC address sprintf( cMacAddress, "%02X-%02X-%02X-%02X-%02X-%02X", pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]); hb_strUpper( cMacAddress, strlen(cMacAddress)); hb_arraySet(pSubArray, 2, hb_itemPutC(pItem, cMacAddress )); // GUID of NIC hb_arraySet(pSubArray, 3, hb_itemPutC(pItem, pAdapterInfo->AdapterName)); // IP Address hb_arraySet(pSubArray, 4, hb_itemPutC(pItem, pAdapterInfo->IpAddressList.IpAddress.String )); // IP Mask hb_arraySet(pSubArray, 5, hb_itemPutC(pItem, pAdapterInfo->IpAddressList.IpMask.String )); // IP Gateway hb_arraySet(pSubArray, 6, hb_itemPutC(pItem, pAdapterInfo->GatewayList.IpAddress.String )); // DHCP server IP & Lease Obtained if (pAdapterInfo->DhcpEnabled) { hb_arraySet(pSubArray, 7, hb_itemPutC( pItem, pAdapterInfo->DhcpServer.IpAddress.String )); hb_arraySet(pSubArray, 8, hb_itemPutNL(pItem, pAdapterInfo->LeaseObtained )); } else { hb_arraySet(pSubArray, 7, hb_itemPutC( pItem, "" )); hb_arraySet(pSubArray, 8, hb_itemPutNI(pItem, 0 )); } // WINS server info - Primary & Secondary ip address if (pAdapterInfo->HaveWins) { hb_arraySet(pSubArray, 9, hb_itemPutC( pItem, pAdapterInfo->PrimaryWinsServer.IpAddress.String )); hb_arraySet(pSubArray, 10, hb_itemPutC( pItem, pAdapterInfo->SecondaryWinsServer.IpAddress.String )); } else { hb_arraySet(pSubArray, 9, hb_itemPutC( pItem, "" )); hb_arraySet(pSubArray, 10, hb_itemPutC( pItem, "" )); } hb_arrayAdd(paAddress, pSubArray); hb_itemRelease(pSubArray); pAdapterInfo = pAdapterInfo->Next; // Progress through // linked list } while(pAdapterInfo); // Terminate if last adapter hb_itemRelease(pItem); hb_itemRelease(hb_itemReturn(paAddress)); } #pragma ENDDUMP
| |
|
|
| |
Пост N: 15
Зарегистрирован: 23.06.08
|
|
Отправлено: 19.02.09 14:47. Заголовок: Кто может подсказать..
Кто может подсказать расшифровку: -1: 1- Realtek RTL8169/8110 Family Gigabit Ethernet NIC - Минипорт планировщика пакетов 2- 00-16-17-93-26-BE 3- {F51B2DB7-F494-4E60-BB11-AEBEC436ACBF} 4- 11.61.201.3 5- 255.255.255.0 -2: 1- WAN (PPP/SLIP) Interface 2- 00-53-45-00-00-00 3- {D93658A8-7789-4FBF-8AD4-9A12CABA8A2D} 4- 61.25.245.40 5- 255.255.255.255 1) Это - сетевуха 2) Физический адрес (МАС) сетевухи 3) ??? - Что ЭТО ? 4) и 5) сами адреса.
| |
|
|
| |
Пост N: 32
Зарегистрирован: 17.10.05
|
|
Отправлено: 19.02.09 16:06. Заголовок: Я предполагаю догадк..
Я предполагаю догадку, что это ОЕМ-код PCI-устройства.
| |
|
|
|
| |
Пост N: 93
Зарегистрирован: 05.06.07
|
|
Отправлено: 24.02.09 07:26. Заголовок: 5 - маска подсетки..
5 - маска подсетки
| |
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.09 12:13. Заголовок: А можно ли узнать ma..
А можно ли узнать macaddress карты принтсервера зная его IP ?
| |
|
|
| постоянный участник
|
Пост N: 690
Зарегистрирован: 09.10.06
|
|
Отправлено: 15.06.09 13:23. Заголовок: пробуйте nbtstat -a ..
пробуйте nbtstat -a ххх.ххх.ххх.ххх
| |
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.09 14:03. Заголовок: Не, не пойдет. Для л..
Не, не пойдет. Для любого принтера дает MAC 00-00-00-00-00
| |
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 15.06.09 15:48. Заголовок: Похоже, это можно ре..
Похоже, это можно решить через ARP. Правда таблица соответствий IP-MAC хранится тока на текущий момент, но ее всегда можно обновить пинганув любой из известных IP. Хотелось бы еще определять уникальность всяких локальных USB устройств(сканеров, принтеров)
| |
|
|
| постоянный участник
|
Пост N: 5859
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.05.18 15:06. Заголовок: Всем привет. Передел..
Всем привет. Переделал функцию для Харбора: // Функция возвращающая массив IP адресов компа FUNCTION GetIpStation() LOCAL cName, aHosts := NIL cName:=NetName(.F.) //F имя компьютера InetInit() aHosts := InetGetHosts(cName) IF aHosts == NIL aHosts := InetGetAlias(cName) ENDIF InetCleanup() RETURN aHosts Не собирается прога, пишет ошибку: Harbour 3.2.0dev (r1803161710) Copyright (c) 1999-2018, https://harbour.github.io/ OBJ\demo.c: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_INETINIT' referenced from W:\HB_PROJECT\PROJECT\GETINFOAPPLICATION\OBJ\DEMO.OBJ Error: Unresolved external '_HB_FUN_INETGETHOSTS' referenced from W:\HB_PROJECT\PROJECT\GETINFOAPPLICATION\OBJ\DEMO.OBJ Error: Unresolved external '_HB_FUN_INETGETALIAS' referenced from W:\HB_PROJECT\PROJECT\GETINFOAPPLICATION\OBJ\DEMO.OBJ Error: Unresolved external '_HB_FUN_INETCLEANUP' referenced from W:\HB_PROJECT\PROJECT\GETINFOAPPLICATION\OBJ\DEMO.OBJ hbmk2[demo]: Error: Running linker. 2 Прочитал совет Pasha пишет: цитата: | Если при линковке вы увидите такую ошибку, то не спешите задавать вопрос "У меня такая-то ошибка, что мне делать ?" Сначала поищите в каталоге Harbour\lib текст "HB_FUN_<имя>" Если в какой-то либе такой текст найдется, просто добавьте ее в список библиотек для сборки программы |
| Список большой получается: hbextern.lib hbrtl.lib hbssl.lib hbssls.lib hbtip.lib xhb.lib Какую библиотеку нужно добавить к себе в проект, чтобы заработала эта функция ?
| |
|
|
| постоянный участник
|
Пост N: 5860
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.05.18 15:13. Заголовок: Вопрос снят. Нашёл м..
Вопрос снят. Нашёл методом перебора - xhb.lib !
| |
|
|
|