如果你配置了localhost,则获得的hostname为local host IP为127.0.0.1
但是你使用getipaddress来获得,如下:
// TODO: 获得本机的IP地址。子网掩码。广播地址
STDMETHODIMP CSysInfo::GetIPsAddress(BSTR *pIPAddress,BSTR *pSubnetVal,BSTR *pBroadcastAddr,int* pIPsCounter)
{
wchar_t strIPAddress[1000];
::ZeroMemory(&strIPAddress,sizeof(strIPAddress));
wchar_t strSubnetMask[1000];
::ZeroMemory(&strSubnetMask,sizeof(strSubnetMask));
wchar_t strBroadcastAddr[1000];
::ZeroMemory(&strBroadcastAddr,sizeof(strBroadcastAddr));
char cBuffer[10000];
::ZeroMemory(&cBuffer,sizeof(cBuffer));
PMIB_IPADDRTABLE pTable = (PMIB_IPADDRTABLE)cBuffer;
DWORD dwSize = sizeof(cBuffer);
if(GetIpAddrTable(pTable,&dwSize,FALSE) == NO_ERROR)
{
wchar_t strIPItem[100];
*pIPsCounter = pTable->dwNumEntries;
for(int i=0;i< *pIPsCounter;i++)
{
DWORD addr = pTable->table[i].dwAddr;
DWORD subnet = pTable->table[i].dwMask;
DWORD broadcast = pTable->table[i].dwBCastAddr;
// Filter 127.0.0.1
if (addr != 0x0100007f)
{
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(addr & 0xFF),((addr >> 8) & 0xFF),((addr >> 16) & 0xFF),((addr >> 24) & 0xFF));
wcscat(strIPAddress,strIPItem);
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(subnet & 0xFF),((subnet >> 8) & 0xFF),((subnet >> 16) & 0xFF),((subnet >> 24) & 0xFF));
wcscat(strSubnetMask,strIPItem);
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(broadcast & 0xFF),((broadcast >> 8) & 0xFF),((broadcast >> 16) & 0xFF),((broadcast >> 24) & 0xFF));
wcscat(strBroadcastAddr,strIPItem);
}
}
}
*pIPAddress = SysAllocString(strIPAddress);
*pSubnetVal = SysAllocString(strSubnetMask);
*pBroadcastAddr = SysAllocString(strBroadcastAddr);
return S_OK;
}