Skip to main content
Glama

OPS MCP Server

by Heht571
network_tools.cpython-310.pyc37.9 kB
o 2��g@��@sxddlmZddlmZmZmZmZmZmZm Z m Z m Z ddl Z ddl Z ddlZddlZddlmZmZddlmZddlmZddlZejejdd�e�d �Zee�ZGd d �d e�ZGd d �d e�ZGdd�de�Z Gdd�de�Z!Gdd�de�Z"Gdd�de�Z#Gdd�de$e�Z%Gdd�de$e�Z&Gdd�de�Z'Gdd�de$e�Z(Gdd�d�Z)Gd d!�d!�Z*Gd"d#�d#e�Z+e�,� $ % &dNdOd0d1��Z-e�,�d$d%gd&fdPd4d5��Z.e�,� $ % 6 &dQdRd8d9��Z/e�,� $ % : ;dSdTd=d>��Z0e�,� $ % $ &dUdVd@dA��Z1e�,� $ % $ &dUdWdCdD��Z2e�,� $ % $ &dUdXdFdG��Z3e�,�d$d%d&gfdYdIdJ��Z4edKk�r:ej5dLdM�dSdS)Z�)� annotations) �Optional�Literal� TypedDict�List�Dict�Any�Union�Callable�castN)� BaseModel�Field)�FastMCP)�Enumz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�level�formatZ network_toolsc@sfeZdZUdZedd�Zded<eed�Zded<eed�Z ded <ed d�Z d ed <d Z ded<d S)�InspectionResultu统一巡检结果模型�unknown)�defaultz&Literal['success', 'error', 'unknown']�status)�default_factory�dict�data� raw_outputs��str�errorNz Optional[str]�summary) �__name__� __module__� __qualname__�__doc__r r�__annotations__rrrrr�r#r#�C/Users/he.ht/Documents/Cline/MCP/mytestmcp/mcptest/network_tools.pyrs rc@�BeZdZUdZded<ded<ded<ded<ded<ded<d S) � NetworkDeviceu网络设备信息数据结构r�hostname� device_type�model� os_version� serial_number�uptimeN�rrr r!r"r#r#r#r$r&�  r&c@�JeZdZUdZded<ded<ded<ded<ded<ded<ded <d S) � SwitchPortu交换机端口数据结构r� interfacer�vlan�duplex�speed�type� descriptionNr-r#r#r#r$r0(�  r0c@r%) �Routeu路由表条目数据结构r� destination�mask�gatewayr1�metric�protocolNr-r#r#r#r$r82r.r8c@r/) �ACLRuleuACL规则数据结构r�rule_id�actionr=�sourcer9�portr6Nr-r#r#r#r$r>;r7r>c@s2eZdZUdZded<ded<ded<ded<dS) �VLANuVLAN数据结构r�vlan_id�namer� List[str]�portsNr-r#r#r#r$rCEs  rCc@s(eZdZdZdZdZdZdZdZdZ dS) �NetworkDeviceTypeu网络设备类型枚举�switch�router�firewallZ load_balancerZwifi_aprN) rrr r!�SWITCH�ROUTER�FIREWALL� LOAD_BALANCER�WIFI_AP�UNKNOWNr#r#r#r$rHOsrHc@sHeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdS)� NetworkVendoru网络设备厂商枚举�cisco�huawei�h3c�juniper�arista�fortinetZ palo_alto� checkpoint�f5�ruijie�dell�hpe�zyxelrN)rrr r!�CISCO�HUAWEI�H3C�JUNIPER�ARISTA�FORTINET� PALO_ALTO� CHECKPOINT�F5�RUIJIE�DELL�HPE�ZYXELrQr#r#r#r$rR[s rRc@sjeZdZUdZded<ded<ded<ded<ded<ded<ded <ded <ded <ded <ded <dS)� OpticalModuleu光模块数据结构rrBr5r+�vendor� part_number� wavelength�distance� temperature�tx_power�rx_powerrNr-r#r#r#r$rlos  rlc@s0eZdZdZdZdZdZdZdZdZ dZ d Z d S) � NetworkToolsu网络设备工具枚举�identify_network_device�check_switch_ports�check_router_routes�backup_network_config�check_acl_config� inspect_vlans�check_optical_modules�check_device_performanceN) rrr r!ZIDENTIFY_DEVICEZCHECK_SWITCH_PORTSZCHECK_ROUTER_ROUTESZ BACKUP_CONFIGZ CHECK_ACLZ INSPECT_VLANSZCHECK_OPTICAL_MODULESZCHECK_DEVICE_PERFORMANCEr#r#r#r$rt�srtc@sFeZdZdZiZ    dddd�Zddd�Zdd�Zedd��Z dS)� SSHManageru*SSH连接管理器(上下文管理器)r��Tr'r�username�passwordrB�int�timeout� use_cache�boolcCsRt��|_|j�t���|||||d�|_|�d|�d|��|_||_d|_dS)N)r'r�r�rBr��@�:F) �paramikoZ SSHClient�clientZset_missing_host_key_policyZ AutoAddPolicy�connect_params�connection_keyr��is_new_connection)�selfr'r�r�rBr�r�r#r#r$�__init__�s � zSSHManager.__init__�return�paramiko.SSHClientc Csrzg|jrD|j|jvrD|j|j}z|jddd�t�d|j���||_|jWWStyCt�d|j�d��|j�|jd�Ynwt�d|j���|jj d i|j ��d|_ |jrd|j|j|j<|jWSt j y�}zt�d |j�d t|�����d}~wt jy�}zt�d |j�d t|�����d}~wty�}zt�d |j�d t|�����d}~ww)Nzecho 1�)r�z Using cached SSH connection for zCached connection invalid for z, creating new onezCreating new SSH connection to TzSSH authentication failed for �: zSSH connection error for zUnexpected error connecting to r#)r�r��_connection_cache� exec_command�logger�debugr�� Exception�pop�connectr�r�r�ZAuthenticationExceptionrrZ SSHException)r�Z cached_client�er#r#r$� __enter__�s>   �����zSSHManager.__enter__cCs4|js|jrt�d|j���|j��dSdSdS)NzClosing SSH connection to )r�r�r�r�r�r��close)r��exc_type�exc_val�exc_tbr#r#r$�__exit__�s �zSSHManager.__exit__cCs>|j��D] }z|��WqYq|j��t�d�dS)u清除连接缓存zSSH connection cache clearedN)r��valuesr��clearr��info)�clsr�r#r#r$� clear_cache�s  zSSHManager.clear_cacheN)rr~rT) r'rr�rr�rrBr�r�r�r�r�)r�r�) rrr r!r�r�r�r�� classmethodr�r#r#r#r$r}�s � $r}c@s�eZdZdZeddd��Zeddd��Zedd d ��Zedd d��Zeddd��Z ed dd��Z ed!dd��Z ed"dd��Z dS)#�NetworkInspectoru网络设备解析器�outputrr�cs�|���t�fdd�dD��rtjSt�fdd�dD��r tjSt�fdd�dD��r.tjSt�fdd�d D��r<tjSt�fd d�d D��rJtjStjS) u检测网络设备类型c3��|]}|�vVqdS�Nr#��.0�kw�Z output_lowerr#r$� <genexpr>���z6NetworkInspector.detect_device_type.<locals>.<genexpr>)rI�catalyst�nexusrWZ3comc3r�r�r#r�r�r#r$r��r�)rJr;Zrouting�ios-xr�junosc3r�r�r#r�r�r#r$r��r�)rK� palo altorXrYZasac3r�r�r#r�r�r#r$r��r�)z load balancerrZZ netscalerZhaproxyc3r�r�r#r�r�r#r$r��r�)z access pointZapZwapZwifiZwireless) �lower�anyrHrLrMrNrOrPrQ�r�r#r�r$�detect_device_type�sz#NetworkInspector.detect_device_typecsz|���t�fdd�dD��rtjSt�fdd�dD��r tjSt�fdd�dD��r.tjSt�fdd�d D��r<tjSt�fd d�d D��rJtjSt�fd d�d D��rXtjSt�fdd�dD��rftj St�fdd�dD��rttj St�fdd�dD��r�tj St�fdd�dD��r�tj St�fdd�dD��r�tj St�fdd�dD��r�tjSt�fdd�dD��r�tjStjS)u检测网络设备厂商c3r�r�r#r�r�r#r$r��r�z1NetworkInspector.detect_vendor.<locals>.<genexpr>)rSr�r�Zioszios-xer�znx-osc3r�r�r#r�r�r#r$r��r�)rTZvrpZ huaweicloudc3r�r�r#r�r�r#r$r�r�)rUZcomwarec3r�r�r#r�r�r#r$r�r�)rVr�c3r�r�r#r�r�r#r$r�r�)rWZeosc3r�r�r#r�r�r#r$r�r�)rXZ fortigateZfortiosc3r�r�r#r�r�r#r$r�r�)r�zpan-osc3r�r�r#r�r�r#r$r� r�)rYZgaiac3r�r�r#r�r�r#r$r� r�)rZzbig-ipc3r�r�r#r�r�r#r$r�r�)r[u锐捷c3r�r�r#r�r�r#r$r�r�)r\Zforce10Z powerconnectc3r�r�r#r�r�r#r$r�r�)r]Zprocurve�arubac3r�r�r#r�r�r#r$r�r�)r^)r�r�rRr_r`rarbrcrdrerfrgrhrirjrkrQr�r#r�r$� detect_vendor�s8zNetworkInspector.detect_vendorr&c CsPddddddd�}t�d|tj�}|r|�d�|d<gd�}|D]}t�||tj�}|r5|�d�|d<nq gd�}|D]!}t�||tj�}|r]|�d �d urT|�d�n|�d �|d <nq<gd �}|D]}t�||tj�} | ry| �d�|d <nqdgd�} | D]}t�||tj�} | r�| �d���|d<nq�t�|�|d<t�|�|d<|S)u解析网络设备基本信息r)r'r(r)r*r+r,zhostname[:\s]+([^\s\n]+)�r')zmodel[:\s]+([^\s\n]+)zmodel number[:\s]+([^\s\n]+)z&cisco (catalyst \d+|nexus \d+|asr \d+)zjuniper (srx\d+|ex\d+|mx\d+)zpalo alto (pa-\d+)zfortinet (fortigate-\d+)r))z)software[:\s]+(version[:\s]+)?([^\s\n,]+)zversion[:\s]+([^\s\n,]+)zios version[:\s]+([^\s\n,]+)zjunos[:\s]+([^\s\n,]+)zfortios[:\s]+([^\s\n,]+)�Nr*)z#serial[:\s]+number[:\s]+([^\s\n,]+)zserial[:\s]+([^\s\n,]+)zsn[:\s]+([^\s\n,]+)r+)zuptime[:\s]+is[:\s]+(.+?)[\n\r]zuptime[:\s]+(.+?)[\n\r]z)system[:\s]+up[:\s]+time[:\s]+(.+?)[\n\r]r,r(rm)�re�search� IGNORECASE�group�stripr�r�r�) r�� device_infoZhostname_matchZmodel_patterns�patternZ model_matchZ os_patternsZos_matchZ sn_patterns�sn_matchZuptime_patternsZ uptime_matchr#r#r$�parse_device_infosR�  �&���z"NetworkInspector.parse_device_info�List[SwitchPort]c Cs�g}t�d|�}|D]>}|d|d|d|d|dt|�dkr%|dnddd �}t�t�|d��d �|�}|rC|�d���|d <|�|�q |s�|���d �}d}|D]�}t� d |�} | r�| �d�}| �d�} || dddddd �}d|� �vr�t�d|tj �} | r�| �d�� �|d<d|� �vr�t�d|tj �} | r�| �d�|d<t�d|tj �} | r�| �d�|d<|�|�qV|r�d |� �vr�t�d|tj �}|r�|r�|D]}|d|kr�|�d���|d <nq�qV|S)u解析交换机端口信息z�([A-Za-z0-9\/\.-]+)\s+(up|down|notconnect|disabled)\s+([0-9]+|trunk|routed|)\s+(full|half|auto)\s+([0-9]+[GMK]?|auto)\s+([A-Za-z0-9\-\/\.]+)?rr�r���r�r)r1rr2r3r4r5r6z\s+.*?description\s+([^\n]+)r6� z!^([A-Za-z0-9\/\.-]+) is (up|down)r3z(full|half|auto)[ -]duplexr4zspeed (\d+[GMK]?b?|auto)zvlan[:\s]+(\d+|trunk)r2zdescription[:\s]+(.+)r1) r��findall�lenr��escaper�r��append�split�matchr�r�)r�rGZ port_blocks�blockrBZ desc_match�linesZcurrent_interface�line� intf_matchrZ duplex_matchZ speed_matchZ vlan_match�pr#r#r$�parse_switch_portsksj �     �    ��z#NetworkInspector.parse_switch_ports� List[Route]c Cs g}t�d|�}|D]}|�|dd|d|d|d|dd��q |s�|���d �}|D]T}|��r<d |vs<d |vr=q.|��}t|�dkr�|dt|�dkrT|d ndt|�dkr_|dn|d |d ddd�}|D]}|��dvr||��|d<nql|�|�q.|S)u解析路由表信息zi([0-9\.]+/[0-9]+|[0-9\.]+)\s+([0-9\.]+|directly)\s+([0-9\.]+)\s+([A-Za-z0-9\/\.-]+)\s+([0-9]+)\s+([A-Z]+)rrr�r�r�r�)r9r:r;r1r<r=r�Z DestinationZGatewayr������)ZOSPFZRIPZBGPZSTATICZ CONNECTEDZLOCALr=)r�r�r�r�r�r��upper)r��routesZ cisco_routes�router�r��parts�partr#r#r$� parse_routes�sB  �  �  � �zNetworkInspector.parse_routes� List[ACLRule]c CsNg}|���d�}d}d}|D]�}t�d|tj�}|r#|�d�}d}q|r�t�d|�r�|d7}t�d|tj�}|r>|�d �nd }t�d |tj�} | rO| �d �nd } t�d|tj�} | r`| �d �nd } | rqt| ���d krq| �d�nd } t�d|tj�}|r�|�d �nd }t�d|tj�}|r�|�d �nd}|� t |�|| | | ||d��q|S)u解析ACL规则信息r�rrz*(ip )?access-list (standard|extended) (.+)r�z^\s*(\d+|permit|deny)� z (permit|deny)r�rz(permit|deny)\s+(\w+)r�r�zj(permit|deny)\s+\w+\s+([0-9\.]+|any|host [0-9\.]+)(?:\s+(?:[0-9\.]+))?(?:\s+([0-9\.]+|any|host [0-9\.]+))?zeq (\d+|www|ftp|ssh|telnet)z remark (.+))r?r@r=rAr9rBr6) r�r�r�r�r�r�r�r��groupsr�r)r��rulesr�Z current_aclr?r�Z acl_matchZ action_matchr@Zprotocol_matchr=Z src_dst_matchrAr9� port_matchrBZ remark_matchr6r#r#r$�parse_acl_rules�sD "�� z NetworkInspector.parse_acl_rules� List[VLAN]c CsFg}t�d|�}|D]2}|d|d��|dgd�}t|�dkr'|d��nd}|r7dd �|�d �D�|d <|�|�q |s�|���d �}|D]X}|��rVd |vrWd|vrWqH|��}t|�dkr�|d��r�|d|dt|�dkrw|dndgd�}t|�dkr�d�|dd��nd}|r�dd �|�d �D�|d <|�|�qH|S)u解析VLAN信息z;(\d+)\s+([^\s].*?)\s+(active|inactive|suspended)\s+([^\n]*)rr�r�)rDrErrGr�rcS�g|]}|���qSr#�r��r�r�r#r#r$� <listcomp>6�z0NetworkInspector.parse_vlans.<locals>.<listcomp>�,rGr�rC�Namer� NcSr�r#r�r�r#r#r$r�Or�)r�r�r�r�r�r��isdigit�join) r��vlansZ vlan_blocksr�r2Z ports_strr�r�r�r#r#r$� parse_vlans"s<  � �" �zNetworkInspector.parse_vlans�List[OpticalModule]c s�g}d}t�|�d�|�}d}t�|�d�|�}d}t�||tj�}t|�D]�\}} t�d| �} t�d| �} t�d| �} t�d| �} t�d | tj�}t�d | tj�}t�d | tj�}t�d | tj�}t�d | tj�}| �r| rt| �d�nd|��| r| �d�nd| r�| �d�nd| r�| �d�ndd|r�|�d�dnd|r�|�d�dnd|r�|�d�dnd|r�|�d�dnd|r�|�d�dnddd� }|r�|r�z(t|�d��}t|�d��}|d ks�|d!kr�d"|d#<|d!ks�|d$kr�d%|d#<Wn ty�Ynw|� |�q&|D]�}|�d��|�d�}|�d�}|�d�}|�d&�} t�d'| tj�} t�d(| tj�} t�d)| tj�} t�d*| tj�}t�d+| tj�}�| �rS| �d�� �nd| �r^| �d�� �nd| �ri| �d�� �nd|�rt|�d,�� �nd|�r|�d�� �ndd|�r�|� �nd|�r�|� �nd|�r�|� �nddd� }d-|v�r�d.|v�r�z2t|d-� �d&�}t|d.� �d&�}|d k�s�|d!k�r�d"|d#<|d!k�s�|d$k�r�d%|d#<Wn tt f�y�Ynwt �fd/d0�|D���s�|� |��q|S)1u解析光模块信息z\(?P<port>[\w\/]+)\s+(?P<type>[\w\-\/]+)\s+(?P<serial>[\w\-\/]+)\s+(?P<vendor>[\w\-\/\.]+)\s+z[\s\S]+?(?=\n\n|\Z)zE(?P<port>[\w\/]+):\s+(?P<vendor>[\w\-\/\.]+)\s+(?P<type>[\w\-\/]+)\s+z�(interface|port)\s+(?P<port>[\w\/]+)[\s\S]+?temperature\s*:\s*(?P<temp>[^\n]+)[\s\S]+?tx\s*power\s*:\s*(?P<tx>[^\n]+)[\s\S]+?rx\s*power\s*:\s*(?P<rx>[^\n]+)z(?P<port>[\w\/]+)z(?P<type>[\w\-\/]+)z(?P<serial>[\w\-\/]+)z(?P<vendor>[\w\-\/\.]+)z-wavelength\s*:\s*(?P<wavelength>[\d\.]+)\s*nmz(distance\s*:\s*(?P<distance>[\d\.]+)\s*mz/temperature\s*:\s*(?P<temp>[\d\.\-]+)\s*celsiusz(tx\s*power\s*:\s*(?P<tx>[\d\.\-]+)\s*dbmz(rx\s*power\s*:\s*(?P<rx>[\d\.\-]+)\s*dbmrBzUnknown-r5�Unknown�serialrrmroz nmrpz m�tempu °CZtxz dBm�rxZNormal) rBr5r+rmrnrorprqrrrsri����i�����Warningri�����Alarmrzvendor\s*:\s*(?P<vendor>[^\n]+)ztype\s*:\s*(?P<type>[^\n]+)zserial\s*:\s*(?P<serial>[^\n]+)z$part\s*number\s*:\s*(?P<part>[^\n]+)z'wavelength\s*:\s*(?P<wavelength>[^\n]+)r�rrrsc3s�|] }|d�kVqdS)rBNr#�r��m�rBr#r$r��s�z9NetworkInspector.parse_optical_modules.<locals>.<genexpr>)r�r��finditerr�� enumerater�r��float� ValueErrorr�r�r�� IndexErrorr�)r��modulesZ cisco_patternZcisco_sectionsZhuawei_patternZhuawei_sectionsZgeneral_patternZgeneral_matches�i�sectionr�Z type_matchr�Z vendor_matchZwavelength_matchZdistance_match� temp_matchZtx_matchZrx_match�modulerrrsr�r�Zpn_matchZtx_valueZrx_valuer#r�r$�parse_optical_modulesUs�    �� � �     ��� �z&NetworkInspector.parse_optical_modulesN)r�rr�r)r�rr�r&)r�rr�r�)r�rr�r�)r�rr�r�)r�rr�r�)r�rr�r�) rrr r!� staticmethodr�r�r�r�r�r�r�rr#r#r#r$r��s$  " Q M 0 7 2r�c@sBeZdZUdZded<ded<ded<ded<ded<ded <d S) �DevicePerformanceu设备性能数据结构r� cpu_usage� memory_usagerqzList[Dict[str, str]]�interface_traffic� buffer_usage� process_infoNr-r#r#r#r$r�r.rrr~rr'rr�r�rBr�r�r�rc Cs�t�}z�t|||||���}ddddd�}i}|��D]X\} } z,|�| �\} } } | ���d���}| ���d���}|r@||| <n |rId|��|| <Wqtyr}zt� d| �d t |����d t |���|| <WYd }~qd }~wwd � |� ��}t �|�}d |_d|i|_||_|�dd�}|�dd�}d|�d|��|_Wd �n 1s�wYW|��SW|��Sty�}zd|_dt |���|_t�dt |����WYd }~|��Sd }~ww)u'识别网络设备类型和基本信息� show version�show inventoryz show systemr')�versionZ inventory�systemr'�utf-8�Error: �命令 '�' 执行失败: �执行失败: Nr��successr�r(rr)u 未知型号u 识别到u设备,型号: ru识别网络设备失败: )rr}�itemsr��read�decoder�r�r��warningrr�r�r�r�rrr�getrrr)r'r�r�rBr��result�ssh�commands�outputs�key�cmd�stdin�stdout�stderrr�rr��combined_outputr�r(r)r#r#r$ru�sV � ���    �,�,���ru�include_interfacesrFc s�t�}�z't|||||��� }dddd�}i} |��D]X\} } z,|�| �\} } }| ���d���}|���d���}|rA|| | <n |rJd|��| | <Wqtys}zt� d| �dt |����d t |���| | <WYd }~qd }~ww�r��D]B}d |��} z|�| �\} } }| ���d���}|r�|| d |��<Wqxty�}zt� d| �dt |����WYd }~qxd }~wwd � | � ��}t �|�}�r҇fdd�|D�}tdd�|D��}tdd�|D��}tdd�|D��}d|_|t|�|||d�d�|_| |_dt|��d|�d|�d|�d� |_Wd �n1�swYW|��SW|��St�yV}zd|_dt |���|_t�dt |����WYd }~|��Sd }~ww)u检查交换机端口状态�show interfaceszshow interfaces statuszshow interfaces description)� interfacesZinterfaces_statusZinterfaces_descriptionrrrrrNzshow interface Z interface_r�cs&g|]�t�fdd��D��r��qS)c3s$�|] }|���d��vVqdS)r1N�r�)r�Zintf�r�r#r$r�Bs�"z0check_switch_ports.<locals>.<listcomp>.<genexpr>)r�)r��r'r+r$r�Bs&z&check_switch_ports.<locals>.<listcomp>cS� g|] }|d��dkr|�qS)r�upr*r�r#r#r$r�E� cSs0g|]}|d��dks|d��dkr|�qS)r�downZ notconnectr*r�r#r#r$r�Fs0cSr-)r�disabledr*r�r#r#r$r�Gr/r)�totalr.r0r1)rG� statisticsu 共检查 u 个端口,u 个UP,u 个DOWN,u 个已禁用ru检查交换机端口失败: )rr}rr�rrr�r�r�rrr�r�r�r�r�rrrrrr)r'r�r�rBr'r�rrrr r!r"r#r$r%r�rr�r1r&rGZup_portsZ down_portsZdisabled_portsr#r,r$rv s� � ��� �&�� �� & �E�E���rv�all� route_typec snt�}�zt|||||���}ddd�}���dkr'd�����} | |d���<i} |��D]X\} } z,|�| �\} }}|���d���}|���d���}|rS|| | <n |r\d|��| | <Wq-ty�}zt � d | �d t |����d t |���| | <WYd }~q-d }~wwd � | � ��}t�|�}���dkr��fdd�|D�}i}|D]}|dr�|d��nd}|�|d�d||<q�d|_|t|�|d�d�|_| |_g}|��D]\}}|�|�d|���q�dt|��dd� |��d�|_Wd �n 1s�wYW|��SW|��St�y6}zd|_dt |���|_t �dt |����WYd }~|��Sd }~ww)u检查路由器路由表z show ip routezshow ip route summary)Zip_routeZ route_summaryr4zshow ip route Zroute_rrrrrNr�cs$g|]}|d�����kr|�qS)r=r*�r��r�r5r#r$r��s$z'check_router_routes.<locals>.<listcomp>r=rrr�r)r2Z by_protocol)r�r3r��共 u 条路由 (z, �)ru检查路由表失败: )rr}r�rr�rrr�r�r�rrr�r�r�r�rrr�rrr�rrr)r'r�r�rBr5r�rrrZ route_cmdr r!r"r#r$r%r�rr�r&r�Z route_countsr�r=� summary_parts�countr#r8r$rw^sn �  ���  �� �A�A���rw�/tmp/network_config_backup�<� backup_dirc Cs�t�}�zKt|||||���/}d|��}|�|�\} } } | ���d���} | r/t�d| ���d} |�| �\} } } | ���d���}dddd�}g}|��D]�\}}z�|�|�\} } } | ���d���}| ���d���} | r~|s~t�d |�d | ���WqN|�d |�d |�d |�d �}d|�d|�d�}|�|�\} } } | ���d���} | r�t�d|�d| ���nCd|�d�}|�|�\} } } | ���d���}|dkr�|� |d|d��d|�d�}|�|�\} } } | ���d���}|r�||dd<WqNt �y}zt�d|�dt |����WYd}~qNd}~ww|�r0d|_ d|i|_ d t|��d!|��|_nd"|_ d#|_Wd�n1�sAwYW|��SW|��St �yz}zd"|_ d$t |���|_t�d$t |����WYd}~|��Sd}~ww)%u备份网络设备配置z mkdir -p ru#创建备份目录时出现警告: zdate +%Y%m%d_%H%M%Szshow running-configzshow startup-configr)Zrunning_configZstartup_configrru' 执行出现错误: �/�_z.txtzcat > z << 'EOT' z EOTu保存配置到 u 时出现错误: z[ -f z% ] && echo 'success' || echo 'failed'ru获取大小失败)�file�sizeZ config_typezdu -h z | cut -f1r�rCu备份 u 配置失败: N� backup_filesu 共备份 u 个配置文件到 ru未能备份任何配置文件u 备份网络设备配置失败: )rr}r�rrr�r�rrr�r�rrrr�rrr)r'r�r�rBr?r�rrZ mkdir_commandr#r$r%rZ date_commandZ date_stringrrDr!r"r�Z backup_fileZ write_commandZ check_commandZ check_resultZ size_commandZ size_outputr�r#r#r$rx�s�  � �  �&�� � �L�L���rx�acl_namec Cs*t�}z�t|||||���}ddd�}|rd|��|d|��<i} |��D]X\} } z,|�| �\} } }| ���d���}|���d���}|rJ|| | <n |rSd|��| | <Wq$ty|}zt� d| �d t |����d t |���| | <WYd }~q$d }~wwd � | � ��}t �|�}td d�|D��}tdd�|D��}d|_|t|�||d�d�|_| |_|r�d|�dt|��d|�d|�d� |_ndt|��d|�d|�d�|_Wd �n 1s�wYW|��SW|��St�y}zd|_dt |���|_t�dt |����WYd }~|��Sd }~ww)u检查安全ACL配置zshow access-listszshow ip access-lists)Zacl_allZ ip_accesszshow access-list Zacl_rrrrrNr�cSr-)r@�permitr*r6r#r#r$r�7r/z$check_acl_config.<locals>.<listcomp>cSr-)r@�denyr*r6r#r#r$r�8r/r)r2rFrG)� acl_rulesr3zACL 'u ' 包含 u 条规则(u 条允许,u 条拒绝)r9u 条ACL规则(ru检查ACL配置失败: )rr}rr�rrr�r�r�rrr�r�r�r�r�rrrrrr)r'r�r�rBrEr�rrrr r!r"r#r$r%r�rr�r&rHZ permit_rulesZ deny_rulesr#r#r$ry sf � ��� ��&��:�:���ryrDc s`t�}�zt|||||���}ddd�}�r+d���|d���<d��d�|d��d�<i} |��D]X\} } z,|�| �\} } }| ���d���}|���d���}|rW|| | <n |r`d |��| | <Wq1ty�}zt� d | �d t |����d t |���| | <WYd }~q1d }~wwd� | � ��}t �|�}�r��fdd�|D�}tdd�|D��}d|_|t|�|d�d�|_| |_�r�|r�t|dd�}d��d|dd�d|�d�|_nd���|_n dt|��d|�d�|_Wd �n 1s�wYW|��SW|��St�y/}zd |_d!t |���|_t�d!t |����WYd }~|��Sd }~ww)"u检查交换机VLAN配置zshow vlan briefzshow vlan summary)Z vlan_briefZ vlan_summaryz show vlan id Zvlan_z portsZ_portsrrrrrNr�csg|] }|d�kr|�qS�rDr#�r��vrIr#r$r���z!inspect_vlans.<locals>.<listcomp>cSr-)r�activer*rJr#r#r$r��r/r)r2rM)r�r3rrGzVLAN u 状态为 ru ,包含 u 个端口u未找到VLAN r9u 个VLAN,u 个活跃ru检查VLAN配置失败: )rr}rr�rrr�r�r�rrr�r�r�r�r�rrrrrr)r'r�r�rBrDr�rrrr r!r"r#r$r%r�rr�r&r�Z active_vlansZ ports_countr#rIr$rzRsn � ��� ��$��A�A���rzr1cCs�t�}�z/t|||||���}|�d�\}} } | ��jddd�} t�| �} tjgd�tj gd�tj gd�tj dd gtj d d gtj d d gi} | �| gd��}|r�g}|D]6}d|vr�d| vsad| vrl|�|�d|���qSd| vstd| vr|�|�d|���qS|�|�d|���qS|r�|n|}d}|D]N}z-|�|�\}} } | ��jddd�}|d|�d|�d�7}d|��vs�d|��vr�Wn!Wq�ty�}zt�d|�dt|����WYd}~q�d}~wwt�|�}d|_|| t|�d�|_d |i|_d!d"�|D�}d#d"�|D�}d$t|��d%t|��d&t|��d'�|_Wd�n1�s%wYW|��SW|��St�ya}z!d(|_d)t|���|_t�d*|�d+t|����WYd}~|��Sd}~ww),uw检查网络设备光模块状态和信息 Args: hostname: 设备主机名或IP地址 username: SSH用户名 password: SSH密码 port: SSH端口 interface: 指定要检查的接口,为空则检查所有接口 timeout: SSH连接超时时间(秒) Returns: 包含光模块信息的结果字典 rr�ignore��errors)�"show interfaces transceiver detail�show interfaces transceiverr)�display transceiver verbose�display transceiver interfacezdisplay elabel)rSrTzdisplay device manuinfo�"show interfaces diagnostics opticszshow chassis hardwarerQrrRzshow optical-module summary)rQrSrUZ transceiverrSrWz interface rTrUr�rz --- Command: z --- r�Zoptical� Command '� ' failed: Nr)�optical_modulesrmZ total_modulesZcommand_outputcS�g|] }|ddkr|�qS)rr�r#r�r#r#r$r�rLz)check_optical_modules.<locals>.<listcomp>cSrY)rr�r#r�r#r#r$r�rLu 共检测到u个光模块,u个警告状态,u个告警状态ru检查光模块失败: z#Failed to check optical modules on r�)rr}r�rrr�r�rRr_r`rarbrcrhrr�r�r�r�rrrrr�rrrrr)r'r�r�rBr1r�rrr#r$r%�version_outputrmZoptical_commandsrZinterface_commandsr"r&Z cmd_outputr�rXZwarning_modulesZ alarm_modulesr#r#r$r{�s�    ����� �&�� � ( �]�]�$��r{r)c8Cs�t�}�zBt|||||���&}|�d�\}} } | ��jddd�} t�| �} tjddddd d d �tj d d ddddd �tj d dddddd �tj ddddddd �tj dddddd d �i} | � | d!d"d#d$d d%d ��}i}i}|��D]u\}}zI|d&kr�|r�g}|D]!}|�d&d'|���}|�|�\}} } | ��jddd�}|�|�q}d(�|�||<n|�|�\}} } | ��jddd�||<Wqnty�}zt�d)|�d*t|����d+t|���||<WYd,}~qnd,}~wwd-}d.|v�r4|d.}d/|��v�rt�d0|�}|�r|�d1��d2�}n,d3|��v�r#t�d4|tj�}|�r"|�d1��d2�}nt�d5|�}|�r4|�d1��d2�}d-}d6|v�r�|d6}d7|��v�rud8|��v�rut�d9|�}|�rtt|�d1��}t|�d:��}|d;k�rtt||d<��d2�}n,d=|��v�r�t�d>|tj�}|�r�|�d1��d2�}nt�d5|�}|�r�|�d1��d2�}d-} d?|v�r�|d?}!t�d@|!tj�}"|"�r�|"�d1��dA|"�d:�d;����} g}#d&|v�rP|d&}$|$��D]x}%t�dB|%tj��s�q�d-}&|$��D](}'|%|'v�r�q�|'���rt�dB|'tj��st�dC|'�}(|(�r|(�d1�}&n�q�t�dD|%tj�})t�dE|%tj�}*|&|)�r4|)�d1��dF|)�d:���nd-|*�rE|*�d1��dF|*�d:���nd-dG�}+|#�|+��q�d-},dH|v�r�|dH}-t�dI|-tj�}.|.�ro|.�d1��d2�},n4t�dJ|-tj�}/t�dK|-tj�}0|/�r�|0�r�t|/�d1��}t|0�d1��}|d;k�r�t||d<��d2�},g}1dL|v�r�|dL}2|2��}3|3D]B}%dM|%v�r�dN|%v�rq�t�dO|%�}4|4�r�|4�d1��d2�|4�d:��d2�|4�dP��d2�|4�dQ�dR�}5|1�|5�t |1�dSk�r�n�q�||| |#|,|1dT�}dU|_!||_"||_#dV|��dW|��dX| ��g}6|#�r't |#�}7|6�dY|7�dZ��d[�|6�|_$Wd,�n1�s8wYW|�&�SW|�&�St�yt}z!d\|_!d]t|���|_%t�%d^|�d_t|����WYd,}~|�&�Sd,}~ww)`u�检查网络设备性能,包括CPU、内存、温度、接口流量等 Args: hostname: 设备主机名或IP地址 username: SSH用户名 password: SSH密码 port: SSH端口 timeout: SSH连接超时时间(秒) interfaces: 指定要检查的接口,为空则检查主要接口 Returns: 包含设备性能信息的结果字典 rrrNrOzshow processes cpu sortedzshow processes memory sortedzshow environment temperaturezshow interfaces | include ratez show buffersz8show processes cpu sorted 5sec | include CPU|[0-9][0-9]%)�cpu�memoryrqr)�buffers� processeszdisplay cpu-usagezdisplay memory-usagezdisplay environmentz,display interface | include rate|utilizationzdisplay buffer-usagezdisplay cpu-usage verbosezdisplay memoryzdisplay bufferingzdisplay process cpuzshow chassis routing-enginezshow system memoryzshow chassis environmentz0show interfaces extensive | match "rate|traffic"zshow system bufferszshow system processes extensivezshow processes topzshow system resourcesz#show system environment temperaturezshow interfaces counters rateszshow hardware capacityzshow processes top oncezshow processes cpuzshow processes memoryzshow environmentr(zshow processesr)z interface r�rVrWzFailed to execute: Nr�r[z five secondszfive seconds: (\d+)%r��%Z utilizationzutilization\s*:\s*(\d+)%z(\d+)%r\� processor�usedz+Processor Pool Total:\s*(\d+) Used:\s*(\d+)r�r�dzmemory utilizationzMemory utilization\s*:\s*(\d+)%rqz%(\d+(?:\.\d+)?) ?(C|F|degree|celsius)�°z(input|output|rx|tx) ratez^([A-Za-z0-9\/\.-]+)z input rate (\d+) ([bkm]bits/sec)z!output rate (\d+) ([bkm]bits/sec)r�)r1Z input_rateZ output_rater]zBuffer utilization\s*:\s*(\d+)%ztotal\s*:\s*(\d+)zused\s*:\s*(\d+)r^ZCPU�Processz>(\d+(?:\.\d+)?)%\s+(\d+(?:\.\d+)?)%\s+(\d+(?:\.\d+)?)%\s+(\S+)r�r�)Zcpu_5secZcpu_1minZcpu_5minZ process_namer�)r r rqr r r ruCPU使用率: u内存使用率: u设备温度: u 已检查u个接口流量u,ru检查设备性能失败: z&Failed to check device performance on r�)'rr}r�rrr�r�rRr_r`rarbrcrr�replacer�r�r�r�rrr�r�r�r�r�r�r�� splitlinesr�r�r�rrrrrr)8r'r�r�rBr�r)rrr#r$r%rZrmZperformance_commandsZcmd_dictr Zperformance_datar!r"Zinterface_outputsr1Z interface_cmdZinterface_outputr�r Z cpu_outputZ cpu_matchr Z mem_outputZ mem_matchr2rarqZ temp_outputrr Z intf_outputr�Z intf_name� prev_liner�Z input_matchZ output_matchZ traffic_infor Z buffer_outputZ buffer_matchZ total_matchZ used_matchr Zprocess_outputZ process_linesZ process_match�processr;Z intf_countr#r#r$r|s� ������,�   ���  ��    ��  "      �""�     � �� �� �s��s�$��r|�__main__�stdio)� transport)rr~r) r'rr�rr�rrBr�r�r�r�r)r'rr�rr�rrBr�r'rFr�r�r�r)rr~r4r)r'rr�rr�rrBr�r5rr�r�r�r)rr~r=r>)r'rr�rr�rrBr�r?rr�r�r�r)rr~rr)r'rr�rr�rrBr�rErr�r�r�r)r'rr�rr�rrBr�rDrr�r�r�r)r'rr�rr�rrBr�r1rr�r�r�r)r'rr�rr�rrBr�r�r�r)rFr�r)6� __future__r�typingrrrrrrr r r r�r��logging�json�pydanticr r Zmcp.server.fastmcpr�enumr�datetime� basicConfig�INFO� getLoggerr�r�mcprr&r0r8r>rCrrHrRrlrtr}r�r�toolrurvrwrxryrzr{r|�runr#r#r#r$�<module>s� ,         Rg �9�S�O�Z�H�O�w� �

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Heht571/ops-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server