我用django偷偷绑定员工MAC信息

作者 | ssw
来源:Python 技术
新人入职,我们经常需要登记他的ip和MAC地址,为什么呢?因为行政MM经常来找我“打印机又出问题了”,作为一个桌面维护工程师,我知道打印机的ip是固定的,但员工修改自己的跟它一样引起冲突。这样的话,一不小心涉及到网络安全了,emm..

思路
1、我们需要的信息有ip、MAC、姓名(用于生成公司邮箱)

2、查看录入情况
为方便查看,需要准备一个后台页面。员工提交一条数据,后台就能看到新用户。以新员工邢道荣为例,看看他的录入, 整个流程是这样的:


具体操作
MAC地址怎么获取?
linux执行arping命令,会返回对方的MAC。
我们需要找一台内网linux机器,用paramiko模块登录上去,让它替我们arping员工网页提交过来的ip
[]Unicast reply from 192.168.14.6 [00:0E:C6:83:3B:F9] 1.007ms
翻译成python:
def get_mac(ip):import paramikoclient = paramiko.SSHClient()private_key = paramiko.RSAKey.from_private_key_file('C:/Users/0717/Documents/id_rsa')client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(hostname='192.168.14.173',username='root',port=22,pkey=private_key,)stdout, stderr = client.exec_command('arping -f %s -I ens33|grep reply' % ip)msg = stdout.read().decode('utf-8')client.close()return msg
检测ip
办公网络分有线和无线,两者的ip网段不一样。员工如果通过无线访问这个页面,要提示他仅有线网络需要提交IP信息,无线网络无需提交,请不要使用代理访问本页面
换成python表示
def check_ip(addr):#只匹配有线网络的网段v = re.compile('(192.168.14).(\d+)')return v.match(addr)def record(request):ip = request.META.get('REMOTE_ADDR')if check_ip(ip):return render(request, 'ipinfo.html', {'ip':ip})#check_mac根据re.compile('.*(\w{2}:\w+:\w+:\w+:\w+:\w+).*')进行正则匹配if not check_mac(ip):ip = ip + '检测到MAC地址异常,请联系管理员'return render(request, 'ipinfo.html', {'ip': ip})else:ip = ip + '仅有线网络需要提交IP信息,无线网络无需提交,请不要使用代理访问本页面'return render(request, 'ipinfo.html', {'ip': ip})
根据姓名分配邮箱
根据员工网页提交的姓名,自动分配公司邮箱,格式为“名字拼音的简写+公司邮箱后缀”。
这里用到pypinyin模块
#安装命令,pip install pypinyinfrom pypinyin import lazy_pinyinprint(lazy_pinyin('上将潘凤'))['shang', 'jiang', 'pan', 'feng']
名字长度一般为2~4个汉字,解析成拼音后进行拼接,如'邢道荣'分配的邮箱为xingdr@163.com,'潘凤'为panfeng@163.com
def test1(name_list):name_list = lazy_pinyin(name_list)if len(name_list) == 2:email_name = name_list[0] + name_list[1]elif len(name_list) == 3:email_name = name_list[0] + name_list[1][0] + name_list[2][0]elif len(name_list) == 4:email_name = name_list[0] + name_list[1] + name_list[2][0] + name_list[3][0]email = email_name + '@163.com'print(email)test1('邢道荣')xingdr@163.comtest1('潘凤')panfeng@163.com
提交数据
用requests提交员工信息到后台
user_info = {'username': name, 'password': user_id, 'email': email, 'ip': ip, 'MAC': mac}conn = requests.session()ret = conn.post('http://127.0.0.1:8887/api/v1/users/', data=json.dumps(user_info),

交换机绑定MAC
登录思科交换机用到python的第三方模块ciscolib
switch = ciscolib.Device('192.168.14.10', '123456')switch.connect()switch.enable(password='BxAdmin')switch.cmd("write")
这个可以在管理后台增加一个"保存"按钮,让它执行相关交换机命令。
绑定的相关命令如下:
查看整个端口的ip-mac表
cisco(config)#show mac-address-tableip与mac地址的绑定
cisco(config)#arp 192.168.14.6 0000.e268.9980 ARPAip和交换机端口的绑定,绑定后的端口只有此ip能用,改为别的ip后立即断网
interface FastEthernet0/17ip access-group 6 inaccess-list 6 permit 192.168.14.6
这样就将交换机的FastEthernet0/17与192.168.14.6绑定了
代码下载地址
包括html文件,已上传到 linux服务器上,http://ssw.fit/file/


小结
通过设计这样的网页办事窗口,员工入职从mac绑定到邮箱分配,再到其它信息登记,一条流水线服务,是不是规范和便捷呢,我的工作量也减少了,行政部的入职流程也更清晰了。
本文是由 Python技术 公众号粉丝 ssw 投稿,欢迎大家继续踊跃投稿!

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 习近平同马克龙交流互动的经典瞬间 7903922
- 2 黑龙江水库冰面下现13匹冰冻马 7807939
- 3 微信表情包戒烟再度翻红 7713097
- 4 2025你的消费习惯“更新”了吗 7619598
- 5 三星堆与秦始皇帝陵竟有联系 7521961
- 6 为啥今年流感如此厉害 7427353
- 7 劲酒如何成了年轻女性的神仙水 7330511
- 8 中美合拍《我的哪吒与变形金刚》首播 7234220
- 9 郭美美、王子柏被点名 7136415
- 10 中疾控流感防治七问七答 7045096






![我就是张包包呀 加入我的真爱粉吧[爱你] ](https://imgs.knowsafe.com:8087/img/aideep/2025/9/29/d0b00eb053b2d0f772fb90d4ec608697.jpg?w=250)
AI100
