Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4826564
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2009-04-08 15:38:34

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>

static void usage(char* pro_name)
{
  printf("usage : %s ifname \n",pro_name);
  exit(0);
}

char* mac2str(u_int8_t* s)
{
  static char buf[20];
  
  sprintf(buf,"0x%02x:%02X:%02X:%02X:%02X:%02x",s[0],s[1],s[2],s[3],s[4],s[5]);

  return buf;
}

int
main(int argc,char **argv)
{
  struct sockaddr_in *addr;
  struct ifreq ifr;
  char *name,*address;
  int sockfd;
  u_int8_t mac[IFHWADDRLEN];

  if(argc != 2)
    usage(argv[0]);
  else
    name = argv[1];

  sockfd = socket(AF_INET,SOCK_DGRAM,0);
  strncpy(ifr.ifr_name,name,IFNAMSIZ-1);

  if(ioctl(sockfd,SIOCGIFADDR,&ifr) == -1)
    {
      perror("ioctl error");
      exit(1);
    }

   addr = (struct sockaddr_in *)&(ifr.ifr_addr);
   address = inet_ntoa(addr->sin_addr);
   
   printf("inet addr: %s ",address);

   if(ioctl(sockfd,SIOCGIFBRDADDR,&ifr) == -1)
     {
         perror("ioctl error");
         exit(1);
      }
   
   addr = (struct sockaddr_in *)&ifr.ifr_broadaddr;
   address = inet_ntoa(addr->sin_addr);
   printf("broad addr: %s ",address);

   if(ioctl(sockfd,SIOCGIFNETMASK,&ifr) == -1)
     {
       perror("ioctl error");
       exit(1);
     }
 
     addr = (struct sockaddr_in *)&ifr.ifr_addr;
     address = inet_ntoa(addr->sin_addr);
     printf("inet mask: %s ",address);

   strncpy(ifr.ifr_name,name,IFNAMSIZ-1);
   if(ioctl(sockfd,SIOCGIFHWADDR,&ifr) == -1)
     {
       perror("ioctl error");
       exit(1);
     }
    
     memcpy(mac,ifr.ifr_hwaddr.sa_data,IFHWADDRLEN);
     printf("mac addr is: %s\n",mac2str(mac));

     return 0;
}




[root@mip ioctl]# ./inet_addr eth0
inet addr: 172.24.149.48 broad addr: 172.24.149.255 inet mask: 255.255.255.0 mac addr is: 0x00:11:43:4E:28:2d

阅读(1012) | 评论(0) | 转发(0) |
0

上一篇:sscanf函数详解

下一篇:ioctl小解

给主人留下些什么吧!~~