ioctl()函数获取本机ip,mask,mac

重点内容
函数 : ioctl(int fd, int request, void * arg)

 1 #include<stdio.h>
  2 #include <sys/socket.h>
  3 #include <arpa/inet.h>
  4 #include <string.h>
  5 #include <sys/ioctl.h>
  6 #include <net/if.h>
  7
  8 int main(int argc,char**argv)
  9 {   int i;
 10     char mac[32];
 11     int sock;
 12     int res;
 13     struct ifreq ifr;
 14     struct sockaddr_in *addr;
 15     char *address;
 16/*struct ifreq 就是用来存储返回的接口相关信息的结构体,由于电脑可能有多个硬件接口,因此我们使用指针来存储返回的结构体数组。struct sockaddr_in变量是用来存储ioctl()函数返回结果,也就是mac地址,ip地址,子网掩码的相关信息。*/
 17     sock = socket(AF_INET, SOCK_STREAM, 0);  /*流式Socket(SOCK_STREAM)是一种面向连接的Socket,针对于面向连接的TCP服务应用*/
 18     strcpy(ifr.ifr_name, "eth3");
 19     res = ioctl(sock, SIOCGIFADDR, &ifr);  /*获取网络接口地址ip*/
 20     addr=(struct sockaddr_in*)&(ifr.ifr_addr);
 21     address=inet_ntoa(addr->sin_addr);
 22
 23     printf("IP: %s\n",address);/*inet_ntoa()的作用是ip地址格式转换,转换为计算机识别的二进制格式*/
 24    /* get ip address*/
 25
 26
 27     res =ioctl(sock,SIOCGIFHWADDR,&ifr);/*获取MAC地址*/
 28     for(i = 0; i < 6; ++i)
 29      {
 30          sprintf(mac + 3*i, "%02x:", (unsigned char)ifr.ifr_hwaddr.sa_data[i]);
 31      }
 32     printf("MAC: %s\n",mac);
 33
 34
 35     res =ioctl(sock,SIOCGIFNETMASK,&ifr);/*获取子网掩码*/
 36     addr = (struct sockaddr_in *)&(ifr.ifr_addr);
 37     address = inet_ntoa(addr->sin_addr);
 38
 39     printf("Mask: %s\n",address);
 40
 41     return 0;
 42
 43
 44 }

测试结果:
这里写图片描述

strcpy和memcpy的区别:
http://www.codeweblog.com/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3strcpy%E4%B8%8Ememcpy%E7%9A%84%E5%8C%BA%E5%88%AB/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值