在cmd中可以看到自己電腦正在使用的IP地址,如果有多個網卡,比如虛擬網卡就會有多個IP地址。
先來看看怎麼得到正在使用的IP地址:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib") //調用winsock函數的依賴庫
// 獲取當前IP
void getIp(char *ip)
{
if (WSAStartup(MAKEWORD(2, 2), &WSADATA()) != 0)
{
printf("套接字庫加載失敗!\n");
return;
}
struct hostent * host = gethostbyname("");
if (host == NULL)
{
printf("獲取 IP地址失敗!\n");
return;
}
char *p = inet_ntoa(*(struct in_addr*)(*host->h_addr_list));
strncpy(ip,p,strlen(p));
WSACleanup();
}
int main()
{
char ip[20] = {0};
getIp(ip);
printf("%s\n",ip);
system("pause");
return 0;
}
獲取所有的IP地址:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib") //調用winsock函數的依賴庫
// 獲取所有IP
void getAIps(char ip[][20])
{
if (WSAStartup(MAKEWORD(2, 2), &WSADATA()) != 0)
{
printf("套接字庫加載失敗!\n");
return;
}
struct hostent * host = gethostbyname("");
if (host == NULL)
{
printf("獲取 IP地址失敗!\n");
return;
}
int i = 0;
while(host->h_addr_list[i] != NULL)
{
char *p = inet_ntoa(*(struct in_addr*)(host->h_addr_list[i]));
strncpy(*ip++, p, strlen(p));
i++;
}
WSACleanup();
}
int main()
{
char allIp[10][20];
memset(allIp, 0, sizeof(allIp));
getAIps(allIp);
for (int i = 0; allIp[i][0] != '\0'; i++)
{
printf("%s\n", allIp[i]);
}
system("pause");
return 0;
}