H3C 交换机telnet查看端口流量小工具

这两天实验室网络不给力,后来发现是有人占用了实验室太多的带宽,而登陆到实验室老的h3c s5500交换机上看端口流量情况很不方便,于是萌生写个小工具来统计端口流量情况,已求找到谁占用了大量带宽。

于是查了下,发现python 有个telnetlib的库,登陆交换机以及进行简单的操作相当简单,于是就写了这么个小工具:

*************************************工作原理********************************************

1、本程序采用telnet的方式登陆到交换机并通过不停的发送display interface [接口] 的方式请求交换机接口
信息并从中提取total input 和 total output的方式计算当前端口速率。

2、本程序仅统计状态为UP的端口的信息。使用display brief interface获取到状态为UP的接口。

3、本程序仅统计gigabytes端口。

*************************************其他**********************************************

1、第一次统计信息,由于没有时间,信息不准确
2、速度的单位都是MB
3、统计结果只能作为参考,并不能代表速率。
4、由于交换机本身更新接口信息速度并不快,而且telnet发送命令回传耗时也较大,本程序设置最小刷新时间,
当前为5s,若由于请求交换机接口所耗时超过5s,则刷新时间为请求耗时时间。

#!/usr/bin/python

import re
import telnetlib
import time
import platform
import os

Host = ‘.....‘
username = ‘‘
password = ‘‘
finish = ‘<....>‘
MIN_INTERVAL = 5.0   # use float
PORT_COUNT = 52      # h3c s5500 has 52 gigabyte ports

# return system type as a string
def get_system_info():
	sys_platform = platform.system()
	if sys_platform == ‘Linux‘ or sys_platform == ‘Darwin‘:
		return ‘UNIX‘
	elif sys_platform == ‘Windows‘:
		return ‘WINDOWS‘
	else:
		return ‘UNIX‘

def clear_screen():
	sys_type = get_system_info()
	if sys_type == ‘UNIX‘:
		os.system("clear")
	elif sys_type == ‘WINDOWS‘:
		os.system(‘cls‘)
	else:
		os.system(‘clear‘)

# login to the device and return the Telnet object
def login():
	# telnet to the device
	print ‘connect...‘
	tn = telnetlib.Telnet(Host,timeout = 5)
	tn.read_until(‘Username:‘,timeout=5)
	tn.write(username + ‘\n‘)

	tn.read_until(‘Password:‘)
	tn.write(password + ‘\n‘)
	tn.read_until(finish)
	print ‘telnet success‘
	return tn

#‘‘‘using Telnet object to get port status and return a tuple filled with ‘UP‘ ports‘‘‘
def get_up_ports(tn):
	example = ‘‘‘
	The brief information of interface(s) under bridge mode:
	Interface            Link      Speed        Duplex   Link-type  PVID
	GE1/0/1              UP        100M(a)      full(a)  access     409
	GE1/0/2              UP        100M(a)      full(a)  access     409
	GE1/0/3              DOWN      auto         auto     access     409‘‘‘

	tn.write(‘display brief interface\n‘)
	tn.write(‘ ‘)
	tn.write(‘ ‘)
	ports_brief = tn.read_until(finish)

	up_ports = []
	port_info	= re.findall(r"GE1/0/(\d+)(\s+)(\w+)",ports_brief)
	for i in port_info:
		if i[-1] == ‘UP‘:
			up_ports.append(i[0])
	print up_ports
	return tuple(up_ports)

def extract_data(port_str):
	‘‘‘ get the data from the result of command ‘display interface GigabitEthernet 1/0/i‘
	‘‘‘

	# (VLAN_ID, total_input, total_output, max_input, max_output)

	if re.search(‘GigabitEthernet‘, port_str) == None:
		return None

	VLAN_ID_list 		= re.findall(r"PVID: (\d+)",port_str)
	input_total_list 	= re.findall(r"Input \(total\):  (\d+) packets, (\d+) bytes", port_str)
	output_total_list 	= re.findall(r"Output \(total\): (\d+) packets, (\d+) bytes", port_str)
	peak_input_list 	= re.findall(r"Peak value of input: (\d+) bytes/sec,", port_str);
	peak_output_list	= re.findall(r"Peak value of output: (\d+) bytes/sec,", port_str);
	state_list			= re.findall(r"current state: (.+)",port_str)

	VLAN_ID = VLAN_ID_list[0] 										# string
	input_total 	= long((list(input_total_list[0]))[1])			# long
	output_total	= long((list(output_total_list[0]))[1])			# long
	peak_input 		= long(peak_input_list[0])						# long
	peak_output 	= long(peak_output_list[0])						# long
	state 			= str(state_list[0])							# string

	return (VLAN_ID, input_total, output_total, peak_input, peak_output, state)

def do_statistic():

	last_input = [0] * PORT_COUNT
	last_output = [0] * PORT_COUNT
	last_update = time.time()

	tn = login()
	up_ports = get_up_ports(tn)

	clear_screen()
	print ‘connected, waiting...‘

	while(True):

		ports_str = []

		# h3c s5500 g1/0/1 - g1/0/52
		# input command to get output
		for i in up_ports:
			tn.write(‘display interface GigabitEthernet 1/0/‘ + str(i) +‘\n‘)
			tn.write(‘ ‘)
			port_info = tn.read_until(finish)
			ports_str.append(port_info)

		# get interval
		interval = (time.time() - last_update)
		if interval < MIN_INTERVAL:
			time.sleep(MIN_INTERVAL - interval)
			interval = MIN_INTERVAL

		# get data and print
		clear_screen()
		print "the input/output is from the port view of the switch."
		print "From the user‘s view: input <-> download; output <-> upload."
		print "the VLAN 1000 is connected to the firewall. So, it‘s opposite\n\n"
		print ‘PORT_NO\tVLAN_ID\tINPUT\tOUTPUT\tMAX_IN\tMAX_OUT\tSTATE (MB)‘

		port_index = 0
		for _port_str in ports_str:
			# (VLAN_ID, total_input, total_output, max_input, max_output)
			data = extract_data(_port_str)
			if data == None:
				continue

			port_no  		= up_ports[port_index]
			vlan_id 		= data[0]
			speed_input 	= (data[1] - last_input[port_index]) / (interval * 1024 * 1024)
			speed_output 	= (data[2] - last_output[port_index]) / (interval * 1024 * 1024)
			max_input 		= data[3] / (1024 * 1024 )
			max_output 		= data[4] / (1024 * 1024 )
			state 			= data[5]

			last_input[port_index] 		= data[1]
			last_output[port_index] 	= data[2]
			port_index += 1

			# show
			print port_no, ‘\t‘, vlan_id, ‘\t‘,float(‘%.2f‘ %speed_input), ‘\t‘, float(‘%.2f‘ %speed_output), ‘\t‘,
			print float(‘%.2f‘ %max_input), ‘\t‘ ,float(‘%.2f‘ %max_output), ‘\t‘, state

		last_update = time.time()

if __name__ == "__main__":
	username = raw_input("please input username:")
	password = raw_input("please input password:")

	print username
	print password
	do_statistic()
	tn.close()

  

代码未做异常处理,仅实现了简单的流量统计功能。

时间: 2024-10-08 00:16:21

H3C 交换机telnet查看端口流量小工具的相关文章

TcpView 查看端口的小工具(推荐)

介绍: TCPView是一个Windows程序,将显示你的详细清单的所有TCP和UDP端点在您的系统,包括拥有进程名称,远程地址和状态的TCP连接. 打开下面的链接就可以下载了. https://technet.microsoft.com/en-us/sysinternals/bb897437.aspx

telnet 查看端口是否可访问

1. 首先为什么要写这篇文章 说到为什么还得从DNS服务器说起.我在我的电脑上安装了DNS服务器,但是用网络去访问还怎么都访问都不上去.于是我就打开dos窗口,用ping命令查看是否可以ping(如 ping 125.34.49.211)通.一查能够ping通.既然可以通,那么就说明这个地址是有效的,那问题出现在那边呢,只能出现在访问的端口port上,于是我就想我应该查看一下端口是否可以进行访问.在dos窗口输入telnet ip port(如: telnet 125.34.49.211 808

Zabbix 3.0 监控交换机(1)&mdash;&mdash;端口流量监控

一.开启交换机的snmp服务 思科:全局模式下输入以下命令 snmp-server community public ro #启动snmp服务,并设置只读团体字符为public: snmp-server enable traps #启动所有traps: 华为:系统视图下输入以下命令 snmp-agent #启动snmp服务 snmp-agent community read cipher public #设置只读团体字符为public: snmp-agent sys-info version a

zabbix监控H3C交换机端口流量

一.获取H3C交换机的OID 要获取H3C交换机的OID,必须确保该交换机是可以被网管的,即该交换机的161(SNMP)端口是被开启的.如161端口没有被开启,需在交换机上加上以下配置: snmp-agent community read whmp snmp-agent sys-info version all snmp-agent target-host trap address udp-domain 10.9.52.42 udp-port 161 param securityname net

PHP Log时时查看小工具

以前Log都是打印在一个文档中,然后打开文件夹,最后打开文档查看里面的内容,每次打开文件夹感觉很烦. 前些日子看到同事开发.NET的时候,用他自己的一个小工具能够时时查看到Log的内容,非常方便,所以就想移植到PHP开发中. 一.查看效果 1.打开客户端小工具mylog.exe,在地址中输入localhost,端口输入5555,点击开始链接,旁边屏幕会显示“开始监听”的字样. 2.打开log.php页面,页面很朴素,就打印了一串字符. 3.查看mylog.exe,里面已接收到hello字符串 二

使用nagios监控交换机端口流量,对低于阈值的流量进行报警

需求:使用nagios服务需要对一台思科交换机的24端口进行流量监控,当流量低于2MB/s时,发送报警:当流量高于3MB/s时,报警取消:当流量介于2MB/s-3MB/s时,处于警告warning状态. 操作方法: 第一:编写脚本文件: vim /usr/lib64/nagios/plugins/check_traffic_less.sh #!/bin/bash RXpre=$(/usr/bin/snmpwalk -v 2c -c public 10.10.3.242 IF-MIB::ifInO

小工具-IP地址获取和设置及端口访问验证(windows)

技术部在业务部门眼里就是后勤部门,业务部门要搬到新大楼去 领导要求去帮忙调试业务人员的电脑,要保证这些大爷们周一上班来,就喝着茶打开新浪,然后打开OA看看. 手上就几个桌面支持的兄弟,要弄一百台多电脑,再看看桌面支持参差不齐的技术能力,于是给他们写了个小工具,让他们能快速实现 IP地址获取,IP地址设置,管理员权限赋权,业务系统端口验证 技术说明: 1.使用一款普通用户运行需要管理员权限的软件(CPAU.exe)支持,赋权或IP设置都通过CPAU做转换,实现普通用户实现管理员功能. 使用用例:

C#使用 SQLite 数据库 开发的配置过程及基本操作类,实例程序:工商银行贵金属行情查看小工具

--首发于博客园, 转载请保留此链接  博客原文地址 本文运行环境: Win7 X64, VS2010 1. SQLite 的优点: SQLite 是一款轻型数据库,开发包只有十几M, 相对于 MSSQL 几个 G 的体积来说简直是小 Case, 而且在打包成的软件里只需要添加相关的 DLL 就可以在其他的电脑运行,这一点来说比 Access 数据库还要来得方便.  SQLite虽然很小巧,但是支持的SQL语句不会太逊色于其他开源数据库. 更多详情参见百科:SQLite 2. 开发包下载 SQL

H3C 交换机设置本地用户和telnet远程登录配置 v7 版本

H3C 交换机设置本地用户和telnet远程登录配置   v7版本 一.配置远程用户密码与本地用户一致 [H3C]telnet server en //开启Telnet 服务[H3C]local-user admin //添加本地用户New local user added.[H3C-luser-manage-admin]password simple ljp123 设置明文密码[H3C-luser-manage-admin]service-type telnet 设置服务类型为telnet[H