python 使用ioctl() 获得网卡IP 和MAC地址
来源:互联网 发布:淘宝抢购秒杀器下载 编辑:程序博客网 时间:2024/05/16 07:38
自从使用了Python,便对其爱不释手。听说Python可以做任何你可以想到的事情,前些天看Linux网络的时候,看到了ioctl()这个函数的强大功能,linux下常用工具route和arp命令就是基于这个函数来完成的,只需要设定对应的option即可。那么,问题来了,python中有无类似功能的方法/函数呢,若我想获得某个接口的配置的IP和其MAC地址,使用C写的代码太多了,Python中的fcntl.ioctl()可以妥妥的完成这个任务。下面来点干货吧。
#! /usr/bin/env pythonfrom fcntl import ioctlimport socketimport structimport syssock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)try: ip=ioctl(sock.fileno(),0x8915,struct.pack('64s','eth0')) ip=socket.inet_ntoa(ip[20:24]) print ipexcept: print sys.exc_info()
结果如下:
172.16.24.12
C语言的ioctl中使用的常量SIOCGIFADDR, 对应的值为0x8915,对应关系的定义文件在/usr/include/i386-linux-gnu/bits/ioctls.h
截个片段来看一下吧
* Socket configuration controls. */#define SIOCGIFNAME 0x8910 /* get iface name */#define SIOCSIFLINK 0x8911 /* set iface channel */#define SIOCGIFCONF 0x8912 /* get iface list */#define SIOCGIFFLAGS 0x8913 /* get flags */#define SIOCSIFFLAGS 0x8914 /* set flags */#define SIOCGIFADDR 0x8915 /* get PA address */#define SIOCSIFADDR 0x8916 /* set PA address */#define SIOCGIFDSTADDR 0x8917 /* get remote PA address */#define SIOCSIFDSTADDR 0x8918 /* set remote PA address */#define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */#define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */#define SIOCGIFNETMASK 0x891b /* get network PA mask */#define SIOCSIFNETMASK 0x891c /* set network PA mask */#define SIOCGIFMETRIC 0x891d /* get metric */#define SIOCSIFMETRIC 0x891e /* set metric */#define SIOCGIFMEM 0x891f /* get memory address (BSD) */#define SIOCSIFMEM 0x8920 /* set memory address (BSD) */
若是想获得MAC地址,只需要把0x8915换成0x8927,后面的[20:24]换成[18:24],就得到了16进制形式的MAC地址。
0 0
- python 使用ioctl() 获得网卡IP 和MAC地址
- 获得网卡MAC地址和IP地址(VB.net)
- 获得网卡MAC地址和IP地址(VB.net)
- 获得网卡MAC地址和IP地址(VB.net)
- 嵌入式 获取网卡设备以及IP和MAC地址示例以及网络编程之ioctl小结
- ioctl获取本地IP和MAC地址
- ioctl获取本地IP和MAC地址
- 获得ip和mac地址
- 获得ip和mac地址
- 获得ip和mac地址
- Linux下获得网卡MAC地址,IP地址及子网掩码
- 获得网卡MAC地址
- 获得网卡MAC地址
- 获得网卡MAC地址 .
- 获得网卡MAC地址
- 用ioctl获得本地ip地址,ifconf和ifreq
- 【C++】获得本机所有网卡的IP和MAC地址信息
- 【C++】获得本机所有网卡的IP和MAC地址信息
- spring tx:advice 和 aop:config 配置事务
- 类别(类目),延展,协议
- kettle报Unable to save shared ojects错误
- Ubuntu 12.04 VNC server 5.0.x [RealVNC] 的配置和使用
- 常用23种设计模式总结,UML图、意图和适用性
- python 使用ioctl() 获得网卡IP 和MAC地址
- *高通camera基本代码架构
- Java中的运行时堆栈
- C#socket资料汇总
- 关键字 strong、week
- 更改点后输出把集合里的点通过树的边连在一起所需要的最小代价 LCA+树状数组 HDU 5296 Annoying problem
- 论文笔记 《Deep Neural Networks for Object Detection》
- 后端分布式系列:分布式存储-HDFS NameNode 设计实现解析
- scott用户添加debug权限