新闻  |   论坛  |   博客  |   在线研讨会
我用django偷偷绑定员工MAC信息
AI科技大本营 | 2022-10-20 20:10:42    阅读:129   发布文章

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

影响网络安全的因素很多,IP地址盗用或地址欺骗就是其中一个常见的因素。为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP地址),可以在交换机的每个端口上做IP地址的限定,如果有人修改了自己的IP地址,那么他的网络就不通了。他就会来找我“怎么我上不了网?”,好好的上不了网,可能你干了啥坏事。作为一个网络管理人员,如果对MAC地址和IP进行绑定,就会创建一个十分有利的环境,可以大大减小安全隐患。同时,这些信息可以和姓名一起,在入职的时候统一登记,绑定mac的同时顺便给他分配邮箱。不少公司分配邮箱的任务是行政MM做的,我们帮她做了,可以减少她们的日常工作,从而建立起良好的关系。听起来非常不错,那怎么实行呢?图片

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

这些内容可以通过django网页获取,谁访问就会显示谁的IP地址,用户只需输入姓名。跟行政商量,让它作为入职的一个流程,登记这些信息。

图片


2、查看录入情况

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

图片

图片

具体操作MAC地址怎么获取?

linux执行arping命令,会返回对方的MAC。

我们需要找一台内网linux机器,用paramiko模块登录上去,让它替我们arping员工网页提交过来的ip



[root@vm3 ~]# arping -f 192.168.14.6 -I ens33|grep replyUnicast reply from 192.168.14.6 [00:0E:C6:83:3B:F9]  1.007ms

翻译成python:















def get_mac(ip):    import paramiko    client = 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,)    stdin, 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_pinyin
print(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-table

  • ip与mac地址的绑定


cisco(config)#arp 192.168.14.6 0000.e268.9980 ARPA

  • ip和交换机端口的绑定,绑定后的端口只有此ip能用,改为别的ip后立即断网




cisco(config)#interface FastEthernet0/17cisco(config-if)#ip access-group 6 in        cisco(config)#access-list 6 permit 192.168.14.6


这样就将交换机的FastEthernet0/17与192.168.14.6绑定了

代码下载地址

包括html文件,已上传到 linux服务器上,http://ssw.fit/file/

图片

图片

小结

通过设计这样的网页办事窗口,员工入职从mac绑定到邮箱分配,再到其它信息登记,一条流水线服务,是不是规范和便捷呢,我的工作量也减少了,行政部的入职流程也更清晰了。

本文是由 Python技术 公众号粉丝 ssw 投稿,欢迎大家继续踊跃投稿!


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客