通過之前的三次實(shí)驗(yàn),我們已經(jīng)可以初步的使用python通過telnet來操作cisco設(shè)備,接下來開始新一期的實(shí)驗(yàn)
創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為五龍口企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),五龍口網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
實(shí)驗(yàn)?zāi)康模壕W(wǎng)絡(luò)巡檢,之后將信息存儲在數(shù)據(jù)庫中
本次實(shí)驗(yàn)需要再次拓展新的拓?fù)洌?,且?shí)驗(yàn)環(huán)境改為ubuntu,后續(xù)的拓展將改為在linux環(huán)境下經(jīng)行。本地地址使用10.10.10.142,通過兩臺管理交換機(jī)來控制六臺路由器,其地址分配
R1 | 10.10.10.101 |
R2 | 10.10.10.102 |
R3 | 10.10.10.103 |
R4 | 10.10.10.104 |
R5 | 10.10.10.105 |
R6 | 10.10.10.106 |
為每臺設(shè)備配置IP地址
由于需要批量配置,可以使用CRT的全局發(fā)送功能實(shí)現(xiàn)批量命令部署
全部部署vty之后,開通三臺設(shè)備以減少機(jī)器負(fù)擔(dān),后續(xù)再陸續(xù)開發(fā)
檢驗(yàn)連通性
發(fā)現(xiàn)鄰居名單
檢驗(yàn)代碼的執(zhí)行結(jié)果
接下來的任務(wù)是通過系統(tǒng)抓包,對這些數(shù)據(jù)包進(jìn)行分析,我們的任務(wù)就是通過抓取cdp數(shù)據(jù)包的形式,記錄鄰居關(guān)系,如果發(fā)生鄰居關(guān)系變動則發(fā)出告警信息。
這里說一下思路:獲取接受的這串字符串,進(jìn)行信息處理,即只收?。篟1 Fas0/0 Fas0/0,并存入本地?cái)?shù)據(jù)庫中,因此需要在數(shù)據(jù)庫中建立一張鄰居表,存儲路由器編號、本地接口號,對端接口號。這里安裝兩個數(shù)據(jù)庫,存儲在兩個地方,一來是災(zāi)備,二來是為了之后做實(shí)驗(yàn),測試關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的在運(yùn)行效率上的不同。
第一步:截取信息
處理這串字符:
'show cdp neighbors\r\nCapability Codes: R- Router, T - Trans Bridge, B - Source Route Bridge\r\n S - Switch, H - Host, I -IGMP, r - Repeater\r\n\r\nDevice ID Local Intrfce Holdtme Capability Platform Port ID\r\nR1 Fas 0/0 172 R S I 3640 Fas 0/0\r\nR6 Fas0/0 144 R S I 3640 Fas 0/0\r\nR4 Fas0/0 170 R S I 3640 Fas 0/0\r\nR2>'
本次打算使用的字符串處理方法是進(jìn)行切片,后續(xù)還可以嘗試使用類似正則表達(dá)式的方法
等待2秒是需要接收設(shè)備返回的鄰居信息
處理完成,美滋滋
第二步:設(shè)計(jì)關(guān)系表,并建表
設(shè)計(jì)MySQL
Database:NDB
Table:cdp_nei
RID | Char |
Local_Int | Char |
Port_ID | Char |
First_record | Datetime |
Change_record | Datetime |
這里已經(jīng)在mysql中的ndb里面建立一張表,存儲的是cdp鄰居的信息,基于當(dāng)前的拓?fù)?,可以預(yù)見當(dāng)所有路由器運(yùn)行之后,表中的信息條目應(yīng)該是6*7=42
First_record用于記錄首次記錄這個數(shù)據(jù)項(xiàng)的時間,Change_record則會自動記錄每次修改這個數(shù)據(jù)項(xiàng)的時間,在查詢的時候,可以通過查看修改數(shù)據(jù)項(xiàng)的時間,如果發(fā)生改變就可以直接提示這條鏈路發(fā)生抖動
第三步:寫入數(shù)據(jù)庫中
我們在調(diào)試界面試一下該命令可以通過
查看效果
好了之后可以在代碼中寫入相關(guān)指令,不過在這之前,先做一件刺激的事兒,先衫褲再跑路!
代碼:
這個是初始版本,后續(xù)為了開發(fā)方便封裝在一個單獨(dú)的類里面的
寫完之后記得同步數(shù)據(jù)才可以在數(shù)據(jù)庫中查看到相關(guān)信息
寫入成功,美滋滋啊
第四步:遍歷所有設(shè)備的鄰居信息
思路:依次telnet登錄每臺設(shè)備,對其使用show cdp nei,然后收集對端端口信息,寫入數(shù)據(jù)庫中
這里就可以動態(tài)的將信息存儲在數(shù)據(jù)庫中,下個實(shí)驗(yàn)我們將通過編寫腳本,將出錯的信息告警
關(guān)于python-mysql的安裝教程以及mysqldb這個工具包的使用筆記在評論中的連接