我用django偷偷綁定員工MAC信息
新人入職,我們經(jīng)常需要登記他的ip和MAC地址,為什么呢?因為行政MM經(jīng)常來找我“打印機(jī)又出問題了”,作為一個桌面維護(hù)工程師,我知道打印機(jī)的ip是固定的,但員工修改自己的跟它一樣引起沖突。這樣的話,一不小心涉及到網(wǎng)絡(luò)安全了,emm..
影響網(wǎng)絡(luò)安全的因素很多,IP地址盜用或地址欺騙就是其中一個常見的因素。為了防止內(nèi)部人員進(jìn)行非法IP盜用(例如盜用權(quán)限更高人員的IP地址),可以在交換機(jī)的每個端口上做IP地址的限定,如果有人修改了自己的IP地址,那么他的網(wǎng)絡(luò)就不通了。他就會來找我“怎么我上不了網(wǎng)?”,好好的上不了網(wǎng),可能你干了啥壞事。作為一個網(wǎng)絡(luò)管理人員,如果對MAC地址和IP進(jìn)行綁定,就會創(chuàng)建一個十分有利的環(huán)境,可以大大減小安全隱患。同時,這些信息可以和姓名一起,在入職的時候統(tǒng)一登記,綁定mac的同時順便給他分配郵箱。不少公司分配郵箱的任務(wù)是行政MM做的,我們幫她做了,可以減少她們的日常工作,從而建立起良好的關(guān)系。聽起來非常不錯,那怎么實行呢?
思路1、我們需要的信息有ip、MAC、姓名(用于生成公司郵箱)這些內(nèi)容可以通過django網(wǎng)頁獲取,誰訪問就會顯示誰的IP地址,用戶只需輸入姓名。跟行政商量,讓它作為入職的一個流程,登記這些信息。
2、查看錄入情況
為方便查看,需要準(zhǔn)備一個后臺頁面。員工提交一條數(shù)據(jù),后臺就能看到新用戶。以新員工邢道榮為例,看看他的錄入, 整個流程是這樣的:
具體操作MAC地址怎么獲???linux執(zhí)行arping命令,會返回對方的MAC。
我們需要找一臺內(nèi)網(wǎng)linux機(jī)器,用paramiko模塊登錄上去,讓它替我們arping員工網(wǎng)頁提交過來的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
辦公網(wǎng)絡(luò)分有線和無線,兩者的ip網(wǎng)段不一樣。員工如果通過無線訪問這個頁面,要提示他僅有線網(wǎng)絡(luò)需要提交IP信息,無線網(wǎng)絡(luò)無需提交,請不要使用代理訪問本頁面
換成python表示
def check_ip(addr): #只匹配有線網(wǎng)絡(luò)的網(wǎng)段 v = re.compile('(192.168.14).(\d+)') return v.match(addr)根據(jù)姓名分配郵箱
def record(request): ip = request.META.get('REMOTE_ADDR')
if check_ip(ip): return render(request, 'ipinfo.html', {'ip':ip}) #check_mac根據(jù)re.compile('.*(\w{2}:\w+:\w+:\w+:\w+:\w+).*')進(jìn)行正則匹配 if not check_mac(ip): ip = ip + '檢測到MAC地址異常,請聯(lián)系管理員' return render(request, 'ipinfo.html', {'ip': ip}) else: ip = ip + '僅有線網(wǎng)絡(luò)需要提交IP信息,無線網(wǎng)絡(luò)無需提交,請不要使用代理訪問本頁面' return render(request, 'ipinfo.html', {'ip': ip})
根據(jù)員工網(wǎng)頁提交的姓名,自動分配公司郵箱,格式為“名字拼音的簡寫+公司郵箱后綴”。
這里用到pypinyin模塊
#安裝命令,pip install pypinyinfrom pypinyin import lazy_pinyin
print(lazy_pinyin('上將潘鳳'))['shang', 'jiang', 'pan', 'feng']
名字長度一般為2~4個漢字,解析成拼音后進(jìn)行拼接,如'邢道榮'分配的郵箱為[email protected],'潘鳳'為[email protected]
提交數(shù)據(jù)
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),
登錄思科交換機(jī)用到python的第三方模塊ciscolib
switch = ciscolib.Device('192.168.14.10', '123456')switch.connect()switch.enable(password='BxAdmin')switch.cmd("write")
這個可以在管理后臺增加一個"保存"按鈕,讓它執(zhí)行相關(guān)交換機(jī)命令。
綁定的相關(guān)命令如下:
- 查看整個端口的ip-mac表
cisco(config)#show mac-address-table
- ip與mac地址的綁定
cisco(config)#arp 192.168.14.6 0000.e268.9980 ARPA
- ip和交換機(jī)端口的綁定,綁定后的端口只有此ip能用,改為別的ip后立即斷網(wǎng)
cisco(config)#interface FastEthernet0/17cisco(config-if)#ip access-group 6 in cisco(config)#access-list 6 permit 192.168.14.6
這樣就將交換機(jī)的FastEthernet0/17與192.168.14.6綁定了
代碼下載地址包括html文件,已上傳到 linux服務(wù)器上,http://ssw.fit/file/
小結(jié)通過設(shè)計這樣的網(wǎng)頁辦事窗口,員工入職從mac綁定到郵箱分配,再到其它信息登記,一條流水線服務(wù),是不是規(guī)范和便捷呢,我的工作量也減少了,行政部的入職流程也更清晰了。
本文是由 Python技術(shù) 公眾號粉絲 ssw 投稿,歡迎大家繼續(xù)踴躍投稿!
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。