пятница, 28 февраля 2014 г.

Получение IP



*.cpp
подключаем
#include 
Получение IP адресов всех сетевых карт
*.h
public:  // User declarations
TStringList *GetIp();

*.cpp
//---------------------------------------------------------------------------
TStringList *TForm1::GetIp()
{
TStringList *ip_list= new TStringList();

TStrings *key_name = new TStringList();
TRegistry *reg = new TRegistry();
int kl_key;
reg->RootKey=HKEY_LOCAL_MACHINE;
reg->OpenKeyReadOnly("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards");
reg->GetKeyNames(key_name);
kl_key=key_name->Count;
delete reg;
delete key_name;


 WORD wVersionRequested;
 WSADATA wsaData;
 wVersionRequested = MAKEWORD(1, 0);
 int err = WSAStartup(wVersionRequested, &wsaData);
 if(err == 0)
 {
  char hn[1024];
  struct hostent *adr;
  if(gethostname((char *)&hn, 1024))
  {
   int err = WSAGetLastError();
   Beep();
  };
  adr = gethostbyname(hn);
  if(adr)
  {
    for (int i = 0; i < kl_key; i++)
    {
    char *LocalIp = new char[15];
    sprintf(LocalIp,"%d.%d.%d.%d",
    (unsigned char)adr->h_addr_list[i][0],
    (unsigned char)adr->h_addr_list[i][1],
    (unsigned char)adr->h_addr_list[i][2],
    (unsigned char)adr->h_addr_list[i][3]);
    ip_list->Add(LocalIp);
    delete LocalIp;

    }
    return ip_list; //Выводим IP адрес

  }
 }
WSACleanup();

}
Получение IP для одной сетевой
//---------------------------------------------------------------------------
String TForm1::GetIp()
{
String out = "WinSock ERR";
WSADATA wsaData;
if (!WSAStartup(WINSOCK_VERSION, &wsaData)){char chInfo[64];
if (!gethostname(chInfo, sizeof(chInfo)))
{
hostent *sh;
sh=gethostbyname((char*)&chInfo);
if (sh!=NULL)
{
int nAdapter = 0;
while (sh->h_addr_list[nAdapter])
{
struct sockaddr_in adr;
memcpy(&adr.sin_addr, sh->h_addr_list[nAdapter], sh->h_length);
out = inet_ntoa(adr.sin_addr);
nAdapter++;
}
}
}
}
WSACleanup();
return out;
}
//---------------------------------------------------------------------------

Комментариев нет:

Отправить комментарий