Since I did not have an answer to my previous question, I will rephrase it.
What order of IP addresses (if IP addresses are bound to the same interface) is used when running gethostbyname () using the computer name (NetBIOS name)?
I have this code:
#include <iostream>
#include <winsock.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
char hostname[255];
struct hostent *he;
struct in_addr **addr_list;
WSAData data;
WSAStartup(MAKEWORD(2, 2), &data);
gethostname(hostname, 255);
std::cout << "Host name: " << hostname << std::endl;
if ((he = gethostbyname(hostname)) == NULL) {
std::cout << "gethostbyname error" << std::endl;
} else {
std::cout << "IP addresses: " << std::endl;
addr_list = (struct in_addr **)he->h_addr_list;
for(int i = 0; addr_list[i] != NULL; i++) {
std::cout << inet_ntoa(*addr_list[i]) << std::endl;
}
}
std::cin.get();
}
And this gives me different results in Windows Server 2012 and Windows Server 2008 / Windows 7. On my home PC with Windows 7, an increasing order is used:
Host name: SplattWin
IP addresses:
192.168.1.140
192.168.3.1
192.168.3.2
192.168.3.3
192.168.3.4
However, on a Windows 2012 server, it gives me IP addresses in descending order:
Host name: WinServ
IP addresses:
1.1.1.4
1.1.1.3
1.1.1.2
1.1.1.1
Is there a way to reorder? I tried the skipassource flag when I added these IP addresses, but in this case it does not work.
, gethostname(), gethostbyname(), IP- ( ). , , IP- .