Автор | Сообщение |
|
| |
Пост N: 4
Зарегистрирован: 28.07.10
|
|
Отправлено: 04.10.10 05:44. Заголовок: Как получить список IP-шников на локальной машинке?
|
|
|
Ответов - 12
[только новые]
|
|
|
| Администратор
|
Пост N: 1659
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.10.10 08:37. Заголовок: Примерно так: #prag..
Примерно так: #pragma BEGINDUMP #include "hbapi.h" #include "iphlpapi.h" HB_FUNC( GETIPADDRTABLE ) { PMIB_IPADDRTABLE pIpAddrTable; ULONG * pulSize; BOOL bOrder = hb_parl(1); GetIpAddrTable( pIpAddrTable, ( PULONG ) pulSize, bOrder ); hb_retclen( (char *) pIpAddrTable, *pulSize); } #pragma ENDDUMP и затем разбирать таблицу pIpAddrTable из строки. Ее структуру см. в iprtrmib.h Конечно, можно разбирать таблицу в этой функции и возвращать двумерный массив, но тогда код получится побольше. Функцию я набросал, но не проверял
|
|
|
|
| |
Пост N: 6
Зарегистрирован: 28.07.10
|
|
Отправлено: 05.10.10 07:13. Заголовок: Файл GetipTable.prg ..
Файл GetipTable.prg ---------------------------- #include <minigui.ch> function GetIPTable() local cResult:="" cResult:=GetIPaddrTable() return Nil //------------------------------------------------- #pragma BEGINDUMP #include "hbapi.h" #include "iphlpapi.h" HB_FUNC( GETIPADDRTABLE ) { PMIB_IPADDRTABLE pIpAddrTable; ULONG * pulSize; BOOL bOrder = hb_parl(1); GetIpAddrTable( pIpAddrTable, ( PULONG ) pulSize, bOrder ); hb_retclen( (char *) pIpAddrTable, *pulSize); } #pragma ENDDUMP ------------------------------- при компиляции выдает следующее ------------------------------- C:\MiniGUI54\Harbour\BIN\HARBOUR.EXE /iC:\MiniGUI54\Harbour\INCLUDE;C:\MiniGUI54\INCLUDE;D:\MiniGUI_Projects\proba_IPtable /n D:\MiniGUI_Projects\proba_IPtable\GetIPTable.Prg -oD:\MiniGUI_Projects\proba_IPtable\OBJ\GetIPTable.c C:\Borland\BCC55\BIN\BCC32.EXE -c -O2 -tW -M -IC:\Borland\BCC55\INCLUDE -IC:\MiniGUI54\Harbour\INCLUDE;C:\MiniGUI54\INCLUDE;D:\MiniGUI_Projects\proba_IPtable -LC:\Borland\BCC55\LIB -oD:\MiniGUI_Projects\proba_IPtable\OBJ\GetIPTable.obj D:\MiniGUI_Projects\proba_IPtable\OBJ\GetIPTable.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland D:\MiniGUI_Projects\proba_IPtable\OBJ\GetIPTable.c: Error E2258 C:\Borland\BCC55\INCLUDE\ras.h 54: Declaration was expected in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 63: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 64: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 65: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 83: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 84: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 85: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 167: Declaration missing ; in function DECLARE_HANDLE Error E2238 C:\Borland\BCC55\INCLUDE\ras.h 169: Multiple declaration for 'DWORD' in function DECLARE_HANDLE Error E2344 C:\Borland\BCC55\INCLUDE\ras.h 167: Earlier declaration of 'DWORD' in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 169: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 170: Declaration missing ; in function DECLARE_HANDLE Error E2238 C:\Borland\BCC55\INCLUDE\ras.h 171: Multiple declaration for 'WCHAR' in function DECLARE_HANDLE Error E2344 C:\Borland\BCC55\INCLUDE\ras.h 170: Earlier declaration of 'WCHAR' in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 171: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 180: Declaration missing ; in function DECLARE_HANDLE Error E2238 C:\Borland\BCC55\INCLUDE\ras.h 182: Multiple declaration for 'DWORD' in function DECLARE_HANDLE Error E2344 C:\Borland\BCC55\INCLUDE\ras.h 180: Earlier declaration of 'DWORD' in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 182: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 183: Declaration missing ; in function DECLARE_HANDLE Error E2238 C:\Borland\BCC55\INCLUDE\ras.h 184: Multiple declaration for 'CHAR' in function DECLARE_HANDLE Error E2344 C:\Borland\BCC55\INCLUDE\ras.h 183: Earlier declaration of 'CHAR' in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 184: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 205: Declaration missing ; in function DECLARE_HANDLE Error E2139 C:\Borland\BCC55\INCLUDE\ras.h 206: Declaration missing ; in function DECLARE_HANDLE Error E2228 C:\Borland\BCC55\INCLUDE\ras.h 206: Too many error or warning messages in function DECLARE_HANDLE *** 26 errors in Compile *** ** error 1 ** deleting D:\MiniGUI_Projects\proba_IPtable\OBJ\GetIPTable.obj
|
|
|
|
| Администратор
|
Пост N: 1660
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.10.10 08:13. Заголовок: надо добавить #inclu..
надо добавить #include "windows.h"
|
|
|
|
| |
Пост N: 8
Зарегистрирован: 28.07.10
|
|
Отправлено: 05.10.10 10:16. Заголовок: Добавил ниже #pragma..
Добавил ниже #pragma BEGINDUMP Скомпилил в МиниГУИ1.54 При вызове - ошибка Application Exception - Called from GETIPADDRTABLE(0) Called from GETIPTABLE(4) Called from START(20) Called from (b)MAIN(43) Called from _DOCONTROLEVENTPROCEDURE(1552) Called from EVENTS(1582) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1273) Called from MAIN(15)
|
|
|
|
| Администратор
|
Пост N: 1662
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.10.10 11:32. Заголовок: Надо память выделять..
Надо память выделять под 1 элемент таблицы для начального вызова: #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" #include "iphlpapi.h" HB_FUNC( GETIPADDRTABLE ) { PMIB_IPADDRTABLE pIPAddrTable; ULONG ulSize = 0; BOOL bOrder = hb_parl(1); pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof( MIB_IPADDRTABLE) ); if (GetIpAddrTable(pIPAddrTable, &ulSize, bOrder) == ERROR_INSUFFICIENT_BUFFER) { GlobalFree( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( ulSize ); } if ( GetIpAddrTable( pIPAddrTable, &ulSize, bOrder ) == NO_ERROR ) { hb_retclen( (char *) pIPAddrTable, ulSize); } else { hb_retc(""); } } #pragma ENDDUMP
|
|
|
|
| |
Пост N: 9
Зарегистрирован: 28.07.10
|
|
Отправлено: 07.10.10 06:21. Заголовок: вот что получилось - GetIPTable
вот что получилось - GetIPTable function GetIPTable(lSort) //возвращает массив локальных IP-адресов {{ip,mask}} в десятично-точечной нотации //отсортированый если lSort:=.t. local cResult:="", IPqty, ar:={}, s:="", n, i if lSort==Nil; lSort:=.f.; endif cResult:=GetIPaddrTable(lSort) IPqty:=GetDWord(cResult, 1) for i:=1 to IPqty n:=(i-1)*24+5 aAdd(ar,{GetIpAddr(cResult,n), GetIpAddr(cResult,n+8)}) next return ar //------------------------------------------------- static function GetDWord(cStr, nPos) local nResult nResult:=asc(substr(cStr,nPos+0,1))+asc(substr(cStr,nPos+1,1))*256+asc(substr(cStr,nPos+2,1))*256*256+asc(substr(cStr,nPos+3,1))*256*256*256 return nResult //------------------------------------------------- static function GetIpAddr(cStr, nPos) local cResult cResult:=alltrim(str(asc(substr(cStr,nPos+0,1)))); +"."+alltrim(str(asc(substr(cStr,nPos+1,1)))); +"."+alltrim(str(asc(substr(cStr,nPos+2,1)))); +"."+alltrim(str(asc(substr(cStr,nPos+3,1)))) return cResult //------------------------------------------------- #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" #include "iphlpapi.h" HB_FUNC( GETIPADDRTABLE ) { PMIB_IPADDRTABLE pIPAddrTable; ULONG ulSize = 0; BOOL bOrder = hb_parl(1); pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof( MIB_IPADDRTABLE) ); if (GetIpAddrTable(pIPAddrTable, &ulSize, bOrder) == ERROR_INSUFFICIENT_BUFFER) { GlobalFree( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( ulSize ); } if ( GetIpAddrTable( pIPAddrTable, &ulSize, bOrder ) == NO_ERROR ) { hb_retclen( (char *) pIPAddrTable, ulSize); } else { hb_retc(""); } } #pragma ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 1563
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.10.10 13:31. Заголовок: SADSTAR33 пишет: во..
SADSTAR33 пишет: А как собирать ? В смысле какую библиотеку еще присоединять ?
|
|
|
|
| |
Пост N: 1884
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.10.10 14:25. Заголовок: Andrey пишет: В смы..
Andrey пишет: цитата: | В смысле какую библиотеку еще присоединять ? |
| Угадай с 3-х раз :) PS Определить можно за 5 секунд.
|
|
|
|
| Администратор
|
Пост N: 1663
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.10.10 14:44. Заголовок: Я забыл вставить еще..
Я забыл вставить еще раз освобождение памяти: после hb_retclen( (char *) pIPAddrTable, ulSize); надо еще раз вызвать GlobalFree( pIPAddrTable );
|
|
|
|
| |
Пост N: 10
Зарегистрирован: 28.07.10
|
|
Отправлено: 08.10.10 03:56. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как собирать ? В смысле какую библиотеку еще присоединять ? |
| iphlpapi.lib лежала в C:\Borland\BCC55\Lib\PSDK копирнул в C:\Borland\BCC55\Lib чтобы доп.пути не прописывать
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 28.07.10
|
|
Отправлено: 13.10.10 03:43. Заголовок: оказывается изобрели очередной велосипед :(
оказывается изобрели очередной велосипед :( Поясняю. В связи с отсутствием приемлемой документации пытался изучать исходники. нашел функцию HB_SOCKETGETIFACES( [ nFamily ], [ lNoAliases ] ) --> aIfaces которая выдает массив с описанием существующих интерфейсов Пример +-1:A= ¦ +-1:N= 2 ¦ +-2:C=80.237.3.238 ¦ +-3:N= 19 ¦ +-4:C=80.237.3.238 ¦ +-5:C=255.255.255.240 ¦ +-6:C=255.255.255.255 ¦ +-7:U=NIL ¦ L-8:U=NIL +-2:A= ¦ +-1:N= 2 ¦ +-2:C=192.168.0.20 ¦ +-3:N= 19 ¦ +-4:C=192.168.0.20 ¦ +-5:C=255.255.255.0 ¦ +-6:C=255.255.255.255 ¦ +-7:U=NIL ¦ L-8:U=NIL L-3:A= +-1:N= 2 +-2:C=127.0.0.1 +-3:N= 23 +-4:C=127.0.0.1 +-5:C=255.0.0.0 +-6:C=255.255.255.255 +-7:U=NIL L-8:U=NIL Но не нашел в исходниках - откуда берется информация чтобы понять что есть что в выдаче.
|
|
|
|
|
| постоянный участник
|
Пост N: 973
Зарегистрирован: 09.10.06
|
|
Отправлено: 13.10.10 23:30. Заголовок: SADSTAR33 пишет: Но..
SADSTAR33 пишет: цитата: | Но не нашел в исходниках - откуда берется информация чтобы понять что есть что в выда |
| Обратите внимание на hbsocket.ch /* Harbour interface information indexes */ #define HB_SOCKET_IFINFO_FAMILY 1 /* adress family */ #define HB_SOCKET_IFINFO_NAME 2 /* interface name */ #define HB_SOCKET_IFINFO_FLAGS 3 /* flags HB_SOCKET_IFF_* */ #define HB_SOCKET_IFINFO_ADDR 4 /* interface address */ #define HB_SOCKET_IFINFO_NETMASK 5 /* subnetmask */ #define HB_SOCKET_IFINFO_BROADCAST 6 /* broadcast address */ #define HB_SOCKET_IFINFO_P2PADDR 7 /* point-to-point address */ #define HB_SOCKET_IFINFO_HWADDR 8 /* hardware address */
|
|
|
|