linux下利用ioctl函数与struct ifreq结构体可以获取本地的ip地址等信息。
ioctl函数原型:int ioctl( int fd, int request, .../* void *arg */ );
第二个参数为相关的动作。
获取本地ip的代码如下(同理可获得其他的接口信息)
1 #include<stdio.h> 2 #include<arpa/inet.h> //for inet_ntoa , struct sockaddr_in 3 #include<unistd.h> 4 #include<sys/ioctl.h> 5 #include<sys/socket.h> 6 #include<net/if.h> //for struct ifreq 7 #include<string.h> 8 int main(void){ 9 int sockfd; 10 struct ifreq ifr; 11 struct sockaddr_in sin; 12 if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0){ 13 perror("socket error"); 14 return -1; 15 } 16 strcpy(ifr.ifr_name,"eth0"); 17 if(ioctl(sockfd,SIOCGIFADDR,&ifr)<0){ //get eth0 ip 18 perror("ioctl error"); 19 return -1; 20 } 21 memcpy(&sin,&ifr.ifr_addr,sizeof(sin)); 22 //sin=(struct sockaddr_in)ifr.ifr_addr; 23 printf("ip is %s\n",inet_ntoa(sin.sin_addr)); 24 return 0; 25 }