生活随笔
收集整理的這篇文章主要介紹了
C++获取本机所有ip地址,可区分类型是有线无线虚拟机还是回环
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一個小程序,可以獲取本地所有ip地址,包括有線,無線,虛擬機,環(huán)回接口網(wǎng)卡,等。
如圖,一臺機器多個網(wǎng)卡:
程序執(zhí)行結(jié)果:
#include"stdio.h"
#include"string.h"
#include"Winsock2.h"
#pragma comment(lib,"WS2_32.lib")void main()
{
printf(
"********************************\n");
printf(
"方法一,精確輸出\n");WSADATA wsaData;
if(WSAStartup(MAKEWORD(
2,
2),&wsaData)==SOCKET_ERROR){
exit(
0);}
int nLen=
256;
char hostname[
20];gethostname(hostname,nLen); hostent *pHost = gethostbyname(hostname);LPSTR lpAddr = pHost->h_addr_list[
0];
struct in_addr inAddr;memmove(&inAddr,lpAddr,
4);
printf(
"有 線 IP地址:%s\n",inet_ntoa(inAddr));memmove(&inAddr,lpAddr+
4,
4);
printf(
"無 線 IP地址:%s\n",inet_ntoa(inAddr));memmove(&inAddr,lpAddr+
8,
4);
printf(
"環(huán) 回 IP地址:%s\n",inet_ntoa(inAddr));memmove(&inAddr,lpAddr+
12,
4);
printf(
"虛擬機1 IP地址:%s\n",inet_ntoa(inAddr));memmove(&inAddr,lpAddr+
16,
4);
printf(
"虛擬機2 IP地址:%s\n",inet_ntoa(inAddr));
printf(
"********************************\n\n");
printf(
"********************************\n");
printf(
"方法二,打印所有Ip,驗證第一次輸出\n");
char szHost[
256] = {
0};hostent *lpHost = gethostbyname(szHost);
memset(szHost,
0,
sizeof(szHost));::gethostname(szHost,
256);in_addr addr;
for(
int i =
0; ; i++){
char *p = lpHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, lpHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(
"本機IP地址:%s \n", szIp);}
printf(
"********************************\n");::WSACleanup();
}
總結(jié)
以上是生活随笔為你收集整理的C++获取本机所有ip地址,可区分类型是有线无线虚拟机还是回环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。