我们有时候会有获取网口的IP和MAC地址的需求。可以通过ioctl来获取。

#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
void main(void)
{
  struct ifreq ifr;
  struct ifconf ifc;
  char buff[1024];
  int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
  ifc.ifc_len = sizeof(buff);
  ifc.ifc_buf = buff;
  ioctl(fd, SIOCGIFCONF, &ifc);//获取所有的网口信息
  struct ifreq *it = ifc.ifc_req;
  const struct ifreq* const end = it + ifc.ifc_len/sizeof(struct ifreq);
  for (; it != end; it++)//遍历网口
  {
    strncpy(ifr.ifr_name, it->ifr_name, strlen(it->ifr_name) + 1);//网口名称,如“eth0”“ra0”
    printf("ifr_name :%s\n", ifr.ifr_name);
    if (ioctl(fd, SIOCGIFFLAGS, &ifr) == 0)
    {
      if (!(ifr.ifr_flags & IFF_LOOPBACK))//忽略lo
      {
        if (ioctl(fd, SIOCGIFHWADDR, &ifr) == 0)//获取MAC
        {
          unsigned char mac[6];
          memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
          printf("mac: %02x:%02x:%02x:%02x:%02x:%02x\n",mac[0],mac[1],mac[2],mac[3], mac[4], mac[5]);
        }
        if (ioctl(fd, SIOCGIFADDR, &ifr) == 0)//获取IP
        {
          struct sockaddr_in sin;
          memcpy(&sin, &ifr.ifr_addr, sizeof(struct sockaddr_in));
          printf("ip: %s\n", inet_ntoa(sin.sin_addr));
        }
      }
    }
  }
}

运行结果如下:

获取平台所有接口的IP和MAC地址的更多相关文章

  1. java获取本机名称、IP、MAC地址和网卡名称

    java获取本机名称.IP.MAC地址和网卡名称 摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 2018年05月18日 1 ...

  2. 获取本机IP、mac地址、计算机名

    python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...

  3. 获取与esp8266连接的客户端的Mac地址 IP 端口 控制停止等问题

    两个关键的库 ESP8266WebServer.h WiFiClient.h ESP8266WiFiAP.cpp C:\Users\dongdong\Desktop\Arduino-master\li ...

  4. JAVA获取本机IP和Mac地址

       在项目中,时常需要获取本机的Ip或是Mac地址,进行身份和权限验证,本文就是通过java代码获取ip和Mac. package com.svse.query;import java.net.In ...

  5. 获取客户机的ip和mac地址

    只获取clientIP package com.ppms.utils; import javax.servlet.http.HttpServletRequest; /** * Created by l ...

  6. ASP.NET获取客户端IP及MAC地址

    朋友最近问如何获取客户端IP及MAC地址,一直想把这段给整理一下,契机来了:下边分为了C#后台获取的方法和前台Javascript(调用ActiveX)获取的方法,大家如果有好的方法一起讨论撒O(∩_ ...

  7. 使用ARP获取局域网内设备IP和MAC地址

    根据Arp列表数据,查询本地设备在线状态 使用 arp -a 获得所有内网地址,首先看Mod对象 public struct MacIpPair { public string HostName; p ...

  8. C#获取IP及MAC地址 方法

    C#获取IP及MAC地址 方法,比较齐全 using System.Net; using System; using System.Management; using System.Runtime.I ...

  9. C语言实现Windows下获取IP和MAC地址。

    C语言实现Windows下获取IP和MAC地址. #include <winsock2.h> #include <stdio.h> #include <stdlib.h& ...

随机推荐

  1. Java Cardioid 心脏形曲线 (整理)

    package demo; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import jav ...

  2. 【英语】Bingo口语笔记(32) - 口语中的弱读

  3. 【网络】TCP三次握手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手: ...

  4. WCF 扩展一:格式化Web服务请求XML

    扩展原因 有一WebService,在工程中添加Web Service引用后调用不成功,但是用SoapUI测试正常 分析 用tctTrace跟踪报文后发现wcf生成的报文命名空间与SoapUI的不一样 ...

  5. pageX,clientX,offsetX,layerX的区别

    pageX,clientX,offsetX,layerX的区别 在各个浏览器的JS中,有很多个让你十分囧的属性,由于各大厂商对标准的解释和执行不一样,导致十分混乱,也让我们这些前端攻城狮十分无语和纠结 ...

  6. css overflow:hidden无效解决办法

    解决方案:只需要在设定overflow:hidden层加入定位即可 position:relative;left:0px;top:0px

  7. Effective java笔记5--通用程序设计

    一.将局部变量的作用域最小化      本条目与前面(使类和成员的可访问能力最小化)本质上是类似的.将局部变量的作用域最小化,可以增加代码的可读性和可维护性,并降低出错的可能性. 使一个局部变量的作用 ...

  8. margin四个元素的顺序

    如果margin给的是四个值比如:margin:0px 0px 0px 0px;代表:margin: top right bottom left代表从上右下左,顺时针方向.如果margin给的是三个值 ...

  9. GRIDVIEW传值的两种方法

    第一种方法:在onselectedindexchanged中写事件 第二种方法:OnRowCommand事件 前端页面: <%@ Page Language="C#" Aut ...

  10. echart图表控件配置入门(二)常用图表数据动态绑定

    上一节 <echart图表控件配置入门(一)>介绍了echarts图表控件的入门配置,使开发人员可以快速搭建出一个静态的图表.但是在实际开发过程这还是不够的,不可能所有的图表控件都是静态数 ...