使用openssl rand随机生成MAC地址的方法

介绍

当我们使用虚拟网卡的时候,有时候需要为虚拟网卡配置随机的MAC地址。我们知道,网卡的MAC地址实际上是一个6字节的整型数,通常表现为用英文冒号(:)隔开的十六进制字符串(全部大写或者全部小写),如下面所示(全部小写):

8c:ec:75:ab:b7:dc

openssl rand命令可以生成一个n字节的数,我们可以使用该命令生成MAC地址。

openssl rand

openssl rand的用法

# 查看openssl rand的手册
man openssl rand
OPENSSL-RAND(1SSL)                                                  OpenSSL                                                  > OPENSSL-RAND(1SSL)NAMEopenssl-rand - generate pseudo-random bytesSYNOPSISopenssl rand [-help] [-out file] [-base64] [-hex] [-engine id] [-rand files] [-writerand file] [-provider name] [-provider-path path][-propquery propq] numDESCRIPTIONThis command generates num random bytes using a cryptographically secure pseudo random number generator (CSPRNG).The random bytes are generated using the RAND_bytes(3) function, which provides a security level of 256 bits, provided it managed toseed itself successfully from a trusted operating system entropy source.  Otherwise, the command will fail with a nonzero error code.For more details, see RAND_bytes(3), RAND(7), and EVP_RAND(7).OPTIONS-helpPrint out a usage message.-out fileWrite to file instead of standard output.-base64Perform base64 encoding on the output.-hexShow the output as a hex string.-engine idSee "Engine Options" in openssl(1).  This option is deprecated.-rand files, -writerand fileSee "Random State Options" in openssl(1) for details.-provider name-provider-path path-propquery propqSee "Provider Options" in openssl(1), provider(7), and property(7).SEE ALSOopenssl(1), RAND_bytes(3), RAND(7), EVP_RAND(7)HISTORYThe -engine option was deprecated in OpenSSL 3.0.COPYRIGHTCopyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.Licensed under the Apache License 2.0 (the "License").  You may not use this file except in compliance with the License.  You can obtaina copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.3.0.2                                                              2023-02-06                                                OPENSSL-RAND(1SSL)

阅读完openssl rand的手册,我们知道,openssl rand能生成n字节的伪随机数,n可以指定,-hex选项用于以十六进制输出这个伪随机数,所以,首先生成一个6字节数的十六进制字符串:

$ openssl rand -hex 6
14480616a8f2

下面只需要每2个字符串之间加一个英文冒号(:)就可以了,我们选择sed命令来处理:

$ openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'
b1:4b:f0:6f:89:4b

这样,就生成了一个随机的MAC地址。
简单解释一下,
openssl rand -hex 6 生成一个6字节数的十六进制字符串,
中间的 | 是管道符,将生成的字符串传递给sed命令,
sed 's/\(..\)/\1:/g; s/.$//'先在每2个字符串后面加一个英文冒号(:),然后去掉末尾的英文冒号,这样就得到了一个MAC地址字符串。

下面,详细解释一下sed 's/\(..\)/\1:/g; s/.$//'的用法:
sed后面是一个单引号包裹的字符串,字符串里有2部分,分号(;)前面的s/\(..\)/\1:/g的作用是在每2个字符串后面加一个英文冒号(:),分号(;)后面的s/.$//去掉末尾的英文冒号。

  1. s/\(..\)/\1:/g

这是一个全局替换表达式,格式为: s/要替换的字符串模式/替换成的字符串/g
s substitute,替代、替换的意思
g global,全局的意思,表示符合条件的要全部替换
\(..\) 表示要匹配的字符串,\用于转义左右括号,其实就是(..),,其中,.代表非换行符的任意字符,(..)代表2个非换行字符组成的任意字符串
\1 代表符合(..)格式的第一个子字符串,\1:就是在符合条件的子字符串加上一个英文冒号(:)
所以, s/\(..\)/\1:/g指的是:在每2个字符串后面加一个英文冒号

2. s/.$//
这是一个替换表达式,格式为: s/要替换的字符串模式/替换成的字符串/,只替换第一个
. 代表非换行符的任意一个字符
$代表末尾
所以, s/.$//指的是:去掉最后一个字符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式--模板方法模式(Template Method Pattern)

一、什么是模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的实现延迟到子类中。模板方法模式允许在不改变算法的…

OpenCV c++ 使用imshow显示灰色窗口

OpenCV使用imshow显示灰色窗口 原因是使用了system(‘pause’);函数&#xff0c;只需要将该函数去掉&#xff0c;使用opencv中的对应函数 waitKey(0) 即可实现同样效果。 system(“pause”); 改为&#xff1a; cv::waitKey(0); 显示效果&#xff1a;

Decoupling Knowledge from Memorization: Retrieval-augmented Prompt Learning

本文是LLM系列的文章&#xff0c;针对《Decoupling Knowledge from Memorization: Retrieval 知识与记忆的解耦&#xff1a;检索增强的提示学习 摘要1 引言2 提示学习的前言3 RETROPROMPT&#xff1a;检索增强的提示学习4 实验5 相关实验6 结论与未来工作 摘要 提示学习方法在…

Unity贝塞尔曲线的落地应用-驱动飞行特效

前言 本文教你怎么用贝塞尔曲线驱动一个飞行特效 中间点的准备 开放一些可以给策划配置的变量 startPos flyEffect.transform.position; var right (GetAimPoistion(targetActor) - flyEffect.transform.position).x > 0?1:-1; midPos startPos new Vector3(righ…

适配ADRC自抗扰控制算法的MFP450-ADRC 套件焕新而来

关注 FMT 开源自驾仪的开发者可能知道&#xff0c;早在 2018 年 7 月 FMT开源自驾仪的早期版本就已经实现了 ADRC 算法。 经过几年的发展&#xff0c;FMT 在自抗扰控制算法的适配上做了进一步的优化&#xff0c;为了方便科研工作者和开发者快速上手&#xff0c;我们针对搭载 F…

并发编程的故事——共享模型之内存

共享模型之内存 文章目录 共享模型之内存一、JVM内存抽象模型二、可见性三、指令重排序 一、JVM内存抽象模型 主要就是把cpu下面的缓存、内存、磁盘等抽象成主存和工作内存 体现在 可见性 原子性 有序性 二、可见性 出现的问题 t线程如果频繁读取一个静态变量&#xff0c;那…

解决Spring Data JPA中的NullPointerException问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

苹果为 Vision Pro 头显申请游戏手柄专利

苹果Vision Pro 推出后&#xff0c;美国专利局公布了两项苹果公司申请的游戏手柄专利&#xff0c;其中一项的专利图如下图所示。据 PatentlyApple 报道&#xff0c;虽然申请专利并不能保证苹果公司会推出游戏手柄&#xff0c;但是苹果公司同时也为游戏手柄申请了商标&#xff0…

性能优化维度

CPU 首先检查 cpu&#xff0c;cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做&#xff0c;也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令&#xff1a; Memory free 命令&#xff1a; 温馨提示&#xff1a…

postgresql-窗口函数

postgresql-窗口函数 简介窗口函数的定义分区选项&#xff08;PARTITION BY&#xff09;排序选项&#xff08;ORDER BY&#xff09;窗口选项&#xff08;frame_clause&#xff09; 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…

因果推断(六)基于微软框架dowhy的因果推断

因果推断&#xff08;六&#xff09;基于微软框架dowhy的因果推断 DoWhy 基于因果推断的两大框架构建&#xff1a;「图模型」与「潜在结果模型」。具体来说&#xff0c;其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应&#xff1b;而在估计阶段则主要…

雅思写作 三小时浓缩学习顾家北 笔记总结(二)

目录 饥饿网一百句翻译 Using government funds for pollution cleanup work can create a comfortable environment. "Allocating government funds to pollution cleanup work can contribute to the creation of a comfortable environment." Some advertise…

ChatGPT的局限性及商业化应用限制讨论

首先&#xff0c;ChatGPT仅使用公开可用的信息&#xff0c;这是其第一个局限。如果基础信息缺失、过时、模糊或过于泛化&#xff0c;AI生成的内容就将不会准确。 只有在使用企业内部专有信息和知识创建特定的GPT时&#xff0c;才会出现真正的商业化解决方案。但对企业而言&…

Opencv基于文字检测去图片水印

做了一个简单的去水印功能&#xff0c;基于文字检测去图片水印。效果如下&#xff1a; 插件功能代码参考如下&#xff1a; using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统&#xff0c;能够更快速的查询信…

es6·await/async案例笔记

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>await/async案例笔记</title> </head> …

【2023研电赛】安谋科技企业命题三等奖作品: 短临天气预报AI云图分析系统

本文为2023年第十八届中国研究生电子设计竞赛安谋科技企业命题三等奖分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来…

python爬虫14:总结

python爬虫14&#xff1a;总结 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…

windows环境 pip安装mysqlclient失败问题记录及解决方案

1.问题记录 > pip install -i https://pypi.douban.com/simple mysqlclient Looking in indexes: https://pypi.douban.com/simple Collecting mysqlclientUsing cached https://pypi.doubanio.com/packages/50/5f/eac919b88b9df39bbe4a855f136d58f80d191cfea34a3dcf96bf5d…

137.只出现一次的数字

目录 一、题目 二、代码 一、题目 137. 只出现一次的数字 II - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public:int singleNumber(vector<int>& nums) {int answer0;int count0;//用于计数for(int i0;i<32;i){count0;for(int j0;j&l…