linux软件 mac地址,Linux MAC地址
实现代码:
#include
#include
#include
#include
#include
#include
#include
#include "inet_sockets.h"
//
//根据连接的套接字文件描述符获取客户端信息
//
int getpeermac( int sockfd, char *buf )
{
int ret =0;
struct arpreq arpreq;
struct sockaddr_in dstadd_in;
socklen_t len = sizeof( struct sockaddr_in );
memset( &arpreq, 0, sizeof( struct arpreq ));
memset( &dstadd_in, 0, sizeof( struct sockaddr_in ));
if(getpeername( sockfd, (struct sockaddr*)&dstadd_in, &len )
printf("getpeername()");
else
{
printf("client ip:%s\n",inet_ntoa(dstadd_in.sin_addr));
memcpy( &arpreq.arp_pa, &dstadd_in, sizeof( struct sockaddr_in ));
strcpy(arpreq.arp_dev, "eth0");
arpreq.arp_pa.sa_family = AF_INET;
arpreq.arp_ha.sa_family = AF_UNSPEC;
if(ioctl(sockfd,SIOCGARP, &arpreq )
perror("arp:--");
else
{
unsigned char* ptr = (unsigned char *)arpreq.arp_ha.sa_data;
ret = sprintf(buf, "%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5));
}
}
printf("%s\n",buf);
return ret;
}
/**
ARP高速缓存操作,包含IP地址和硬件地址的映射表
操作ARP高速缓存的命令字 SIOCDARP,SIOCGARP,SIOCSARP分别是删除ARP高速缓存的一条记录,获得ARP高速缓存的一条记录和修改ARP高速缓存的一条记录
struct arpreq
{
struct sockaddr arp_pa; //协议地址
struct sockaddr arp_ha;//硬件地址
int arp_flags;//标记
struct sockaddr arp_netmask;//协议地址的子网掩码
char arp_dev[16];//查询网络接口的名称
}
**/
//根据IP地址获取MAC,操作ARP缓存
int getpeermac_by_ip(char *ipaddr)
{
int s;
int err;
struct arpreq arpreq;
struct sockaddr_in *addr=(struct sockaddr_in*)&arpreq.arp_pa; //IP地址
s=socket(AF_INET,SOCK_STREAM,0);
if(s<0)
{
perror("socket error");
}
addr->sin_family=AF_INET; //协议族
addr->sin_addr.s_addr=inet_addr(ipaddr); //IP地址
if(addr->sin_addr.s_addr==INADDR_NONE)
{
printf("IP地址格式错误\n");
}
strcpy(arpreq.arp_dev,"eth0"); //网卡名字
err=ioctl(s,SIOCGARP,&arpreq);
if(err==-1)
{
perror("arp");
return;
}
unsigned char* hw=(unsigned char*)&arpreq.arp_ha.sa_data; //硬件地址
printf("%s\n",ipaddr);
printf("%02x:%02x:%02x:%02x:%02x:%02x\n",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);
close(s);
return 0;
}
//获取本地MAC
int get_mac(char* mac)
{
struct ifreq tmp;
int sock_mac;
char mac_addr[30];
sock_mac = socket(AF_INET, SOCK_STREAM, 0);
if( sock_mac == -1){
perror("create socket fail\n");
return -1;
}
memset(&tmp,0,sizeof(tmp));
strncpy(tmp.ifr_name,"eth0",sizeof(tmp.ifr_name)-1 );
if( (ioctl(sock_mac,SIOCGIFHWADDR, &tmp))
printf("mac ioctl error\n");
return -1;
}
sprintf(mac_addr, "%02x%02x%02x%02x%02x%02x",
(unsigned char)tmp.ifr_hwaddr.sa_data[0],
(unsigned char)tmp.ifr_hwaddr.sa_data[1],
(unsigned char)tmp.ifr_hwaddr.sa_data[2],
(unsigned char)tmp.ifr_hwaddr.sa_data[3],
(unsigned char)tmp.ifr_hwaddr.sa_data[4],
(unsigned char)tmp.ifr_hwaddr.sa_data[5]
);
printf("local mac:%s\n", mac_addr);
close(sock_mac);
memcpy(mac,mac_addr,strlen(mac_addr));
return 1;
}
int main(int argc,char *argv[]){
int fd;
char buff[2014];
fd=inetListen("8080",SOCK_STREAM, NULL);
printf("server waiting: \n");
int afd=inetAccept(fd,"8080",NULL);
if(afd>0){
getpeermac(afd,buff);
int size=read(afd,buff,1024);
if(size >0){
printf("%s",buff);
}
}
while(1){}
return 0;
}
linux软件 mac地址,Linux MAC地址相关推荐
- linux 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解
linux软件版本管理命令update-alternatives使用详解 update-alternatives 命令用于处理linux系统中软件版本的切换,在各个linux发行版中均提供了该命令,命 ...
- 红旗linux软件下载,红旗linux操作系统下载
红旗Linux桌面版是一款linux操作系统镜像文件.这个一个非常好用的系统,界面简洁干净,运行非常流畅,即使是老主机也可以轻松带动.同时稳定性也是非常不错.喜欢就来当易网下载吧! 红旗Linux操作 ...
- linux软件手机下载,linux软件下载
手机评站网今天精心准备的是<linux软件下载>,下面是详解! linux怎么安装软件 希望能帮助我操作一下... 希望能帮助我操作一下 1.打开系统,可以看到桌面,找到软件中心,打开软件 ...
- FreeBSD可以安装Linux软件吗,在Linux服务器上面通过网络安装FreeBSD
原文出自 http://www.daemonology.net/blog/2008-01-29-depenguinator-2.0.html,有修改. 有时候,出于某种需要,我们可能想把自己的主机重装 ...
- 嵌入式Linux 软件界面,嵌入式Linux下的图形用户界面系统设计
为了满足嵌入式系统的界面设计需求,给出了一种图形用户界面系统SKY-GUI的设计思路和其在嵌入式Linux环境下的实现方法.SKY-GUI有四大组成部分:输入抽象层.显示抽象层.事件系统和窗口系统.其 ...
- linux 软件做raid,Linux用软件实现RAID 的方法
数据的安全性是人们在使用计算机中最重要的问题之一.通常情况下,人们会在服务器环境中采用硬盘镜像技术,以达到数据的双重备份.同样在Linux环境下,我们可以采用这种技术.在Linux环境下,我们可以采用 ...
- linux 软件备份 主从,linux高可用(HA)keepalived 主从备份
利用keepalived可以实现对linux服务器的高可用性,即主从备份,一台线上服务器出故障另外一台服务器顶替它,当出故障的服务器恢复时又自动转换成主服务器,顶替它的服务器再次转换为备胎,当主服务器 ...
- rtos与linux软件开发,实时Linux和RTOS的基本特性及技术进行比较
描述 体系结构异同 对实时操作系统(RTOS)特性进行比较和分析.对于我们刚接触这个操作系统时一定要对他们要有一定的了解,我们先对实时操作系统来了解下,它就是指当外界事件或数据产生时,能够接受并以足够 ...
- linux 软件源 ppa,Linux 添加PPA源
我们在使用Ubuntu安装程序时经常会遇到添加软件源的操作,最常见的是ppa软件源. 例如:sudo add-apt-repository ppa:rvm/smplayer 这就是添加smplayer ...
- veket linux软件下载,veket linux系统下载-veket操作系统 v20 最新版-极光下载站
veket系统官方版是国内大神根据linux研发的全新电脑系统,这款系统体积非常小巧,运行稳定,并且自带丰富的办公娱乐功能,集成的各种工具能够很好的帮你完成各种事情. veket操作系统介绍 veke ...
最新文章
- 清华大学《大数据系统基础》项目征集说明(2021年秋季)
- golang中的base64
- webpack使用加载器来加载CSS样式
- 手撕 CNN 之 AlexNet(PyTorch 实战篇)
- 链路层 ---《TCP/IP协议》卷一
- MySQL子查询作为列_mysql 列子查询
- 恢复 linux系统密码
- 微软IT规划方法论解读
- Spring框架中XML配置特殊属性注入
- 是清单 Dog List的子类 Animal ? 为什么Java泛型不是隐式多态的?
- Xcode 8 Swift 类似插件方法
- python编程课第七课_Python 第7课 if的介绍和使用
- mongodb 什么比mysql快_MongoDB为什么比mysql效率高
- 从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》
- 从十七年蝉谈起——hashtable的表格大小为什么要选择质数
- 理论+实操: MySQL索引与事务、视图、存储过程(软件开发用的多)、存储引擎MyISAM和InnoDB
- 【重识前端】闭包与模块
- 内蒙古自治区律师事务所排名情况
- 如何运用计算机辅助英语教学,谈英语计算机辅助教学 (中学英语教学论文)
- 《三峡好人》,《黄金甲》所折射的电影学意义
热门文章
- Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile
- mysql 查询不等于空的数据查询
- java 调用麦克风录音_Java 实现麦克风自动录音
- GFP:新一代多业务传输技术(转)
- oracle如何实现自增?----用序列sequence的方法来实现
- 特征空间之点检测(MATLAB)
- 【蓝桥杯嵌入式】【STM32】14_CT117E_EXA蓝桥杯嵌入式扩展板硬件资源一览及其驱动编写
- 代码创建完整数据库系统,创建数据库、创建模式、输入数据、注释全面,易懂
- Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
- 【Typora】 自定义背景颜色(护眼绿) 高亮颜色 选中内容颜色 高亮快捷键