C语言获取本机ip
一、参考网址
二、源码
1 #include <stdio.h> 2 #include <stdint.h> 3 #include <stdlib.h> 4 #include <stdarg.h> 5 #include <time.h> 6 #include <sys/time.h> 7 #include <pthread.h> 8 #include <netinet/in.h> 9 #include <arpa/inet.h> 10 #include <sys/socket.h> 11 #include <netdb.h> 12 #include <signal.h> 13 #include <sys/types.h> 14 #include <unistd.h> 15 #include <ctype.h> 16 #include <ifaddrs.h> 17 #include <string.h> 18 #include <assert.h> 19 #include <poll.h> 20 #include <errno.h> 21 22 static char *getip() 23 { 24 struct ifaddrs *ifaddr, *ifa; 25 int family, s; 26 char *host = NULL; 27 28 if (getifaddrs(&ifaddr) == -1) { 29 perror("getifaddrs"); 30 return NULL; 31 } 32 33 for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { 34 if (ifa->ifa_addr == NULL) 35 continue; 36 37 family = ifa->ifa_addr->sa_family; 38 39 if (!strcmp(ifa->ifa_name, "lo")) 40 continue; 41 if (family == AF_INET) { 42 if ((host = malloc(NI_MAXHOST)) == NULL) 43 return NULL; 44 s = getnameinfo(ifa->ifa_addr, 45 (family == AF_INET) ? sizeof(struct sockaddr_in) : 46 sizeof(struct sockaddr_in6), 47 host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); 48 if (s != 0) { 49 return NULL; 50 } 51 freeifaddrs(ifaddr); 52 return host; 53 } 54 } 55 return NULL; 56 }