linux下用代码获取系统的IP与MAC
来源:互联网 发布:ug编程没刀库的刀具号 编辑:程序博客网 时间:2024/06/05 08:53
#include <stdio.h>#include <unistd.h>#include <netdb.h>#include <arpa/inet.h>#include <stdlib.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/socket.h>#include <net/if.h>#define MAXINTERFACES 16#define MAC_ADDR_LEN 18#define ADDR_LEN 16void err_quit(char *msg){ perror(msg); exit(1);}char *getIP(char *addr){ int sock_fd; struct ifreq buf[MAXINTERFACES]; struct ifconf ifc; int interface_num; if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) err_quit("Create socket failed"); ifc.ifc_len = sizeof(buf); ifc.ifc_req = buf; if(ioctl(sock_fd, SIOCGIFCONF, (char *)&ifc) < 0) err_quit("Get a list of interface addresses failed"); interface_num = ifc.ifc_len / sizeof(struct ifreq); printf("The number of interfaces is %d\n", interface_num); while(interface_num--) { // printf("Net device: %s\n", buf[interface_num].ifr_name); if(ioctl(sock_fd, SIOCGIFFLAGS, (char *)&buf[interface_num]) < 0) err_quit("Get the active flag word of the device"); if(buf[interface_num].ifr_flags & IFF_PROMISC) printf("Interface is in promiscuous mode\n"); if(ioctl(sock_fd, SIOCGIFADDR, (char *)&buf[interface_num]) < 0) err_quit("Get interface address failed"); addr = inet_ntoa(((struct sockaddr_in*)(&buf[interface_num].ifr_addr))->sin_addr); printf("%s的IP address is %s\n",buf[interface_num].ifr_name, addr); } return addr;}char *getMAC(char *mac_addr){ int sock_fd; struct ifreq buf[MAXINTERFACES]; struct ifconf ifc; int interface_num; if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) err_quit("Create socket failed"); ifc.ifc_len = sizeof(buf); ifc.ifc_req = buf; if(ioctl(sock_fd, SIOCGIFCONF, (char *)&ifc) < 0) err_quit("Get a list of interface addresses failed"); interface_num = ifc.ifc_len / sizeof(struct ifreq); printf("The number of interfaces is %d\n", interface_num); while(interface_num--) { // printf("Net device: %s\n", buf[interface_num].ifr_name); if(ioctl(sock_fd, SIOCGIFFLAGS, (char *)&buf[interface_num]) < 0) err_quit("Get the active flag word of the device"); if(buf[interface_num].ifr_flags & IFF_PROMISC) printf("Interface is in promiscuous mode\n"); if(ioctl(sock_fd, SIOCGIFHWADDR, (char *)&buf[interface_num]) < 0) err_quit("Get the hardware address of a device failed"); snprintf(mac_addr, MAC_ADDR_LEN, "%02X:%02X:%02X:%02X:%02X:%02X", (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[0], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[1], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[2], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[3], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[4], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[5]); printf("%s的Mac address is %s\n",buf[interface_num].ifr_name, mac_addr); } return mac_addr; }int main(int argc, char *argv[]){ char addr[ADDR_LEN]; char mac_addr[MAC_ADDR_LEN]; printf("\n****************************************\n"); getIP(addr); printf("\n****************************************\n"); getMAC(mac_addr); printf("\n****************************************\n"); return 0;}
0 0
- linux下用代码获取系统的IP与MAC
- Linux下获取系统的IP,子网掩码,网关,MAC和配置文件的修改
- Linux下获取系统的IP,子网掩码,网关,MAC和配置文件的修改
- 关于linux 下获取本机网关 ip mac 子网掩码的代码
- windows及Linux系统下获取IP及MAC地址的方法
- MAC系统下命令获取IP地址
- Linux下获取IP、MAC、网关、掩码的shell脚本
- Linux下获取IP、MAC、掩码的shell脚本
- linux系统下C语言获取和设置本地MAC地址的代码
- linux下获取/设置mac和ip
- linux下获取MAC地址,IP地址
- 用纯Java代码根据IP获取windows和linux的MAC物理地址
- Linux下Python获取IP地址的代码
- linux下获取网卡IP的C/C++代码
- linux系统下获取IP地址
- 获取客户端的IP与MAC地址
- 呵呵,Windows系统下获取本机ip的方法和Linux系统下获取本机ip的方法
- Android系统下获取本地IP和mac地址的方法
- windows server 2003 ftp服务器端软件
- java线程 join
- 第六届蓝桥杯A组C/C++ 第四题 格子中输出
- php trim 学习
- win7 共享需要开启哪些服务
- linux下用代码获取系统的IP与MAC
- 其他两种绑定ListView数据的方式
- 一、链路层基础知识……
- (修改递归错误)PHP 在无限级分类情况下,通过接口取出所有分类之后生成分类树
- volatile extern struct
- vector使用总结
- cocos2d-x 3.4版本 Android ndk-gdb真机调试环境搭建
- caffe之CIFAR-10与dropout
- 下载bing图片并设置成桌面壁纸