社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

AI科技大本营 • 1 年前 • 196 次点击  

作者 | ssw

来源:Python 技术

新人入职,我们经常需要登记他的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 投稿,欢迎大家继续踊跃投稿!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/147590
 
196 次点击