精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Python對網絡設備進行運維?

jf_yLA7iRus ? 來源:網絡技術干貨圈 ? 2023-02-23 09:22 ? 次閱讀

目的:

每天自動接收附件為excel表格的郵件,里面包含客戶端IP地址、客戶端MAC地址、客戶端計算機名、交換機端口、交換機的名字等信息。可以給運維人員帶來一些方便,直觀的查看那些非法的設備接入交換機的那個端口,方便遠程shutdown端口(自動shutdown端口和DHCP拉黑MAC地址,還在編寫中)。

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

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

importpexpect
importsys
importdatetime
importos
today=datetime.date.today().strftime('%Y%m%d')
path="/root/F5/"+today#創建文件夾
os.mkdir(path,777)
ip='x.x.x.x'
passwd='^^^^^'
txt='F51FA-x.x.x.x.txt'
name=''#交換機名字
name1="----More----"
child=pexpect.spawn('telnet%s'%ip)#telnet交換機
fout=open('/root/F5/'+today+'/'+txt,'wb+')#輸出結果保存到此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])#命令輸出結果如果需要空格翻頁
if(index==0):
child.send("")
else:
child.sendline("quit")#如果還有其它命令可以寫在這里
sys.exit()

代碼塊2:

powershell抓取DHCP信息,并輸出到數據庫。

#數據庫配置信息
$Database = 'MAC'
$Server = 'xx'
$UserName = 'sa'
$Password = 'xx'
#powershell 抓取DHCP 可以看網頁 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 #這個命令是抓取DHCP服務器 x.x.x.x 的所有信息 只輸出IPAddress,ClientId,HostName 三列
$DhcpLeaseResult1 = Get-DhcpServerv4Lease -ComputerName x -ScopeId y.y.y.y |Select-Object IPAddress,ClientId,HostName
#抓取DHCP服務器X(名字或者IP),y.y.y.y作用域的信息,只輸出IPAddress,ClientId,HostName三列
#創建連接對象
$SqlConn = New-Object System.Data.SqlClient.SqlConnection

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


#打開數據庫連接
$SqlConn.open()
#清空數據庫里DHCPLease記錄
$SqlCmd = $SqlConn.CreateCommand()
$SqlCmd.commandtext = 'TRUNCATE TABLE [MAC].[dbo].[DHCPF51F]' #數據庫表要提前建立好
$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()
}
#
#關閉數據庫連接
$SqlConn.close()

Exit

代碼塊3:

把txt文檔截取需要的信息,輸出到數據庫。

importos
importsys
importpymssql
importdatetime
#數據庫信息
host='x.x.x.x'
user='sa'
pwd='x.x.x.x'
db='MAC'
#登錄數據庫,并清空[MACF51F]表的內容
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]"#數據庫表要提前建好
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語句插入數據,并命名列
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,所以我門要把交換機MACXXXX-xxxx-xxxx格式改為統一的
#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:

抓取兩個表中MAC地址一樣的信息,并串接成一個表,并做成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')#設置列頭的名字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口是上聯口排除
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('創建excel文件完成!')
workbook.save('/root/F5/%sF51FMAC.xls'%today)#保存excel

代碼塊5:

發送郵件代碼

#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():

#創建一個帶附件的實例
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)#群發需要增加的,隱藏收件人不需要此行,直接調用msg_to就可以
server=smtplib.SMTP()
server.connect('10.17.37.96',25)#SMTP服務器地址
#server.connect('xx.quantacn.com',25)#需要認證的郵件服務器
#server.login('xx@xx.com','xxxxxxx')#XXX為用戶名,XXXXX為密碼
#server.sendmail(msg['from'],msg['to'],msg.as_string())單獨一個收件人
server.sendmail(msg['from'],msg['to'].split(','),msg.as_string())#收件人為多個
#server.sendmail(msg['from'],msg_to,msg.as_string())
server.quit()
return'發送成功'

print(sendmail())
定期的任務計劃:

1、Powershell通過windwos服務器的任務計劃每天自動更新DHCP的信息

2、linux服務器通過crontab命令 定制python代碼的任務計劃

成果:

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

fc502dcc-b316-11ed-bfe3-dac502259ad0.png ?總結:

后期會實現異常端口自動shutdown,和異常客戶端DHCP拉黑MAC地址。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • MAC地址
    +關注

    關注

    1

    文章

    50

    瀏覽量

    11735
  • 網絡設備
    +關注

    關注

    0

    文章

    308

    瀏覽量

    29611
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84455

原文標題:【實用】如何使用Python對網絡設備進行運維?

文章出處:【微信號:釋然IT雜談,微信公眾號:釋然IT雜談】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    外網訪問家里的網絡設備

    網絡設備
    學習電子知識
    發布于 :2023年07月17日 20:06:18

    網絡設備選擇技巧

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

    各類網絡設備

    ` 網絡設備,銳捷,艾泰,D-link,華為,H3C,思科,韓電,安普`
    發表于 11-29 11:15

    Linux常用網絡設備

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

    網絡設備監管系統的設計與實現

    網絡設備監管是指對IP 網絡中的關鍵設備進行實時監控和管理,使網絡管理員對網絡設備的使用情況有更
    發表于 06-23 13:33 ?24次下載

    家用網絡設備簡介

    家用網絡設備簡介 就在幾年前,家用網絡設備還相當簡單。使用一根直連電纜、一部網絡集線器或以太網路由器,您可以將兩部或多部計算機連接在一起,共享外設、
    發表于 08-05 10:26 ?1050次閱讀

    摩托羅拉擬拆分網絡設備業務

    摩托羅拉擬拆分網絡設備業務   昨天,英國《金融時報》稱,摩托羅拉正在為出售其移動網絡設備業務的可能計劃進行準備,但同時也有意與某
    發表于 03-17 09:37 ?468次閱讀

    網絡設備選擇技巧

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

    網絡設備中常見術語含義及故障分析

    網絡設備中常見術語含義及故障分析,詳細解釋了在網絡設備使用中常見的術語
    發表于 12-27 11:38 ?1.4w次閱讀

    解決高速網絡設備中電線太多的問題

    解決高速網絡設備中電線太多的問題
    發表于 11-02 08:15 ?0次下載
    解決高速<b class='flag-5'>網絡設備</b>中電線太多的問題

    Python寫SecureCRT批量登錄/巡檢網絡設備腳本

    因為有約200臺的網絡設備需要每天登錄巡檢、查看配置、保存配置、定期更改密碼(每周改一次),如果都手動去登錄、配置將是非常耗費時間和人力的,所以就有了整理出腳本的想法。查看了網上大多是VBS編寫的腳本,我對VBS不熟悉,剛好前段時間初步學習了Python,就想用
    的頭像 發表于 12-28 09:32 ?4402次閱讀

    使用Python網絡設備進行運的思路分析

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

    如何使用Python通過SNMP監控網絡設備

    豐富的第三方庫,實現繪圖入庫等,該方式比較繁瑣,我們管理的設備還有一些網絡設備,這些設備無法通過開發程序來實現監控,為了實現全平臺全設備監控,我決定使用SNMP實現監控任務。
    的頭像 發表于 01-09 10:38 ?1240次閱讀

    如何選擇適合企業的網絡設備

    進行網絡設備選購前,需要對企業的網絡環境進行全面的了解和分析,包括網絡規模、網絡拓撲結構、
    發表于 03-29 09:35 ?1499次閱讀

    使用Python批量連接華為網絡設備

    隨著網絡規模的擴大和設備數量的增加,手動配置和管理每臺網絡設備變得越來越不現實。因此,自動化工具和腳本變得尤為重要。Python語言以其簡潔性和強大的第三方庫支持,成為了
    的頭像 發表于 08-12 17:48 ?418次閱讀