C++在windows下获取本地主机ipv4地址和ipv6地址
发布时间:2020-12-16 07:44:07 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 C++在windows下获取本地主机ipv4地址和ipv6地址 #include Winsock2.h#include stdio.h#include iostream#include cstring#includews2tcpip.h#pragma c
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
C++在windows下获取本地主机ipv4地址和ipv6地址
#include <Winsock2.h> #include <stdio.h> #include <iostream> #include <cstring> #include<ws2tcpip.h> #pragma comment(lib,"ws2_32.lib ") //linking to the library using namespace std; int get_ip() { struct addrinfo *ailist,*aip; struct addrinfo hint; struct sockaddr_in6 *sinp6; PHOSTENT hostinfo; char hostname[255] = {0}; //主机名 char *port = "3294"; //端口号 const char *addr; int ilRc; gethostname(hostname,sizeof(hostname)); if((hostinfo = gethostbyname(hostname)) == NULL) //获得本地ipv4地址 { errno = GetLastError(); fprintf(stderr,"gethostbyname Error:%dn",errno); return 1; } LPCSTR ip; while(*(hostinfo->h_addr_list) != NULL) //输出ipv4地址 { ip = inet_ntoa(*(struct in_addr *) *hostinfo->h_addr_list); printf("ipv4 addr = %snn",ip); hostinfo->h_addr_list++; } hint.ai_family = AF_INET6; /* hint 的限定设置 */ hint.ai_socktype = SOCK_STREAM; /* 这里可是设置 socket type 比如 SOCK——DGRAM */ hint.ai_flags = AI_PASSIVE; // flags 的标志很多 。常用的有AI_CANONNAME; hint.ai_protocol = 0; /* 设置协议 一般为0,默认 */ hint.ai_addrlen = 0; /* 下面不可以设置,为0,或者为NULL */ hint.ai_canonname = NULL; hint.ai_addr = NULL; hint.ai_next = NULL; ilRc = getaddrinfo(hostname,port,&hint,&ailist); /*通过主机名获得地址信息*/ if (ilRc < 0) { char str_error[100]; strcpy(str_error,(char *)gai_strerror(errno)); printf("str_error = %s",str_error); return 0; } if(ailist == NULL) { printf("sorry not find the IP address,please try again n"); } for (aip = ailist; aip != NULL; aip = aip->ai_next) /* 显示获取的信息 */ { aip->ai_family == AF_INET6; sinp6 = (struct sockaddr_in6 *)aip->ai_addr; /* 为什么是for 循环 ,先向下看 */ int i; printf("ipv6 addr = "); for(i = 0; i < 16; i++) { if(((i-1)%2) && (i>0)) { printf(":"); } printf("%02x",sinp6->sin6_addr.u.Byte[i]); } printf(" n"); printf(" n"); } while(1); } int main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1,1 ); err = WSAStartup( wVersionRequested,&wsaData );//initiate the ws2_32.dll and match the version if ( err != 0 ) { return 0; } if ( LOBYTE( wsaData.wVersion ) != 1 || //if the version is not matched,then quit and terminate the ws3_32.dll HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 0; } get_ip(); return 0; } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |