13 #include <netinet/in.h>
14 #include <arpa/inet.h>
23 WORD wVersionRequested;
26 wVersionRequested = MAKEWORD(2,2);
27 if(WSAStartup(wVersionRequested, &wsaData) != 0) {
28 cerr <<
"COULD NOT LOAD WINSOCK LIBRARY!" << endl;
43 if (gethostname(ac,
sizeof(ac)) == SOCKET_ERROR) {
44 cerr <<
"Error " << WSAGetLastError() <<
45 " when getting local host name." << endl;
48 cout <<
"Host name is " << ac <<
"." << endl;
52 if (0 != getaddrinfo(ac,
nullptr,
nullptr, &addrInfo)) {
53 cerr <<
"Yow! Bad host lookup." << endl;
57 while(addrInfo !=
nullptr) {
58 switch(addrInfo->ai_family) {
67 DWORD strlen = (DWORD)(
sizeof(str) /
sizeof(WCHAR));
68 WSAAddressToStringW(addrInfo->ai_addr,
69 (DWORD)addrInfo->ai_addrlen,
73 std::wstring_convert<std::codecvt_utf8<wchar_t>,
wchar_t> converter;
74 out.emplace_back(converter.to_bytes(str));
77 addrInfo = addrInfo->ai_next;
81 struct ifaddrs * ifAddrStruct=
nullptr;
82 struct ifaddrs * ifa=
nullptr;
83 void * tmpAddrPtr=
nullptr;
85 getifaddrs(&ifAddrStruct);
87 for (ifa = ifAddrStruct; ifa !=
nullptr; ifa = ifa->ifa_next) {
88 if (ifa ->ifa_addr->sa_family==AF_INET) {
90 tmpAddrPtr=&((
struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
91 char addressBuffer[INET_ADDRSTRLEN];
92 inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
93 if(strcmp(addressBuffer,
"127.0.0.1") == 0)
95 out.emplace_back(addressBuffer);
96 }
else if (ifa->ifa_addr->sa_family==AF_INET6 && allowIPv6) {
98 tmpAddrPtr=&((
struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
99 char addressBuffer[INET6_ADDRSTRLEN];
100 inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
101 if(strcmp(addressBuffer,
"::1") == 0)
103 out.emplace_back(addressBuffer);
106 if (ifAddrStruct!=
nullptr) freeifaddrs(ifAddrStruct);
std::list< std::string > getIpAddresses(bool allowIPv6=false)