在C语言中获取内网IP地址可以通过调用系统API来实现。以下是在Windows和Linux系统中获取内网IP地址的示例代码。
在Windows系统中,可以使用Winsock API来获取本地IP地址。
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed.\n");
return 1;
}
char hostname[256];
if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) {
printf("gethostname failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
struct addrinfo hints, *res, *ptr;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET; // 使用IPv4
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
int status = getaddrinfo(hostname, NULL, &hints, &res);
if (status != 0) {
printf("getaddrinfo failed with error: %s\n", gai_strerror(status));
WSACleanup();
return 1;
}
for (ptr = res; ptr != NULL; ptr = ptr->ai_next) {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)ptr->ai_addr;
char ipstr[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(ipv4->sin_addr), ipstr, INET_ADDRSTRLEN);
printf("Local IP address: %s\n", ipstr);
}
freeaddrinfo(res);
WSACleanup();
return 0;
}
在Linux系统中,可以使用getaddrinfo
函数来获取本地IP地址。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main() {
char hostname[256];
if (gethostname(hostname, sizeof(hostname)) != 0) {
perror("gethostname");
return 1;
}
struct addrinfo hints, *res, *ptr;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET; // 使用IPv4
hints.ai_socktype = SOCK_STREAM;
int status = getaddrinfo(hostname, NULL, &hints, &res);
if (status != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
return 1;
}
for (ptr = res; ptr != NULL; ptr = ptr->ai_next) {
struct sockaddr_in *ipv4 = (struct sockaddr_in *)ptr->ai_addr;
char ipstr[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &(ipv4->sin_addr), ipstr, INET_ADDRSTRLEN);
printf("Local IP address: %s\n", ipstr);
}
freeaddrinfo(res);
return 0;
}
通过上述代码和解释,你应该能够在C语言中成功获取内网IP地址,并理解相关的基础概念和应用场景。
领取专属 10元无门槛券
手把手带您无忧上云