随机MAC地址的设置实现


随机Mac地址的实现方法:
1. shell脚本来实现随机Mac;
2. 使用Linux的接口实现随机Mac;


1. shell脚本实现设置随机Mac

shell中获取随机mac地址语句(指定前3段mac地址为00:60:2F, 后3段mac地址随机获取):

echo -n 00:60:2F; dd bs=1 count=3 if=/dev/random 2>/dev/null | hexdump -v -e '/1 ":%02X"'

解析:

1.1. echo命令:
语法格式:echo [Options] [String]
主要用于:字符串的输出;
一般格式:echo [ -n ] 字符串 /其中选项-n表示输出文字后不换行;字符串能加引号,也能不加引号/

1.2. dd命令:
语法格式:dd [Operand]…
操作数:
bs=n: 同时设置读/写缓冲区的字节数为n;
count=n: 只拷贝输入的n块
if=file: 输入文件为file
of=file: 输出文件为file

1.3. hexdump命令:
语法格式:hexdump [Options] [File]…
选项:
-v: 去除中间显示的“*”字符
-e:指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:’a/b “format1” “format2”’。a/b 表示对每b个输入字节应用format1格式,对每a个输入字节应用format2格式,一般a>b,且b只能为1,2,4,另外a可以省略,省略则a=1。

设置随机MAC到网卡设备中:

ifconfig eth0 hw ether $(echo -n 00:60:2F; dd bs=1 count=3 if=/dev/random 2>/dev/null | hexdump -v -e '/1 ":%02X"')

可以把相关的启动命令配置到启动脚本/etc/init.d/rcS 中,完成开机启动时自动分配随机MAC

!/bin/sh
#网卡的设置
ifconfig eth0 hw ether $(echo -n 00:76:33; dd bs=1 count=3 if=/dev/random 2>/dev/null | hexdump -v -e '/1 ":%02X"')

ifconfig eth0 192.168.117.199

ifconfig eth0 up

2. Linux中实现随机Mac的方法:

random_ether_addr(ndev->dev_addr);

参考内核:Linux3.4.39


static void geth_check_addr(struct net_device *ndev, unsigned char *mac)
{
    int i;
    char *p = mac;

    if (!is_valid_ether_addr(ndev->dev_addr)) {
        for (i=0; idev_addr[i] = simple_strtoul(p, &p, 16);

        if (!is_valid_ether_addr(ndev->dev_addr)) {
            geth_chip_hwaddr(ndev->dev_addr);
        }

        if (!is_valid_ether_addr(ndev->dev_addr)) {
            random_ether_addr(ndev->dev_addr);
            printk(KERN_WARNING "%s: Use random mac address\n", ndev->name);
        }
    }
}

本人水平有限,不当之处,欢迎批评指正。转载请注明出处,谢谢!
http://blog.csdn.net/u010014090/article/details/79258795
参考文档:
生成MAC的方法:https://yq.aliyun.com/ziliao/78142
echo讲解:http://blog.csdn.net/vip_wangsai/article/details/72592649
dd讲解:http://blog.csdn.net/cc289123557/article/details/53386123
hexdump讲解:http://man.linuxde.net/hexdump

你可能感兴趣的:(移植)