利用C语言获取设备的MAC address


MAC address --> Medium Access Control layer address

//
// http://www.binarytides.com/c-program-to-get-mac-address-from-interface-name-on-linux/ #include <stdio.h> //printf
#include <string.h> //strncpy
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h> //ifreq
#include <unistd.h> //close void getmacaddr(char *macaddr, const char *interface)
{
int fd;
struct ifreq ifr;
const char *iface = interface;
unsigned char *mac; fd = socket(AF_INET, SOCK_DGRAM, 0); ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name , iface , IFNAMSIZ-1); ioctl(fd, SIOCGIFHWADDR, &ifr); close(fd); mac = (unsigned char *)ifr.ifr_hwaddr.sa_data; sprintf(macaddr, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x" , mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } int main()
{
char macaddress[17]={'0'};
getmacaddr(macaddress, "eth0"); int i=0;
for(i=0;i<sizeof(macaddress);i++)
{
printf("%c", macaddress[i]);
}
printf("\n"); return 0;
}

这里有一个需要玩味的是,函数getmacaddr()同样可以使用二维字符之称char **作为参数,但是需要注意的是,不能直接拿参数来操作,需要设置临时变量。

void _getmacaddr(char **macaddr, const char *interface)
{
int fd;
struct ifreq ifr;
const char *iface = interface;
unsigned char *mac;
char **newaddress = macaddr; fd = socket(AF_INET, SOCK_DGRAM, 0); ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name , iface , IFNAMSIZ-1); ioctl(fd, SIOCGIFHWADDR, &ifr); close(fd); mac = (unsigned char *)ifr.ifr_hwaddr.sa_data; sprintf( *newaddress, "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x" , mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); }

参考:


1、Get MAC Address

2、How to get mac address

利用C语言获取设备的MAC address的更多相关文章

  1. 关于获得本机Mac Address的方法

    网络上有讲获得Mac address的方法有如下: 1. 发送ARP命令,利用返回的Mac Address缓冲区得到 2. 用NetworkInterface.GetAllNetworkInterfa ...

  2. ios7 以后准确获取iphone设备的MAC(物理地址)

    通过参考 钉钉 项目,知道是通过wifi拿到路由的MAC地址.那么可不可以拿到iphone 设备的MAC 地址呢? 经过一番搜索,发现所有文章都是针对 ios 7 以前 可以拿到. 而且方法也都是同一 ...

  3. ARP-NAT(MAC Address Translation)的原理

    本文部分图片来自: http://wiki.deliberant.com/faq/wireless-bridge-routing-arpnat/ https://wiki.openwrt.org/do ...

  4. Ubuntu 下,修改 Mac address

    ifconfig    //    check Mac address sudo ifconfig eth0 down sudo ifconfig eth0 hw ether xx:xx:xx:xx: ...

  5. 【小错误】Device eth2 has different MAC address than expected, ignoring.

    今天在搭建rac配置IP的时候报错显示如下: Device eth2 has different MAC address than expected, ignoring.[FAILED] 百度了下,问 ...

  6. 获取设备的mac地址可靠的方法

    参考自:http://www.open-open.com/lib/view/open1433406847322.html /** * 获取设备的mac地址 * * @param ac * @param ...

  7. Find mac address

    Windows Method 1: Using the Command Prompt 1 Click on the Start button.   2 Type cmd in the search b ...

  8. OK335xS mac address hacking

    /*********************************************************************** * OK335xS mac address hacki ...

  9. what is MAC address

    MAC Address:media access control address A media access control address (MAC address) is a unique id ...

随机推荐

  1. CGAffineTransform相关函数

    CoreGraphics.h CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);
[xxx setTransform ...

  2. HadoopDB:混合分布式系统

    HadoopDB 是一个 Mapreduce 和传统关系型数据库的结合方案,以充分利用 RDBMS 的性能和 Hadoop 的容错.分布特性.2009 年被 Yale 大学教授 Abadi 提出,继而 ...

  3. Tomcat 集群

    1.  前言 该篇中测试的机器发生了变更,在第一篇中设置的Apache  DocumentRoot "d:/deployment"修改为了DocumentRoot d:/clust ...

  4. android学习日记03--常用控件tabSpec/tabHost

    常用控件7.TabSpec和TabHost 比较常用的控件,感觉手机QQ的整体布局就是这个,只不过tab放在底部而已.TabSpec相当于浏览器的分页,而TabHost就相当于分页的集合TabSpec ...

  5. 怎样加入� android private libraries 中的包的源码

    先上图: 这里以加入� afinal_0.5.1_bin.jar 为例. 第一步:加入�jar包到libs里面,系统自己主动把jar载入到android private libraries中: 第二步 ...

  6. 列式存储 V.S. 行式存储

    列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93 列式存储与行式存储 http://my ...

  7. jQuery中要注意的一些函数

    has()方法 或 :has选择器 :是过滤子类含有的,并不是过滤当前选择器选择的元素或对象含有的

  8. 实例源码--Android通讯录源码

      下载源码   技术要点: 1.通讯录联 系人的管理 2.接听.打电话 3.发短信 4. 源码带详细的 中文注释    ...... 详细介绍: 1.通讯录联系人的管理 播放器具有播放本地音乐的功能 ...

  9. Android高手进阶教程(七)之----Android 中Preferences的使用!

    http://blog.csdn.net/Android_Tutor/article/details/5531849 大家好,我们这一节讲的是Android Preferences 的学习,Prefe ...

  10. Tips: compilation and creating new projects on Android 4.0

    If you have downloaded android 4.0, you should read the article. $ANDROID_ROOT/tools/android.bat is ...