linux c 获取mac地址吗,Linux系统下用C语言获取MAC地址

最近在做一个小程序,需要用到在linux系统里编写C程序从而获取MAC地址,从网上搜了一遍,想总结一下。如果你就只需要单个功能的程序,可以采用方法一,见代码1,一般最好能够封装起来,写成获取MAC地址的函数再调用,可以采用方法二,见代码2。

代码1:

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

struct ifreq ifreq;

int sock;

if(argc!=)

{

printf("Usage : ethname\n");

return ;

}

if((sock=socket(AF_INET,SOCK_STREAM,))

{

perror("socket");

return ;

}

strcpy(ifreq.ifr_name,argv[]);

if(ioctl(sock,SIOCGIFHWADDR,&ifreq)

{

perror("ioctl");

return ;

}

printf("%02x:%02x:%02x:%02x:%02x:%02x\n",

(unsigned char)ifreq.ifr_hwaddr.sa_data[],

(unsigned char)ifreq.ifr_hwaddr.sa_data[],

(unsigned char)ifreq.ifr_hwaddr.sa_data[],

(unsigned char)ifreq.ifr_hwaddr.sa_data[],

(unsigned char)ifreq.ifr_hwaddr.sa_data[],

(unsigned char)ifreq.ifr_hwaddr.sa_data[]);

return ;

}

将代码写入一个C文件,名称随便取,姑且存为MAC_addr.c。

在linux下运行:gcc -o  MAC_addr MAC_addr.c

下一条指令要十分注意,这个函数是带参数才能执行的,可以用以下指令:

./MAC_addr  etho 即可获得MAC地址。

想用封装的形式,写成一个求MAC地址的函数,然后再调用此函数,可以用方法二,见代码2。

代码2:

#include

#include

#include

#include

#include

#include

#include //for struct ifreq

int get_mac(char * mac, int len_limit) //返回值是实际写入char * mac的字符个数(不包括'\0')

{

struct ifreq ifreq;

int sock;

if ((sock = socket (AF_INET, SOCK_STREAM, )) < )

{

perror ("socket");

return -;

}

strcpy (ifreq.ifr_name, "eth0"); //Currently, only get eth0

if (ioctl (sock, SIOCGIFHWADDR, &ifreq) < )

{

perror ("ioctl");

return -;

}

return snprintf (mac, len_limit, "%X:%X:%X:%X:%X:%X", (unsigned char) ifreq.ifr_hwaddr.sa_data[], (unsigned char) ifreq.ifr_hwaddr.sa_data[], (unsigned char) ifreq.ifr_hwaddr.sa_data[], (unsigned char) ifreq.ifr_hwaddr.sa_data[], (unsigned char) ifreq.ifr_hwaddr.sa_data[], (unsigned char) ifreq.ifr_hwaddr.sa_data[]);

}

int main()

{

char szMac[];

int nRtn = get_mac(szMac, sizeof(szMac));

if(nRtn > )

{

fprintf(stderr, "MAC ADDR: %s\n", szMac);

}

return ;

}

将代码写入一个C文件,姑且存为MAC_addr.c。

在linux下运行:gcc -o  MAC_addr MAC_addr.c

./MAC_addr  即可获得MAC地址。

亲测以上方法都是通过的,欢迎讨论是否还有更好的方法!

获得Unix&sol;Linux系统中的IP、MAC地址等信息

获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 ...

linux系统下获取IP,MAC,子网掩码,网关

获取IP和子网掩码 int getLocalInfo(char IP[],char Mask[]) { int fd; int interfaceNum = 0; struct ifreq buf[1 ...

Linux系统下如何设置IP地址?

Linux系统下如何设置IP地址?我们可以通过命令设定IP的方法,不过此方法的前提条件是用户需root权限.在linux系统的 /etc/sysconfig/network-script/ifcfg- ...

Linux 获取本机IP、MAC地址用法大全

getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...

Linux系统下DHCP服务安装部署和使用详解

一.概述 DHCP :动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:用于内部网或 ...

【转载】Linux系统下命令行连接蓝牙设备 查看查找 蓝牙

Linux系统下命令行连接蓝牙设备 2018年11月26日 10:47:27 Zz笑对一切 阅读数:741   1.打开系统蓝牙 sudo service bluetooth start 1 进入bl ...

在Linux系统下运行微信Web开发者工具

微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...

linux系统下的权限知识梳理

下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

linux系统下修改文件夹目录权限

linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

随机推荐

sessionStorage 和 localStorage 、cookie

sessionStorage 和 localStorage html5中web storage包括两种储存方式:sessionStorage 和 localStorage sessionStorage ...

Firefox使用svg blur滤镜渲染图片

很久没来更新博客了,今天正好比较闲,就写一篇手头项目上遇到的一个css问题: .mature .blur { -webkit-filter:blur(25px); -moz-filter:blur(2 ...

mysql性能优化-简易版

mysql性能优化 sql语句优化 如何发现有问题的sql? 开启mysql慢查询 show variables like 'slow_query_log' set global slow_query ...

CentOS 7下关于systemd的一些唠叨话一:systemd的特点和使用

摘要 近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版 ...

MySql生日闰月处理

1. 科普下润年: ①.非整百年能被4整除的为闰年.(如2004年就是闰年,2100年不是闰年) ②.整百年能被400整除的是闰年.(如2000年是闰年,1900年不是闰年)   2. 例: 例如:当 ...

Java:IO流与IO设备

打印流:PrintWriter和PrintStream 特点:可以直接操作输入流和文件 //例子1:使用PrintStream将格式化的日期打印到文件中 import java.io.*; impor ...

git-daemon的快捷搭建

使用git-daemon进行git服务器搭建 1.安装git-daemon 前提是已经安装git sudo apt-get install git git-core 然后安装git-daemon su ...

ubuntu12&period;04下搭建ftpserver

楼主想把同学硬盘里面的200多G电影共享给实验室的小伙伴们看,就打算在内网server上搭建一个ftp的server. 1.安装ftp 首先在终端下键入例如以下内容,安装ftpserver: sudo ...

javascript 局部变量和全局变量

刚开始学js,遇到了一个奇怪的问题,查找之后知道了答案 需要记住两句话 1 Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是f ...

js加强版图片轮播

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值