利用ioctl获取本地ip地址

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 }       

你可能感兴趣的:(IP地址)