--
:
--
:
--
hugo-teek is loading...
集成工程线缆检查脚本
最后更新于:
集成工程线缆检查脚本
脚本位置
https://onedayxyy.cn/scripts/check_line/

CheckLine_2019-10-27.py
1[root@docusaurus-wiki check_line]#cat CheckLine_2019-10-27.py
2###19-10-25 《加入光衰检查 带外ipmi模块加载》
3###19-10-27 《加入关闭系统自带的lldp,第一次使用较久》
4import datetime
5import xlrd
6import xlsxwriter
7import paramiko
8import time
9import string
10def Sysname_cut(host_port): #交换机主机名
11 try:
12 stdin, stdout, stderr = ssh.exec_command("lldptool -t -n -i " + host_port + " | grep -A 1 \'System Name TLV\'")
13 tx = stdout.read().decode()
14 if tx == "":
15 stdin, stdout, stderr = ssh.exec_command("for i in `ls /sys/kernel/debug/i40e/`; do echo 'lldp stop' > /sys/kernel/debug/i40e/$i/command ; done;")
16 time.sleep(10)
17 stdin, stdout, stderr = ssh.exec_command("lldptool -t -n -i " + host_port + " | grep -A 1 \'System Name TLV\'")
18 tx = stdout.read().decode()
19 else:
20 pass
21 temp=str(tx)
22 temp1 = temp.split(" ")
23 sysname = str(temp1[1])
24 sysname=sysname.split("\n")[0]
25 return sysname
26 except IndexError:
27 print("list index out of range")
28
29def Port_cut(host_port): #交换机端口
30 try:
31 stdin, stdout, stderr = ssh.exec_command("lldptool -t -n -i "+host_port+" | grep Ifname")
32 tx = stdout.read().decode()
33 temp = tx.split(": ")
34 port = str(str(temp[1]).split("\n")[0])
35 return port
36 except IndexError:
37 print("list index out of range")
38
39def Hostname(): #服务器主机名
40 try:
41 stdin, stdout, stderr = ssh.exec_command("hostname")
42 hostname = stdout.read().decode().strip()
43 return hostname
44 except IndexError:
45 print("list index out of range")
46
47def ServerIPMI(): #服务器IPMI地址
48 try:
49 stdin1, stdout1, stderr1 = ssh.exec_command("lsmod |grep ^ipmi")
50 m = stdout1.read().decode().strip()
51 if m != "":
52 stdin, stdout, stderr = ssh.exec_command("ipmitool lan print | grep 'IP Address '")
53 s = stdout.read().decode().strip()
54 ipmi = s.split(":")[1]
55 return ipmi
56 else:
57 stdin2, stdout2, stderr2 = ssh.exec_command("modprobe ipmi_watchdog&&modprobe ipmi_poweroff&&modprobe ipmi_devintf&&modprobe ipmi_si&&modprobe ipmi_msghandler")
58 f = stdout2.read().decode().strip()
59 time.sleep(2)
60 if f == None:
61 print("error")
62 else:
63 stdin, stdout, stderr = ssh.exec_command("ipmitool lan print | grep 'IP Address '")
64 s = stdout.read().decode().strip()
65 ipmi = s.split(":")[1]
66 return ipmi
67 except Exception as e:
68 print("ErrorInfo: %s" % e)
69
70
71def ServerIPMImask(): #服务器IPMI掩码
72 try:
73 stdin, stdout, stderr = ssh.exec_command("ipmitool lan print | grep \'Subnet Mask\'")
74 s = stdout.read().decode().strip()
75 ipmi = s.split(":")[1]
76 return ipmi
77 except IndexError:
78 print("list index out of range")
79
80
81def ServerIPMIgway(): #服务器IPMI网关
82 try:
83 stdin, stdout, stderr = ssh.exec_command("ipmitool lan print | grep \'Default Gateway IP\'")
84 s = stdout.read().decode().strip()
85 ipmi = s.split(":")[1]
86 return ipmi
87 except IndexError:
88 print("list index out of range")
89
90def ServerSN(): #服务器序列号SN
91 try:
92 stdin, stdout, stderr = ssh.exec_command("dmidecode -s system-serial-number")
93 SN = stdout.read().decode()
94 return SN
95 except IndexError:
96 print("list index out of range")
97
98def ServerNetMAC(port): #服务器网卡MAC地址
99 try:
100 stdin, stdout, stderr = ssh.exec_command(" cat /sys/class/net/" + port + "/address")
101 netMac = stdout.read().decode()
102 return netMac
103 except IndexError:
104 print("list index out of range")
105
106def ServerNetSpeed(port): #服务器网卡速率
107 try:
108 stdin, stdout, stderr = ssh.exec_command("ethtool " + port + " | grep Speed | awk -F \':\' \'{print $2}\'")
109 netSpeed = stdout.read().decode().strip()
110 return netSpeed
111 except IndexError:
112 print("list index out of range")
113
114def SysHostname(port): #交换机端口描述中服务器编号
115 try:
116 stdin, stdout, stderr = ssh.exec_command("lldptool -t -n -i " + port + " | grep -A 1 \'Port Description TLV\'")
117 s = stdout.read().decode().strip()
118 temp=str(s)
119 temp1 = temp.split(" ")
120 sysname = str(temp1[1])
121 sysHostname1 = sysname.split("\n")[0]
122 if "." in sysHostname1:
123 sysHostname = sysHostname1.split(":")[1].split(".")[0]
124 return sysHostname
125 else:
126 return sysHostname1
127 except IndexError:
128 print("list index out of range")
129
130def SysVlan(port): #交换机端口所属VLAN
131 try:
132 stdin, stdout, stderr = ssh.exec_command("lldptool -t -n -i " + port + " | grep -A 1 \'Port VLAN ID TLV\' ")
133 s = stdout.read().decode()
134 temp=str(s)
135 temp1 = temp.split(" ")
136 vlan = str(temp1[1])
137 temp2 = vlan.split("\n")[0]
138 sysvlan = temp2.split(":")[1]
139 return sysvlan
140 except IndexError:
141 print("list index out of range")
142
143def Send_Light(port):
144 stdin, stdout, stderr = ssh.exec_command("ethtool -m "+ port+" | grep \"Laser output power\" | head -1 | awk -F \'\/\' \'{print $2}\'")
145 tx = stdout.read().decode().strip()
146 return tx
147
148def Receive_Light(port):
149 stdin, stdout, stderr = ssh.exec_command("ethtool -m "+ port +" | grep \"Receiver signal\"| awk -F \'/\' \'{print $2}\'")
150 rx = stdout.read().decode().strip()
151 return rx
152
153def LightRS(Port):
154 send_light = Send_Light(Port)
155 if "dBm" not in send_light:
156 worksheet.write(i, 9, "no lightinfo",color)
157 else:
158 sl = str(send_light.split(" ")[0])
159 if "+" in sl:
160 worksheet.write(i, 9, send_light,color)
161 else:
162 sl1 = int(str(sl.replace("-","").split(".")[0]))
163 #print(sl1)
164 if sl1>=5:
165 worksheet.write(i, 9, send_light,color)
166 else:
167 worksheet.write(i, 9, send_light) #光衰发光
168 receive_light = Receive_Light(Port)
169 if "dBm" not in receive_light:
170 worksheet.write(i, 10, "no lightinfo",color)
171 else:
172 rl = str(receive_light.split(" ")[0])
173 if "+" in rl:
174 worksheet.write(i, 10, receive_light,color)
175 else:
176 rl1 = int(str(rl.replace("-","").split(".")[0]))
177 #print(rl1)
178 if rl1>=5:
179 worksheet.write(i, 10, receive_light,color)
180 else:
181 worksheet.write(i, 10, receive_light) #光衰收光
182
183data = xlrd.open_workbook('D:/Port2.xlsx')
184#data = xlrd.open_workbook('C:/Users/liwei/Desktop/Port-huawei-CD.xlsx')
185table = data.sheets()[0]
186nrows = table.nrows
187
188workbook = xlsxwriter.Workbook('D:/SFG.xlsx')
189worksheet = workbook.add_worksheet()
190title = [u'服务器IP',u'服务器主机名',u'服务器IPMI',u'IPMI地址掩码',u'IPMI地址网关',u'序列号SN',u'服务器网卡名称',u'服务器网卡MAC',u'服务器网卡速率',u'光衰发光',u'光衰收光',u'交换机主机名',u'交换机端口',u'交换机端口所属VLAN',u'交换机端口描述中服务器编号',u'是否与服务器一致',u'lldp收集时间']
191format=workbook.add_format()
192format.set_border(1)
193format_title=workbook.add_format()
194format_title.set_border(1)
195format_title.set_bg_color('#cccccc')
196format_title.set_align('center')
197format_title.set_bold()
198format_ave=workbook.add_format()
199format_ave.set_border(1)
200format_ave.set_num_format('0.00')
201worksheet.write_row('A1',title,format_title)
202color = workbook.add_format({'bg_color':'red'})
203Now_Time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
204i = 1
205while i < nrows:
206 ip = table.cell(i,0)
207 Port = table.cell(i,1)
208 Port = str(Port).split("'")[1]
209 ip = str(ip).split("'")[1]
210 print(ip)
211 ssh = paramiko.SSHClient()
212 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
213 try:
214 ssh.connect(hostname=ip, port=22, username='root', password='123456',timeout=3)
215 worksheet.write(i, 0, ip) #服务器IP
216 hostname = Hostname()
217 worksheet.write(i, 1, hostname) #服务器主机名
218 worksheet.write(i, 2, ServerIPMI()) #服务器IPMI
219 worksheet.write(i, 3, ServerIPMImask()) #服务器IPMI掩码
220 worksheet.write(i, 4, ServerIPMIgway()) #服务器IPMI网关
221 worksheet.write(i, 5, ServerSN()) #服务器SN
222 worksheet.write(i, 6, Port) #服务器网卡名称
223 worksheet.write(i, 7, ServerNetMAC(Port)) #服务器网卡MAC
224 speed = ServerNetSpeed(Port)
225 worksheet.write(i, 8, speed) #服务器网卡速率
226 value = str(speed.strip().split("M")[0])
227 if int(value) > 1000:
228 LightRS(Port)
229 else:
230 worksheet.write(i, 9, "非光口")
231 worksheet.write(i, 10, "非光口")
232 worksheet.write(i, 11, Sysname_cut(Port)) #交换机主机名
233 worksheet.write(i, 12, Port_cut(Port)) #交换机端口
234 worksheet.write(i, 13, SysVlan(Port)) #交换机端口所属VLAN
235 sys_hostname = SysHostname(Port)
236 worksheet.write(i, 14, sys_hostname) #交换机端口描述中服务器编号
237 if hostname != sys_hostname:
238 status = "false"
239 else:
240 status = "true"
241 worksheet.write(i, 15, status) #是否与服务器一致
242 worksheet.write(i, 16, Now_Time) #lldp收集时间
243 time.sleep(1)
244 i=i+1
245 ssh.close()
246 except Exception as e:
247 print("Errorinfo:%s" %e)
248 i=i+1
249workbook.close()
lldp.sh
1[root@docusaurus-wiki check_line]#cat lldp.sh
2#!/bin/bash
3lldpad -d
4
5for i in `ls /sys/class/net/ | grep e` ;
6 do echo "enabling lldp for interface: $i" ;
7 lldptool set-lldp -i $i adminStatus=rxtx ;
8 lldptool -T -i $i -V sysName enableTx=yes;
9 lldptool -T -i $i -V portDesc enableTx=yes ;
10 lldptool -T -i $i -V sysDesc enableTx=yes;
11 lldptool -T -i $i -V sysCap enableTx=yes;
12 lldptool -T -i em1 -V mngAddr ipv4=`hostname -I`;
13 lldptool -T -i $i -V mngAddr enableTx=yes;
14done
脚本使用前提条件
1.目标设备必须是linux机器
2.目标机器可以被ssh 次是通过python ssh模块来获取信息的,因此设备必须要可以ssh到其上面的;
3.本次py脚本是在windows机器下的(请注意,可上外网),即winodws上有python环境(python3版本)
脚本使用时需要修改的地方

1.运行次py脚本前,必须先要在所有linux机器上运行lldp.sh脚本:

即在安装系统前,要保证安装lldpad软件包:

2.修改py脚本中ssh端口,用户名及用户密码即可。

3.注意ip列表/输出文件存放路径


4.保证如下python模块已被安装,如未安装,则在执行过程会报错,根据提示,使用pip安装即可:

脚本输出结果说明
1.输出结果如下文件:SFG.xlsx

# 次脚本输出的信息如下:
系统主机名;
带外ip、掩码、网关;
sn;
服务器网卡名、网卡mac、网卡速率、收发光衰;
上联交换机主机名、交换机端口、所属vlan、交换机下服务器描述信息、
2.注意:如果有光衰异常的情况,次脚本会对次目标进行标注:

📡
👤
作者:
余温Gueen
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
余温Gueen Blog!
推荐使用微信支付

推荐使用支付宝
