这里用的两个函数:gethostbyname/gethostbyaddr,GetAdaptersInfo,这里主要通过获取IP看链表的操作
获取所有IP地址的函数,如下:
int CIPInfo::GetIPInfo(const char * szHostName)
{
#define HOST_NAME_MAX 256
char szHost[HOST_NAME_MAX];
HOSTENT* pHost;
//LPSTR szIPAddr = NULL;
char* szIPAddr = NULL;
in_addr addr;
memset(szHost, 0, ARRSIZE(szHost));
if (szHostName)
{
if (isalpha(szHostName[0])) /* host address is a name */
{
#ifdef _DEBUG
TRACE("Calling gethostbyname with %s\n", szHostName);
#endif // _DEBUG
pHost = gethostbyname(szHostName);
}
else if (isdigit(szHostName[0])) /* host address is a digit */
{
#ifdef _DEBUG
TRACE("Calling gethostbyaddr with %s\n", szHostName);
#endif // _DEBUG
addr.s_addr = inet_addr(szHostName);
if (addr.s_addr == INADDR_NONE)
{
#ifdef _DEBUG
TRACE("The IPv4 address entered must be a legal address\n");
#endif // _DEBUG
return -1;
}
else
{
pHost = gethostbyaddr((char *) &addr, 4, AF_INET);
}
}
else
{
TRACE("The IPv4 address entered Error!\n");
return -1;
}
}
else
{
::gethostname(szHost, HOST_NAME_MAX);
pHost = gethostbyname(szHost);
}
if (pHost->h_addrtype == AF_INET)
{
int i = 0;
//char *p = NULL;
while ( (szIPAddr = pHost->h_addr_list[i]) != 0) //Addresses are in network byte order
{
memcpy(&addr.s_addr,