On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение



Пост N: 4
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 04.10.10 05:44. Заголовок: Как получить список IP-шников на локальной машинке?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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
Конечно, можно разбирать таблицу в этой функции и возвращать двумерный массив, но тогда код получится побольше.

Функцию я набросал, но не проверял


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1660
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.10.10 08:13. Заголовок: надо добавить #inclu..


надо добавить
#include "windows.h"

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1563
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.10.10 13:31. Заголовок: SADSTAR33 пишет: во..


SADSTAR33 пишет:

 цитата:
вот что получилось



А как собирать ? В смысле какую библиотеку еще присоединять ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1884
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.10.10 14:25. Заголовок: Andrey пишет: В смы..


Andrey пишет:

 цитата:
В смысле какую библиотеку еще присоединять ?


Угадай с 3-х раз :)

PS
Определить можно за 5 секунд.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1663
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.10.10 14:44. Заголовок: Я забыл вставить еще..


Я забыл вставить еще раз освобождение памяти:
после
hb_retclen( (char *) pIPAddrTable, ulSize);
надо еще раз вызвать
GlobalFree( pIPAddrTable );


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 10
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 08.10.10 03:56. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как собирать ? В смысле какую библиотеку еще присоединять ?


iphlpapi.lib
лежала в C:\Borland\BCC55\Lib\PSDK
копирнул в C:\Borland\BCC55\Lib
чтобы доп.пути не прописывать



Спасибо: 0 
ПрофильЦитата Ответить



Пост 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

Но не нашел в исходниках - откуда берется информация чтобы понять что есть что в выдаче.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 */


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 36
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет