ioctrl 获取本机IP及MAC地址
通过使用ioctl可以获得本机的一些信息,这里记录获得interface IP及MAC的过程。
1:ioctl 函数的作用是什么
man ioctl:
DESCRIPTION
The ioctl() function manipulates the underlying device parameters of special files. In particular, many operating characterisâ€
tics of character special files (e.g., terminals) may be controlled with ioctl() requests. The argument fd must be an open file
descriptor.
The second argument is a device-dependent request code. The third argument is an untyped pointer to memory. It's traditionally
char *argp (from the days before void * was valid C), and will be so named for this discussion.
An ioctl() request has encoded in it whether the argument is an in parameter or out parameter, and the size of the argument argp
in bytes. Macros and defines used in specifying an ioctl() request are located in the file <sys/ioctl.h>.
2:测试例子
/*
用socket获得当前interface的信息
1:ip地址
2:mac地址
3:interface index
注:创建的是原始套接字,编译及执行都需要root权限
*/
int read_interface(const char* interface)
{
int fd;
int ret = ;
struct ifreq ifr;
struct sockaddr_in *ip_addr = NULL;
char mac[] = {};
memset(&ifr, , sizeof(struct ifreq));
fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (fd > ){
ifr.ifr_addr.sa_family = AF_INET;
strcpy(ifr.ifr_name, interface); //get interface ip
if(ioctl(fd, SIOCGIFADDR, &ifr) == ){
ip_addr = (struct sockaddr_in *)&ifr.ifr_addr;
printf("The %s ip addr is %s\n",ifr.ifr_name,inet_ntoa(ip_addr->sin_addr));
} else {
printf("SIOCGIFADDR failed, error:%s\n", strerror(errno));
ret = -;
goto out;
} //get interface mac
if(ioctl(fd, SIOCGIFHWADDR, &ifr) == ){
memcpy(mac, ifr.ifr_hwaddr.sa_data, );
printf("interface mac: %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[],mac[],mac[],mac[],mac[],mac[]);
} else {
printf("SIOCGIFHWADDR failed, error:%s\n", strerror(errno));
ret = -;
goto out;
} //get interface index
if (ioctl(fd, SIOCGIFINDEX, &ifr) == ) {
printf("The interface index:%d\n",ifr.ifr_ifindex);
} else {
printf("SIOCGIFINDEX failed, error:%s\n", strerror(errno));
ret = -;
goto out;
}
} else {
printf("%s\n",strerror(errno));
ret = -;
}
out:
close(fd);
return ret;
}
3:ioctl的第二个参数有很多,了解它们可以在需要时使用
参考:http://blog.csdn.net/evenness/article/details/7665970
ioctrl 获取本机IP及MAC地址的更多相关文章
- 获取本机IP、mac地址、计算机名
python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...
- python获取本机IP、mac地址、计算机名
在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 我们先来看一下python 获得本机MAC地址: 1 2 3 4 import uuid de ...
- Linux 获取本机IP、MAC地址用法大全
getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...
- JAVA获取本机IP和Mac地址
在项目中,时常需要获取本机的Ip或是Mac地址,进行身份和权限验证,本文就是通过java代码获取ip和Mac. package com.svse.query;import java.net.In ...
- QT获取本机IP和Mac地址
#include <QNetworkInterface> #include <QList> void MainWindow::getIPPath() { QString str ...
- java 获取本机ip及mac地址
package com.achun.test; import java.net.Inet4Address;import java.net.Inet6Address;import java.net.In ...
- c#中如何获取本机用户名、MAC地址、IP地址、硬盘ID、CPU序列号、系统名称、物理内存
我们在利用C#开发桌面程序(Winform)程序的时候, 经常需要获取一些跟系统相关的信息, 以下这些代码获取能有些用处. c#中如何获取本机用户名.MAC地址.IP地址.硬盘ID.CPU序列号.系统 ...
- win32 获取本机网卡信息(MAC地址,IP地址等)
由于一个需求需要获取网卡的MAC地址,就搜了一下,大部分都是COPY来COPY去的一些代码,有很多甚至不能直接运行或有还有内存泄漏.自己查了一下MSDN然后封装了一下: 需要注意,一个机器可能有多个网 ...
- node.js获取本机Ip, hostName, mac
//获取ip地址 getIPAdress() { let interfaces = require('os').networkInterfaces(); for (var devName in int ...
随机推荐
- Appium基础环境搭建(windows)---基于python
1 JDK安装 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装注意:安装 ...
- POJ 3415 Common Substrings(后缀数组)
Description A substring of a string T is defined as: T(i, k)=TiTi+1...Ti+k-1, 1≤i≤i+k-1≤|T|. Given t ...
- Python中的import语句
Python中的import语句是导入一个文件,这条语句主要做三件事: 1 通过一定的方式,搜寻要导入的文件: 2 如果需要,就编译这个文件: 3 运行这个文件 但是,需要注意的是,所有这三个步骤,都 ...
- 如何在html中把一个图片或者表格覆盖在一张已有图片上的任意位置
如何在html中把一个图片或者表格覆盖在一张已有图片上的任意位置 <div style="position:relative;"> <img src=&quo ...
- Python学习 - 入门篇1
前言 学习渠道:慕课网:Python入门 记录原因:人总归要向记忆低头[微笑再见.gif] 记录目标:形成简洁的知识点查阅手册 变量和数据类型 变量 赋值 在Python中,可以把任意数据类型赋值给变 ...
- 团队作业7——第二次项目冲刺(Beta版本)-第二篇
1.工作分工: 团队成员 分工 郭达22120 项目整合,后台代码 刘德培44060 数据库模块 石浩洋22061 前台界面优化 曾繁钦22056 前台界面优化.测试 孙斌22030 后台代码 2.燃 ...
- 【重读MSDN之ADO.NET】ADO.NET连接
连接到ADO.NET中的数据源 在 ADO.NET 中,通过在连接字符串中提供必要的身份验证信息,使用 Connection 对象连接到特定的数据源.使用的 Connection 对象取决于数据源的类 ...
- GC是什么?为什么要有GC
GC:Garbage Collection 垃圾收集器. GC就是对“不可达“的对象进行回收,释放内存. Java内存的管理实际上就是对对象的管理,其中包括对对象的分配和回收. 对于程序员来说,分配对 ...
- Flink的序列化与flink-hadoop-compatibility
最近 用户提交了一个问题 说他的jar包里明明包含相关的类型 但是在提交Flink作业的时候 却报出classnotfound的错误 查看之后发现 这里是flink的一个没有说的太明白的地方 用户的代 ...
- [剑指Offer] 61.序列化二叉树
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *r ...