Linux下修改网络硬件的物理地址

今天看到个C语言的修改网络MAC地址,非常好用,与大家分享下:

#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
......

struct ifreq ifr;
struct sockaddr_in *sin;
struct sockaddr sap;

int err;
int sockfd;

char *addr_ip = "192.168.1.221";

system("ifconfig eth0 down");

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0) {
    perror("socket error");
}

bzero(&ifr, sizeof(ifr));
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name)-1);

sin = (struct sockaddr_in *)&ifr.ifr_addr;
sin->sin_family = AF_INET;

err = inet_pton(AF_INET, addr_ip, &sin->addr);
if(err < 0) {
    perror("inet_pton error");
}

err = ioctl(sockfd, SIOCSIFADDR, &ifr);
if(err < 0) {
    perror("ioctl SIOCSIFADDR error");
}

sap.sa_family = ARPHRD_ETHER;
sa.sa_data[0] = 0x1A;//硬件地址,可以根据拨码开关的值来动态变更
sa.sa_data[1] = 0x2B;
sa.sa_data[2] = 0x3C;
sa.sa_data[3] = 0x4D;
sa.sa_data[4] = 0x5E;
sa.sa_data[5] = 0x6F;

memcpy(((char *)(&ifr) + offsetof(struct ifreq, ifr_hwaddr)), 
    (char *)&sap, 
    sizeof(struct sockaddr));
err = ioctl(sockfd, SIOCSIFHWADDR, &ifr);
if(err < 0) {
    perror("ioctl SIOCSIFHWADDR error");
}

system("ifconfig eth0 up");

      
      
     
     
    
    
   
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值