0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Python對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行運(yùn)維?

jf_yLA7iRus ? 來源:網(wǎng)絡(luò)技術(shù)干貨圈 ? 2023-02-23 09:22 ? 次閱讀

目的:

每天自動(dòng)接收附件為excel表格的郵件,里面包含客戶端IP地址、客戶端MAC地址、客戶端計(jì)算機(jī)名、交換機(jī)端口、交換機(jī)的名字等信息??梢越o運(yùn)維人員帶來一些方便,直觀的查看那些非法的設(shè)備接入交換機(jī)的那個(gè)端口,方便遠(yuǎn)程shutdown端口(自動(dòng)shutdown端口和DHCP拉黑MAC地址,還在編寫中)。

思路: 1、用python代碼抓取交換機(jī)的上面的信息,例如客戶端的MAC地址,交換機(jī)端口,并把抓取的信息篩選,存入sqlserver數(shù)據(jù)庫。 2、用Powershell抓去DHCP的信息,篩選客戶端的MAC地址,計(jì)算機(jī)名信息存入sqlserver數(shù)據(jù)庫。 3、通過Python代碼,調(diào)用SQL語句,把輸出結(jié)果保存到excel表格。 4、通過Python代碼,發(fā)送郵件。 5、linux通過crontab,Powershell通過自動(dòng)任務(wù)計(jì)劃,每天定時(shí)執(zhí)行代碼和腳本。代碼塊1:

抓取交換機(jī)信息代碼,并保存到本地的txt。

importpexpect
importsys
importdatetime
importos
today=datetime.date.today().strftime('%Y%m%d')
path="/root/F5/"+today#創(chuàng)建文件夾
os.mkdir(path,777)
ip='x.x.x.x'
passwd='^^^^^'
txt='F51FA-x.x.x.x.txt'
name=''#交換機(jī)名字
name1="----More----"
child=pexpect.spawn('telnet%s'%ip)#telnet交換機(jī)
fout=open('/root/F5/'+today+'/'+txt,'wb+')#輸出結(jié)果保存到此txt
child.logfile=fout
child.expect('Username:')
child.sendline("admin")
child.expect('(?i)ssword:')
child.sendline("%s"%passwd)
child.expect("%s"%name)
child.sendline("dislldpneighbor-informationlist")
child.expect("%s"%name)
child.sendline("dismac-address")
foriinrange(10):
index=child.expect([name1,"%s"%name])#命令輸出結(jié)果如果需要空格翻頁
if(index==0):
child.send("")
else:
child.sendline("quit")#如果還有其它命令可以寫在這里
sys.exit()

代碼塊2:

powershell抓取DHCP信息,并輸出到數(shù)據(jù)庫。

#數(shù)據(jù)庫配置信息
$Database = 'MAC'
$Server = 'xx'
$UserName = 'sa'
$Password = 'xx'
#powershell 抓取DHCP 可以看網(wǎng)頁 http://blog.51cto.com/wenzhongxiang/2065645

#讀取DHCPLease記錄
#$DhcpLeaseResult1 = Get-DhcpServerv4Scope -ComputerName x.x.x.x |Get-DhcpServerv4Lease -ComputerName x.x.x.x |Select-Object IPAddress,ClientId,HostName #這個(gè)命令是抓取DHCP服務(wù)器 x.x.x.x 的所有信息 只輸出IPAddress,ClientId,HostName 三列
$DhcpLeaseResult1 = Get-DhcpServerv4Lease -ComputerName x -ScopeId y.y.y.y |Select-Object IPAddress,ClientId,HostName
#抓取DHCP服務(wù)器X(名字或者IP),y.y.y.y作用域的信息,只輸出IPAddress,ClientId,HostName三列
#創(chuàng)建連接對(duì)象
$SqlConn = New-Object System.Data.SqlClient.SqlConnection

#使用賬號(hào)連接MSSQL
$SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password"


#打開數(shù)據(jù)庫連接
$SqlConn.open()
#清空數(shù)據(jù)庫里DHCPLease記錄
$SqlCmd = $SqlConn.CreateCommand()
$SqlCmd.commandtext = 'TRUNCATE TABLE [MAC].[dbo].[DHCPF51F]' #數(shù)據(jù)庫表要提前建立好
$SqlCmd.ExecuteScalar()

#插入最新的DHCPLease記錄
foreach($x in $DhcpLeaseResult1)
{
Write-Host $x.IPAddress.IPAddressToString,$x.ClientId,$x.HostName
$SqlCmd.commandtext = "INSERT INTO [MAC].[dbo].[DHCPF51F] (IP,MAC,Hostname) VALUES('{0}','{1}','{2}')" -f $x.IPAddress.IPAddressToString,$x.ClientId,$x.HostName
$SqlCmd.ExecuteScalar()
}
#
#關(guān)閉數(shù)據(jù)庫連接
$SqlConn.close()

Exit

代碼塊3:

把txt文檔截取需要的信息,輸出到數(shù)據(jù)庫。

importos
importsys
importpymssql
importdatetime
#數(shù)據(jù)庫信息
host='x.x.x.x'
user='sa'
pwd='x.x.x.x'
db='MAC'
#登錄數(shù)據(jù)庫,并清空[MACF51F]表的內(nèi)容
conn=pymssql.connect(host=host,user=user,password=pwd,database=db,timeout=1,login_timeout=1,charset="utf8")
cur=conn.cursor()
sqls="deletefrom[dbo].[MACF51F]"#數(shù)據(jù)庫表要提前建好
cur.execute(sqls)
conn.commit()
conn.close()
today=datetime.date.today().strftime('%Y%m%d')
path="/root/F5/"+today
list1=os.listdir(path)#讀取文件夾下所有txt文件,注意不要放其它文檔,否則需要寫判定語句。
defgetid(linea,lineb):
conn=pymssql.connect(host=host,user=user,password=pwd,database=db,timeout=1,login_timeout=1,charset="utf8")
cur=conn.cursor()
sqls1="insertinto[MACF51F]values('%s','%s','%s')"%(linea,lineb,name)#sql語句插入數(shù)據(jù),并命名列
print(sqls)
cur.execute(sqls1)
conn.commit()
conn.close()

fortxtinlist1:
file=open('%s/%s'%(path,txt),'r+')#打開文件夾下的所有文檔
name=txt[:-4]
print(txt)
print(name)


forlineinfile.readlines():

if'Learned'inline:
if'More'inline:#截取MAC地址,由于dhcp拉出來的MAC格式為xx-xx-xx-xx-xx-xx,所以我門要把交換機(jī)MACXXXX-xxxx-xxxx格式改為統(tǒng)一的
#linea=(line[43:57]).rstrip()
linea=(line[43:45]+'-'+line[45:48]+line[48:50]+'-'+line[50:53]+line[53:55]+'-'+line[55:57]).rstrip()
lineb=(line[84:107]).rstrip()
else:
#linea=(line[0:15]).rstrip()
linea=(line[0:2]+'-'+line[2:5]+line[5:7]+'-'+line[7:10]+line[10:12]+'-'+line[12:14]).rstrip()
lineb=(line[41:65]).rstrip()
print(linea)
print(lineb)
getid(linea,lineb)



代碼塊4:

抓取兩個(gè)表中MAC地址一樣的信息,并串接成一個(gè)表,并做成excel。

importpymssql
importxlwt
importdatetime

workbook=xlwt.Workbook()
today=datetime.date.today().strftime('%Y%m%d')
sheet1=workbook.add_sheet('sheet1',cell_overwrite_ok=True)#定義sheet1
sheet1.write(0,0,'HotName')#設(shè)置列頭的名字0,0代表0行0列
sheet1.write(0,1,'MACAddress')
sheet1.write(0,2,'IPAddress')
sheet1.write(0,3,'Port')
sheet1.write(0,4,'SwitchName')


defexceladd(HotName,MACAddress,IPAddress,Port,SwitchName,index):
sheet1.write(index,0,HotName)
sheet1.write(index,1,MACAddress)
sheet1.write(index,2,IPAddress)
sheet1.write(index,3,Port)
sheet1.write(index,4,SwitchName)

host='x.x.x.x'
user='sa'
pwd='x'
db='MAC'
conn=pymssql.connect(host=host,user=user,password=pwd,database=db,timeout=1,login_timeout=1,charset="utf8")
cur=conn.cursor()
sqls="selectHostname,mac,ip,port,Switchnamefrom[dbo].[MACF51F]join[dbo].[DHCPF51F]onMAC=MACADDwherePort<>'GigabitEthernet1/0/24'orderbySwitchname,Port"#SQL命令24口是上聯(lián)口排除
cur.execute(sqls)

listall=cur.fetchall()#抓取sql輸出的每一行信息,并分解保存到excel表中。
index=1
forlineinlistall:
exceladd(line[0],line[1],line[2],line[3],line[4],index)
index+=1
conn.commit()
conn.close()

print('創(chuàng)建excel文件完成!')
workbook.save('/root/F5/%sF51FMAC.xls'%today)#保存excel

代碼塊5:

發(fā)送郵件代碼

#coding:utf-8
fromemail.mime.textimportMIMEText
fromemail.mime.multipartimportMIMEMultipart
importsmtplib
importdatetime
fromemailimportencoders
fromemail.mime.imageimportMIMEImage
fromemail.mime.baseimportMIMEBase

today=datetime.date.today().strftime('%Y%m%d')
defsendmail():

#創(chuàng)建一個(gè)帶附件的實(shí)例
msg=MIMEMultipart()
ctype='application/octet-stream'
maintype,subtype=ctype.split('/',1)
file=MIMEBase(maintype,subtype)
file.set_payload(open(r'/root/F5/%sF51FMAC.xls'%today,'rb').read())
file.add_header('Content-Disposition','attachment',filename='%sF51FMAC.xls'%today)
encoders.encode_base64(file)
msg.attach(file)
#加郵件頭
msg_to=['xxx@xxx.com','xx@xxx.com','Klaus.Wang@xx.com','Eric.lai@xx.com']
msg['from']='xxx@xx.com'
msg['subject']=u"[接入巡檢]%s"%today
msg.attach(MIMEText('接入MAC地址記錄如附件','plain','utf-8'))

msg['to']=','.join(msg_to)#群發(fā)需要增加的,隱藏收件人不需要此行,直接調(diào)用msg_to就可以
server=smtplib.SMTP()
server.connect('10.17.37.96',25)#SMTP服務(wù)器地址
#server.connect('xx.quantacn.com',25)#需要認(rèn)證的郵件服務(wù)器
#server.login('xx@xx.com','xxxxxxx')#XXX為用戶名,XXXXX為密碼
#server.sendmail(msg['from'],msg['to'],msg.as_string())單獨(dú)一個(gè)收件人
server.sendmail(msg['from'],msg['to'].split(','),msg.as_string())#收件人為多個(gè)
#server.sendmail(msg['from'],msg_to,msg.as_string())
server.quit()
return'發(fā)送成功'

print(sendmail())
定期的任務(wù)計(jì)劃:

1、Powershell通過windwos服務(wù)器的任務(wù)計(jì)劃每天自動(dòng)更新DHCP的信息

2、linux服務(wù)器通過crontab命令 定制python代碼的任務(wù)計(jì)劃

成果:

fc2f36bc-b316-11ed-bfe3-dac502259ad0.png

fc502dcc-b316-11ed-bfe3-dac502259ad0.png ?總結(jié):

后期會(huì)實(shí)現(xiàn)異常端口自動(dòng)shutdown,和異??蛻舳薉HCP拉黑MAC地址。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MAC地址
    +關(guān)注

    關(guān)注

    1

    文章

    49

    瀏覽量

    11715
  • 網(wǎng)絡(luò)設(shè)備

    關(guān)注

    0

    文章

    304

    瀏覽量

    29556
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4759

    瀏覽量

    84295

原文標(biāo)題:【實(shí)用】如何使用Python對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行運(yùn)維?

文章出處:【微信號(hào):釋然IT雜談,微信公眾號(hào):釋然IT雜談】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    外網(wǎng)訪問家里的網(wǎng)絡(luò)設(shè)備

    網(wǎng)絡(luò)設(shè)備
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2023年07月17日 20:06:18

    網(wǎng)絡(luò)設(shè)備選擇技巧

    1.硬件要兼容  在網(wǎng)絡(luò)設(shè)備選擇上,盡量使所有網(wǎng)絡(luò)設(shè)備都采用一家公司的產(chǎn)品,這樣可以最大限度地減少高端與低端甚至是同等級(jí)別不同設(shè)備間的不兼容問題。而且不要為了省幾十塊錢而選擇沒有質(zhì)量保證的網(wǎng)絡(luò)
    發(fā)表于 04-08 09:34

    各類網(wǎng)絡(luò)設(shè)備

    ` 網(wǎng)絡(luò)設(shè)備,銳捷,艾泰,D-link,華為,H3C,思科,韓電,安普`
    發(fā)表于 11-29 11:15

    Linux常用網(wǎng)絡(luò)設(shè)備

    網(wǎng)絡(luò)設(shè)備是計(jì)算機(jī)體系結(jié)構(gòu)中必不可少的一部分,處理器如果想與外界通信,通常都會(huì)選擇網(wǎng)絡(luò)設(shè)備作為通信接口。眾所周知,在 OSI(Open Systems Interconnection,開放網(wǎng)際互連)中,網(wǎng)絡(luò)被劃分為七個(gè)層次,從下到
    發(fā)表于 07-25 07:37

    網(wǎng)絡(luò)設(shè)備監(jiān)管系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    網(wǎng)絡(luò)設(shè)備監(jiān)管是指對(duì)IP 網(wǎng)絡(luò)中的關(guān)鍵設(shè)備進(jìn)行實(shí)時(shí)監(jiān)控和管理,使網(wǎng)絡(luò)管理員對(duì)網(wǎng)絡(luò)設(shè)備的使用情況有更
    發(fā)表于 06-23 13:33 ?24次下載

    家用網(wǎng)絡(luò)設(shè)備簡(jiǎn)介

    家用網(wǎng)絡(luò)設(shè)備簡(jiǎn)介 就在幾年前,家用網(wǎng)絡(luò)設(shè)備還相當(dāng)簡(jiǎn)單。使用一根直連電纜、一部網(wǎng)絡(luò)集線器或以太網(wǎng)路由器,您可以將兩部或多部計(jì)算機(jī)連接在一起,共享外設(shè)、
    發(fā)表于 08-05 10:26 ?1046次閱讀

    摩托羅拉擬拆分網(wǎng)絡(luò)設(shè)備業(yè)務(wù)

    摩托羅拉擬拆分網(wǎng)絡(luò)設(shè)備業(yè)務(wù)   昨天,英國(guó)《金融時(shí)報(bào)》稱,摩托羅拉正在為出售其移動(dòng)網(wǎng)絡(luò)設(shè)備業(yè)務(wù)的可能計(jì)劃進(jìn)行準(zhǔn)備,但同時(shí)也有意與某
    發(fā)表于 03-17 09:37 ?466次閱讀

    網(wǎng)絡(luò)設(shè)備選擇技巧

      1.硬件要兼容   在網(wǎng)絡(luò)設(shè)備選擇上,盡量使所有網(wǎng)絡(luò)設(shè)備都采用一家公司的產(chǎn)品,這樣可以最大限度地減少高端與低端甚至是同等級(jí)別不同設(shè)備間的不兼容問題。而
    發(fā)表于 12-27 10:57 ?1486次閱讀

    網(wǎng)絡(luò)設(shè)備中常見術(shù)語含義及故障分析

    網(wǎng)絡(luò)設(shè)備中常見術(shù)語含義及故障分析,詳細(xì)解釋了在網(wǎng)絡(luò)設(shè)備使用中常見的術(shù)語
    發(fā)表于 12-27 11:38 ?1.4w次閱讀

    解決高速網(wǎng)絡(luò)設(shè)備中電線太多的問題

    解決高速網(wǎng)絡(luò)設(shè)備中電線太多的問題
    發(fā)表于 11-02 08:15 ?0次下載
    解決高速<b class='flag-5'>網(wǎng)絡(luò)設(shè)備</b>中電線太多的問題

    Python寫SecureCRT批量登錄/巡檢網(wǎng)絡(luò)設(shè)備腳本

    因?yàn)橛屑s200臺(tái)的網(wǎng)絡(luò)設(shè)備需要每天登錄巡檢、查看配置、保存配置、定期更改密碼(每周改一次),如果都手動(dòng)去登錄、配置將是非常耗費(fèi)時(shí)間和人力的,所以就有了整理出腳本的想法。查看了網(wǎng)上大多是VBS編寫的腳本,我對(duì)VBS不熟悉,剛好前段時(shí)間初步學(xué)習(xí)了Python,就想用
    的頭像 發(fā)表于 12-28 09:32 ?4220次閱讀

    使用Python對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行運(yùn)的思路分析

    python代碼抓取交換機(jī)的上面的信息,例如客戶端的MAC地址,交換機(jī)端口,并把抓取的信息篩選,存入sqlserver數(shù)據(jù)庫。
    發(fā)表于 01-26 16:38 ?515次閱讀

    如何使用Python通過SNMP監(jiān)控網(wǎng)絡(luò)設(shè)備?

    豐富的第三方庫,實(shí)現(xiàn)繪圖入庫等,該方式比較繁瑣,我們管理的設(shè)備還有一些網(wǎng)絡(luò)設(shè)備,這些設(shè)備無法通過開發(fā)程序來實(shí)現(xiàn)監(jiān)控,為了實(shí)現(xiàn)全平臺(tái)全設(shè)備監(jiān)控,我決定使用SNMP實(shí)現(xiàn)監(jiān)控任務(wù)。
    的頭像 發(fā)表于 01-09 10:38 ?1192次閱讀

    如何選擇適合企業(yè)的網(wǎng)絡(luò)設(shè)備

    進(jìn)行網(wǎng)絡(luò)設(shè)備選購前,需要對(duì)企業(yè)的網(wǎng)絡(luò)環(huán)境進(jìn)行全面的了解和分析,包括網(wǎng)絡(luò)規(guī)模、網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、
    發(fā)表于 03-29 09:35 ?1431次閱讀

    使用Python批量連接華為網(wǎng)絡(luò)設(shè)備

    隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和設(shè)備數(shù)量的增加,手動(dòng)配置和管理每臺(tái)網(wǎng)絡(luò)設(shè)備變得越來越不現(xiàn)實(shí)。因此,自動(dòng)化工具和腳本變得尤為重要。Python語言以其簡(jiǎn)潔性和強(qiáng)大的第三方庫支持,成為了
    的頭像 發(fā)表于 08-12 17:48 ?348次閱讀