#include <string.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdbool.h> int main() { int inet_sock; struct ifreq ifr; char addr[16]={0}; char *getaddr= NULL; bool flag=false; inet_sock = socket(AF_INET, SOCK_DGRAM, 0); strcpy(ifr.ifr_name, "eth0"); //SIOCGIFADDR标志代表获取接口地址 if (ioctl(inet_sock, SIOCGIFADDR, &ifr) < 0) perror("ioctl"); getaddr= inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr); printf("%s ", getaddr); if(!flag){ strcpy(addr,getaddr); flag=true; } if(0 != strcmp(addr,getaddr)) strcpy(addr,getaddr); printf("%s ",addr); return 0; }