Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
network_scanner.cpython-312.pyc53.2 kB
� �H1hi����ddlmZmZmZmZmZmZmZddlm Z m Z ddl m Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlZddlZGd�de j8�Ze j<e j>de j@ejB� �g� �e jDjFD]-Z$e%e$e j@�s�e$jMed���/e jNd �Z(dd l)m*Z*m+Z+m,Z,m-Z-m.Z.Gd �de �Z/Gd�de �Z0e Gd�d��Z1e Gd�d��Z2Gd�d�Z3de*de3fd�Z4y)�)�Dict�List�Optional�Any�Set�Tuple�Union)� dataclass�field)�EnumN)�datetime� timedeltac�*��eZdZd�fd� Z�fd�Z�xZS)� JsonFormatterc�(��t�|�|||�y�N)�super�__init__)�self�fmt�datefmt�style� __class__s ��!F:\NetBrainMCP\network_scanner.pyrzJsonFormatter.__init__s��� ����g�u�-�c�f��t�|�|�}|jdd��jd�S)N�utf-8�replace)�errors)r�format�encode�decode)r�record� log_recordrs �rr zJsonFormatter.formats2����W�^�F�+� �� � ��� �;�B�B�7�K�Kr)NN�%)�__name__� __module__� __qualname__rr � __classcell__)rs@rrrs���.�L�Lrrz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�stream)�levelr �handlers�network_scanner)� DeviceManager� NetworkDevice� DeviceVendor� DeviceType� DeviceStatusc�$�eZdZdZdZdZdZdZdZy)� ScanMethodu扫描方法枚举�ping� tcp_connect�snmp�http� ssh_bannerN) r&r'r(�__doc__�PING� TCP_CONNECT�SNMP�HTTP� SSH_BANNER�rrr4r4-s��� �D��K� �D� �D��Jrr4c�$�eZdZdZdZdZdZdZdZy)�DeviceDiscoveryMethodu设备发现方法枚举� ping_sweep� arp_table� snmp_walk� port_scan�cdp_lldpN) r&r'r(r:� PING_SWEEP� ARP_TABLE� SNMP_WALK� PORT_SCAN�CDP_LLDPr@rrrBrB5s��"��J��I��I��I��HrrBc�x�eZdZUdZeed<dZeed<dZe e ed<dZ e eed<dZ e eed<dZ e eed <dZe eed <ee� �Zeeed <ee� �Zeeefed <ee� �Zeeefed<dZe eed<eej6� �Zeed<ee� �Zee ed<deeeffd�Z!y)� ScanResultu单个IP扫描结果� ip_addressF�is_aliveN� response_time�hostname� mac_address�vendor� device_type��default_factory� open_ports�services� snmp_info�os_info� discovered_at�discovery_method�returnc�|�|j|j|j|j|j|j |j |j|j|j|j|jj�|jD�cgc]}|j��c}d� Scc}w)N� rOrPrQrRrSrTrUrXrYrZr[r\r])rOrPrQrRrSrTrUrXrYrZr[r\� isoformatr]�value)r�methods r�to_dictzScanResult.to_dictNs����/�/�� � �!�/�/�� � ��+�+��k�k��+�+��/�/�� � �����|�|�!�/�/�9�9�;�<@�<Q�<Q� R�<Q�&����<Q� R� � ��!Ss�!B9)"r&r'r(r:�str�__annotations__rP�boolrQr�floatrRrSrTrUr �listrXr�int�dictrYrrZrr[r �nowr\�setr]rrBrdr@rrrNrN=s�����O��H�d��%)�M�8�E�?�)�"�H�h�s�m�"�!%�K��#��%� �F�H�S�M� �!%�K��#��%�!�$�7�J��S� �7�$�T�:�H�d�3��8�n�:� %�d� ;�I�t�C��H�~�;�!�G�X�c�]�!�#�H�L�L�A�M�8�A�38��3M��c�/�0�M� ��c�3�h�� rrNc��eZdZUdZdZeed<dZeed<dZ e ed<dZ e ed<dZ e ed <dZ e ed <dZe ed <ed �� �Zeeed<ed�� �Zeeed<y)�ScanConfigurationu 扫描配置�@�timeout�2�max_concurrentT� ping_enabled�port_scan_enabled� snmp_enabled�http_check_enabled�ssh_banner_enabledc� �gd�S)N)���P����� r@r@rr�<lambda>zScanConfiguration.<lambda>is��<^rrV� common_portsc� �ddgS)N�public�privater@r@rrr�zScanConfiguration.<lambda>js ���9�@Ur�snmp_communitiesN)r&r'r(r:rqrhrfrsrjrtrgrurvrwrxr r�rr�rer@rrroro_sw����G�U���N�C���L�$��"��t�"��L�$��#���#�#���#�#�4^�_�L�$�s�)�_�"'�8U�"V��d�3�i�Vrroc �r�eZdZdZdefd�Zd�Zd�Zd!dede de e e e ffd �Z d!ded ede de fd �Zd!ded eede deefd �Zdede efd�Zdede efd�Zdedefd�Zdedefd�Zd"dededede de ef d�Zdededefd�Zd#dede edeefd�Zd$deede deefd�Zdeee ffd�Z!d �Z"y)%�NetworkScanneru网络扫描器�device_managerc ��||_d|_tjj |jd�|_tj |jd��i|_|j�idd�dd�dd�d d�d d�d d�d d�d d�dd�dd�dd�dd�dd�dd�dd�dd�dd�idd�dd�dd�dd�dd�dd�dd�dd�dd�d d�d!d�d"d�d#d�d$d�d%d�d&d�d'd��id(d�d)d�d*d�d+d�d,d�d-d�d.d�d/d�d0d�d1d�d2d�d3d�d4d�d5d�d6d�d7d�d8d��id9d�d:d�d;d�d<d�d=d�d>d�d?d�d@d�dAd�dBd�dCd�dDd�dEd�dFd�dGd�dHd�dId��idJd�dKd�dLd�dMd�dNd�dOd�dPd�dQd�dRd�dSd�dTd�dUd�dVd�dWd�dXd�dYd�dZd��id[d�d\d�d]d�d^d�d_d�d`d�dad�dbd�dcd�ddd�ded�dfd�dgd�dhd�did�djd�dkd��idld�dmd�dnd�dod�dpd�dqd�drd�dsd�dtd�dud�dvd�dwd�dxd�dyd�dzd�d{d�d|d��id}d�d~d�dd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��id�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d��dd��dd��dd��dd��dd��i�dd��dd��dd��dd��d d��d d��d d��d d��d d��dd��dd��dd��dd��dd��dd��dd��dd��i�dd��dd��dd��dd��dd��dd��dd��dd��dd��dd��d d��d!d��d"d��d#d��d$d��d%d��d&d��i�d'd��d(d��d)d��d*d��d+d��d,d��d-d��d.d��d/d��d0d��d1d��d2d��d3d��d4d��d5d��d6d��d7d��i�d8d��d9d��d:d��d;d��d<d��d=d��d>d��d?d��d@d��dAd��dBd��dCd��dDd��dEd��dFd��dGd��dHd��i�dId��dJd��dKd��dLd��dMd��dNd��dOd��dPd��dQd��dRd��dSd��dTd��dUd��dVd��dWd��dXd��dYd��i�dZd��d[d��d\d��d]d��d^d��d_d��d`d��dad��dbd��dcd��ddd��ded��dfd��dgd��dhd��did��djd��i�dkd��dld��dmd��dnd��dod��dpd��dqd��drd��dsd��dtd��dud��dvd��dwd��dxd��dyd��dzd��d{d��i�d|d��d}d��d~d��dd��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��i�d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��d�d��dd��dd��dd��dd��i�dd��dd��dd��dd��dd��d d��d d��d d��d d��d d��dd��dd��dd��dd��dd��dd��dd��i�dd��dd��dd��dd��dd��dd��dd��d�d��d�d��d�d��d �d��d!�d��d"�d��d#�d��d$�d��d%�d��d&�d��i�d'�d��d(�d��d)�d��d*�d��d+�d��d,�d��d-�d��d.�d��d/�d��d0�d��d��d��d1�d��d2�d��d3�d��dːd��d4�d��d5�d��i�d6�d��d7�d��d8�d��d9�d��d:�d��d;�d��d<�d��d=�d��d>�d��d?�d��d@�d��dA�d��dB�d��dC�d��dD�d��dE�d��dF�d��i�dG�d��dH�d��dI�d��d��d��dJ�d��dK�d��dL�d��dM�d��dN�d��dO�d��dP�d��dQ�d��dR�d��dS�d��dT�d��dU�d��dV�d��i�dW�dX��dY�dX��dZ�dX��d[�dX��d\�dX��d��dX��d]�dX��d^�dX��d_�dX��d`�dX��da�dX��d��dX��d&�dX��d'�dX��db�dX��dc�dX��dd�dX��i�de�dX��df�dX��dg�dX��dh�dX��di�dX��d8�dX��dj�dX��dk�dX��dl�dX��dm�dX��d@�dX��dn�dX��do�dX��dp�dX��dq�dX��dH�dX��d��dX��i�dr�dX��ds�dX��dt�dX��du�dX��dv�dX��d�dX��dw�dX��dx�dX��dy�dz��d{�dz��d|�dz��d}�dz��d~�dz��d�dz��d��dz��d��dz��d��dz��i�d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz��d��dz���dz�dz�dz�dz�dz�dz�dz�dz�dz�dz�d�� �|_ �d��d��d��d��d��d��d��d��d��|_ y(�N�datazscan_results.jsonT)�exist_okz00:00:0C�Ciscoz00:01:42z00:01:43z00:01:96z00:01:97z00:02:16z00:02:17z00:02:3Dz00:02:4Az00:02:4Bz00:02:B9z00:02:BAz00:02:FCz00:02:FDz00:03:6Bz00:03:6Cz00:03:E3z00:03:FDz00:04:27z00:04:28z00:04:4Dz00:04:6Dz00:04:9Az00:04:C0z00:04:C1z00:04:DDz00:05:00z00:05:01z00:05:31z00:05:32z00:05:5Ez00:05:73z00:05:74z00:05:9Az00:05:DCz00:05:DDz00:06:28z00:06:2Az00:06:52z00:06:53z00:06:7Cz00:06:C1z00:06:D6z00:06:D7z00:06:F6z00:07:0Dz00:07:0Ez00:07:4Fz00:07:50z00:07:84z00:07:85z00:07:B3z00:07:B4z00:07:EBz00:07:ECz00:08:20z00:08:21z00:08:30z00:08:31z00:08:7Cz00:08:7Dz00:08:A3z00:08:A4z00:08:C2z00:08:E2z00:08:E3z00:09:11z00:09:12z00:09:43z00:09:44z00:09:7Bz00:09:7Cz00:09:B6z00:09:B7z00:09:E8z00:09:E9z00:0A:41z00:0A:42z00:0A:8Az00:0A:8Bz00:0A:B7z00:0A:B8z00:0A:F3z00:0A:F4z00:0B:45z00:0B:46z00:0B:5Fz00:0B:60z00:0B:85z00:0B:BEz00:0B:BFz00:0B:FCz00:0B:FDz00:0C:30z00:0C:31z00:0C:41z00:0C:85z00:0C:86z00:0C:CEz00:0C:CFz00:0D:28z00:0D:29z00:0D:65z00:0D:66z00:0D:BCz00:0D:BDz00:0D:ECz00:0D:EDz00:0E:08z00:0E:38z00:0E:39z00:0E:83z00:0E:84z00:0E:D6z00:0E:D7z00:0F:23z00:0F:24z00:0F:34z00:0F:35z00:0F:66z00:0F:8Fz00:0F:90z00:0F:F7z00:0F:F8z00:10:07z00:10:11z00:10:29z00:10:2Fz00:10:54z00:10:79z00:10:7Bz00:10:A6z00:10:F6z00:11:20z00:11:21z00:11:5Cz00:11:5Dz00:11:92z00:11:93z00:11:BBz00:11:BCz00:12:00z00:12:01z00:12:17z00:12:43z00:12:44z00:12:7Fz00:12:80z00:12:D9z00:12:DAz00:13:19z00:13:1Az00:13:5Fz00:13:60z00:13:7Fz00:13:80z00:13:C3z00:13:C4z00:14:1Bz00:14:1Cz00:14:69z00:14:6Az00:14:A8z00:14:A9z00:14:BFz00:14:F1z00:14:F2z00:15:2Bz00:15:2Cz00:15:62z00:15:63z00:15:C6z00:15:C7z00:15:F9z00:15:FAz00:16:46z00:16:47z00:16:9Cz00:16:9Dz00:16:B6z00:16:C7z00:16:C8z00:17:0Ez00:17:0Fz00:17:33z00:17:34z00:17:59z00:17:5Az00:17:94z00:17:95z00:17:DFz00:17:E0z00:18:18z00:18:19z00:18:39z00:18:68z00:18:73z00:18:74z00:18:B9z00:18:BAz00:19:06z00:19:07z00:19:2Fz00:19:30z00:19:47z00:19:55z00:19:56z00:19:A9z00:19:AAz00:19:E7z00:19:E8z00:1A:2Fz00:1A:30z00:1A:6Cz00:1A:6Dz00:1A:A1z00:1A:A2z00:1A:E2z00:1A:E3z00:1B:0Cz00:1B:0Dz00:1B:2Az00:1B:2Bz00:1B:53z00:1B:54z00:1B:67z00:1B:8Fz00:1B:90z00:1B:D4z00:1B:D5z00:1C:0Ez00:1C:0Fz00:1C:57z00:1C:58z00:1C:B0z00:1C:B1z00:1C:F6z00:1C:F9z00:1D:45z00:1D:46z00:1D:70z00:1D:71z00:1D:A1z00:1D:A2z00:1D:E5z00:1D:E6z00:1E:13z00:1E:14z00:1E:49z00:1E:4Az00:1E:6Bz00:1E:79z00:1E:7Az00:1E:BDz00:1E:BEz00:1E:F6z00:1E:F7z00:1F:26z00:1F:27z00:1F:6Cz00:1F:6Dz00:1F:9Dz00:1F:9Ez00:1F:C9z00:1F:CAz00:20:35z00:20:36z00:20:BAz00:20:BBz00:21:1Bz00:21:1Cz00:21:29z00:21:55z00:21:56z00:21:A0z00:21:A1z00:21:BEz00:21:D7z00:21:D8z00:22:0Cz00:22:0Dz00:22:55z00:22:56z00:22:6Bz00:22:90z00:22:91z00:22:BDz00:22:BEz00:23:04z00:23:05z00:23:33z00:23:34z00:23:5Dz00:23:5Ez00:23:ABz00:23:ACz00:23:BEz00:23:EAz00:23:EBz00:24:13z00:24:14z00:24:50z00:24:51z00:24:C3z00:24:C4z00:24:F7z00:24:F9z00:25:2Ez00:25:45z00:25:46z00:25:83z00:25:84z00:25:B4z00:25:B5z00:26:0Az00:26:0Bz00:26:51z00:26:52z00:26:98z00:26:99z00:26:CAz00:26:CBz00:27:0Cz00:27:0Dz00:27:23z00:27:24z00:40:96z00:50:0Bz00:50:14z00:50:50z00:50:53z00:50:54z00:50:73z00:50:80z00:50:A2z00:50:BDz00:50:D1z00:50:E2z00:50:F0z00:60:2Fz00:60:3Ez00:60:47z00:60:5Cz00:60:70z00:60:83z00:90:21z00:90:2Bz00:90:86z00:90:92z00:90:A6z00:90:ABz00:90:B1z00:90:BFz00:90:F2z00:A0:C9z00:B0:64z00:C0:1Dz00:D0:06z00:D0:58z00:D0:79z00:D0:90z00:D0:97z00:D0:BAz00:D0:BBz00:D0:BCz00:D0:C0z00:D0:C4z00:D0:FFz00:E0:14z00:E0:1Ez00:E0:34z00:E0:4Fz00:E0:8Fz00:E0:A3z00:E0:B0z00:E0:F7z00:E0:F9z00:E0:FEz04:2C:6Az04:6C:59z04:C5:A4z04:DA:D2z04:FE:7Fz08:17:35z08:1F:F3z08:7A:4Cz08:96:ADz08:CC:68z0C:27:24z0C:68:03z0C:75:BDz0C:85:25z0C:D9:96z0C:F5:A4z10:8C:CFz10:BD:18z14:B8:6Fz14:DA:E9z14:F6:D8z18:8B:9Dz18:8B:45z18:9C:5Dz18:EF:63z1C:17:D3z1C:6A:7Az1C:DE:A7z1C:E6:C7z1C:E8:5Dz20:37:06z20:3A:07z20:4C:03z20:BB:C0z24:01:C7z24:B6:57z24:E9:B3z28:0D:FCz28:39:5Ez28:6F:7Fz28:94:0Fz2C:36:F8z2C:3E:CFz2C:54:2Dz2C:5A:0Fz30:37:A6z30:E4:DBz34:A8:4Ez34:DB:FDz38:C8:5Cz3C:CE:73z40:55:39z44:58:29z44:AD:D9z44:E0:8Ez48:F8:B3z4C:4E:35z50:06:04z50:17:FFz50:3D:E5z50:57:A8z50:87:89z54:7F:EEz54:78:1Az58:6D:8Fz58:97:1Ez58:AC:78z58:BF:EAz5C:50:15z5C:83:8Fz60:73:5Cz64:00:F1z64:16:8Dz64:A0:E7z64:D1:54z68:BD:ABz68:EF:BDz6C:20:56z6C:41:6Az6C:FA:89z70:0D:B9z70:10:5Cz70:81:05z70:CA:9Bz74:26:ACz74:A0:2Fz78:9A:18z78:BA:F9z7C:0E:CEz7C:69:F6z7C:95:F3z80:E0:1Dz84:3D:C6z84:78:ACz84:B5:17z84:B8:02z88:43:E1z88:90:8Dz88:F0:31z8C:60:4Fz8C:B6:4Fz90:E2:BAz94:D4:69z98:FC:11z9C:37:F4z9C:4E:20zA0:E0:AFzA0:F8:49zA4:0C:C3zA4:4C:11zA4:6C:2AzA4:93:4CzA8:9D:21zAC:4A:67zB0:7D:47zB4:14:89zB4:A4:E3zB8:38:61zB8:62:1FzBC:16:65zBC:67:1CzC0:62:6BzC0:67:AFzC4:14:3CzC4:64:13zC4:71:54zC8:4C:75zC8:9C:1DzCC:16:7EzCC:46:D6zCC:EF:48zD0:72:DCzD0:D0:FDzD4:8C:B5zD4:A0:2AzD8:24:BDzD8:B1:90zDC:7B:94zE0:5F:B9zE4:48:C7zE4:AA:5DzE4:C7:22zE8:65:49zE8:B7:48zEC:1D:8BzEC:44:76zEC:BD:1DzF0:25:72zF0:29:29zF0:7D:68zF4:CF:E2zF8:0B:CBzF8:4F:57zF8:66:F2zF8:C2:88zFC:99:47z00:1E:10�Huaweiz00:25:9Ez00:46:A7z00:E0:FCz10:47:80z14:5A:05z18:66:DAz1C:61:B4z20:F9:E0z28:6E:D4z2C:AB:00z34:29:8Fz34:6B:D3z34:CE:00z38:90:A5z3C:DF:A9z40:B0:34z44:31:92z48:46:FBz4C:54:99z54:89:98z5C:63:BFz60:DE:44z6C:92:BFz70:72:3Cz74:51:BAz78:11:DCz7C:A2:3Ez80:89:17z84:A9:3Ez88:CF:98z8C:BE:BEz90:2B:34z94:23:3CzA0:B4:A5zA4:5E:60zA8:4C:A6zAC:85:3DzB0:5A:DAzB4:3A:28zB8:50:01zBC:3F:8FzBC:76:70zC0:A5:DDzC4:F0:81zCC:2D:21zD0:54:2DzD4:D7:48zD8:49:2FzDC:D2:FCzE0:19:1DzE4:3E:D7zE8:4E:84zEC:23:3DzF0:92:1CzF4:28:53zF8:E7:1EzFC:48:EFz00:01:A7�H3Cz00:13:ACz00:1E:C9z00:22:A1z00:24:A1z08:00:09z0C:45:BAz18:A9:05z1C:B7:2Cz20:89:84z30:89:4Az3C:52:82z48:7B:6Bz4C:60:DEz58:69:6Cz6C:50:4Dz70:F9:6Dz78:AC:C0�80:71:1Fz84:A9:C4z94:75:2AzA0:1D:48zA8:40:25zB0:18:32zB4:99:BAzBC:54:36zD0:27:88zD4:6D:7DzE0:D9:E3zE4:AF:A1zEC:38:8FzF4:E2:C6zF8:63:3Fz00:05:85�Juniperz00:10:DBz00:12:1Ez00:17:CBz00:19:E2z00:1B:C0z00:1D:B5z00:1F:12z00:21:59z00:23:9Cz00:26:88z00:90:69z02:05:85z08:81:F4z0C:86:10z10:0E:7Ez14:4F:8Az2C:21:72z2C:6B:F5z3C:94:D5z40:A6:77z44:F4:77z5C:45:27z64:64:9Bz78:19:F7z78:FE:3D) r�z84:18:88z9C:CC:83zA8:D0:E5zB0:C6:9AzDC:38:E1zEC:3E:F7zF0:1C:2DzF4:A7:39zF4:CC:55zSSH/Network DevicezTelnet/Network DevicezHTTP/Web ManagementzSNMP/Network DevicezHTTPS/Web Management�NETCONFzHTTP Alt/Web ManagementzHTTPS Alt/Web Management)rzr{r|r}r~i>rr�) r��data_dir�os�path�join�scan_results_file�makedirs� scan_results�load_scan_results�vendor_oui_map�device_port_signatures)rr�s rrzNetworkScanner.__init__osF'��,����� �!#�����d�m�m�=P�!Q��� � � �D�M�M�D�1�46��� ��� �e  � ��e  � ��e  � ��e  � �� e  � �� e  � �� e  � ��e  � ��e  � ��e  � ��e  � ��e  � ��e  � ��e  � ��e  � ��e  � ��!e  �" ��#e  �$ ��%e  �& ��'e  �( ��)e  �* ��+e  �, ��-e  �. ��/e  �0 ��1e  �2 ��3e  �4 ��5e  �6 ��7e  �8 ��9e  �: ��;e  �< ��=e  �> ��?e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��A e  �B ��C e  �D ��E e  �F ��G e  �H ��I e  �J ��K e  �L ��M e  �N ��O e  �P ��Q e  �R ��S e  �T ��U e  �V ��W e  �X ��Y e  �Z ��[ e  �\ ��] e  �^ ��_ e  �` ��a e  �b ��c e  �d ��e e  �f ��g e  �h ��i e  �j ��k e  �l ��m e  �n ��o e  �p ��q e  �r ��s e  �t ��u e  �v ��w e  �x ��y e  �z ��{ e  �| ��} e  �~ �� e  �@ ��A e  �B ��C e  �D ��E e  �F ��G e  �H ��I e  �J ��K e  �L ��M e  �N ��O e  �P ��Q e  �R ��S e  �T ��U e  �V ��W e  �X ��Y e  �Z ��[ e  �\ ��] e  �^ ��_ e  �` ��a e  �b ��c e  �d ��e e  �f ��g e  �h ��i e  �j ��k e  �l ��m e  �n ��o e  �p ��q e  �r ��s e  �t ��u e  �v ��w e  �x ��y e  �z ��{ e  �| ��} e  �~ �� e  �@ ��A e  �B ��C e  �D ��E e  �F ��G e  �H ��I e  �J ��K e  �L ��M e  �N ��O e  �P ��Q e  �R ��S e  �T ��U e  �V ��W e  �X ��Y e  �Z ��[ e  �\ ��] e  �^ ��_ e  �` ��a e  �b ��c e  �d ��e e  �f ��g e  �h ��i e  �j ��k e  �l ��m e  �n ��o e  �p ��q e  �r ��s e  �t ��u e  �v ��w e  �x ��y e  �z ��{ e  �| ��} e  �~ �� e  �@ ��A e  �B ��C e  �D ��E e  �F ��G e  �H ��I e  �J ��K e  �L ��M e  �N ��O e  �P ��Q e  �R ��S e  �T ��U e  �V ��W e  �X ��Y e  �Z ��[ e  �\ ��] e  �^ ��_ e  �` ��a e  �b ��c e  �d ��e e  �f ��g e  �h ��i e  �j ��k e  �l ��m e  �n ��o e  �p ��q e  �r ��s e  �t ��u e  �v ��w e  �x ��y e  �z ��{ e  �| ��} e  �~ �� e  �@ ��A e  �B ��C e  �D ��E e  �F ��G e  �H ��I e  �J ��K e  �L ��M e  �N ��O e  �P ��Q e  �R ��S e  �T ��U e  �V ��W e  �X ��Y e  �Z ��[ e  �\ ��] e  �^ ��_ e  �` ��a e  �b ��c e  �d ��e e  �f ��g e  �h ��i e  �j ��k e  �l ��m e  �n ��o e  �p ��q e  �r ��s e  �t ��u e  �v ��w e  �x ��y e  �z ��{ e  �| ��} e  �~ �� e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �@ ��Ae  �B ��Ce  �D ��Ee  �F ��Ge  �H ��Ie  �J ��Ke  �L ��Me  �N ��Oe  �P ��Qe  �R ��Se  �T ��Ue  �V ��We  �X ��Ye  �Z ��[e  �\ ��]e  �^ ��_e  �` ��ae  �b ��ce  �d ��ee  �f ��ge  �h ��ie  �j ��ke  �l ��me  �n ��oe  �p ��qe  �r ��se  �t ��ue  �v ��we  �x ��ye  �z ��{e  �| ��}e  �~ ��e  �B � �Ce  �D � �Ee  �F � �Ge  �H � �Ie  �J � �Ke  �L � �Me  �N � �Oe  �P � �Qe  �R � �Se  �T � �Ue  �V � �We  �X � �Ye  �Z � �[e  �\ � �]e  �^ � �_e  �` � �ae  �b � �ce  �d � �ee  �f � �ge  �h � �ie  �j � �ke  �l � �me  �n � �oe  �p � �qe  �r � �se  �t � �ue  �v"�!�!�!�!�!�!�!�!�!�Ie  ���R%�'�%�&�'��+�,� ' ��#rc�� |jj�D��cic]\}}||j���}}}t|jdd��5}t j ||dd��ddd�tjd|j���ycc}}w#1swY�2xYw#t$r"}tjd |���Yd}~yd}~wwxYw) u保存扫描结果到文件�wr��encodingF�)� ensure_ascii�indentNu扫描结果已保存到: u保存扫描结果失败: ) r��itemsrd�openr��json�dump�logger�info� Exception�error)r�ip�result� results_dict�f�es r�save_scan_resultsz NetworkScanner.save_scan_results/s��� ;�7;�7H�7H�7N�7N�7P��7P���V��F�N�N�$�$�7P� ���d�,�,�c�G�D��� � �,���a�H�E� �K�K�4�T�5K�5K�4L�M� N�� �E�D��� ;� �L�L�5�a�S�9� :� :�� ;�s?�B,�B�B,�B �/*B,�B,� B)�%B,�, C�5C�Cc���tjj|j�stj d�y t |jdd��5}tj|�}ddd�j�D]�\}}t|d|d|jd�|jd �|jd �|jd �|jd �|jd g�|jdi�|jdi�|jd�tj|d�td�|jdg�D���� }||j|<��tj dt!|j��d��y#1swY��<xYw#t"$r"}tj%d|���Yd}~yd}~wwxYw)u从文件加载扫描结果u-扫描结果文件不存在,将创建新的N�rrr�rOrPrQrRrSrTrUrXrYrZr[r\c3�2K�|]}t|����y�wr)rB)�.0rcs r� <genexpr>z3NetworkScanner.load_scan_results.<locals>.<genexpr>Ss����(}�U|�6�)>�v�)F�U|�s�r]r`u 已加载u个扫描结果u加载扫描结果失败: )r�r��existsr�r�r�r�r��loadr�rN�getr � fromisoformatrmr��lenr�r�)rr�r�r�� result_datar�r�s rr�z NetworkScanner.load_scan_results;s����w�w�~�~�d�4�4�5� �K�K�G� H� � ;��d�,�,�c�G�D���y�y��|��E�$(�:�:�<���K�#�*�<�8�(��4�"-�/�/�/�"B�(�_�_�Z�8� +��� � >�&�?�?�8�4� +��� � >�*���|�R�@�(�_�_�Z��<�)�o�o�k�2�>�'�O�O�I�6�"*�"8�"8��_�9U�"V�%(�(}�U`�Ud�Ud�ew�y{�U|�(}�%}���)/��!�!�"�%�!$0�$ �K�K�)�C��(9�(9�$:�#;�?�K� L�+E�D��,� ;� �L�L�5�a�S�9� :� :�� ;�s1�F6�F)�/D9F6�)F3�.F6�6 G!�?G�G!r�rqr^c ��K� tj�j�dk(rddddtt |dz��|g}nddddtt |��|g}t j |t jjt jjd ���d {���}t j|j�|d z� ��d {���\}}|jd k(r�|j�}tj�j�dk(rYtjd|tj�}|r1|j!d �xs|j!d�} dt#| �fSytjd|�}|rdt#|j!d ��fSyy7�� 7��#t j$$rYyt&$r%} t(j+d|�d| ���Yd } ~ yd } ~ wwxYw�w)u异步ping主机�windowsr5z-n�1z-w��z-cz-W)�stdout�stderrN��rqru!时间[<=](\d+)ms|time[<=](\d+)msr�Tztime=(\d+\.?\d*)ms)TN)FNzPing � 失败: )�platform�system�lowerrerj�asyncio�create_subprocess_exec� subprocess�PIPE�wait_for� communicate� returncoder"�re�search� IGNORECASE�grouprh� TimeoutErrorr�r��debug) rr�rq�cmd�processr�r��output� time_match� time_valuer�s r� ping_hostzNetworkScanner.ping_host[s�����( ���� �&�&�(�I�5��t�S�$��C��$��4G�0H�"�M���t�S�$��C��L�0A�2�F��#�:�:���)�)�.�.��)�)�.�.���G� $+�#3�#3��#�#�%�w��{�$��N�F�F��!�!�Q�&�������?�?�$�*�*�,� �9�!#���+O�QW�Y[�Yf�Yf�!g�J�!�%/�%5�%5�a�%8�%O�J�<L�<L�Q�<O� �#�U�:�%6�6�6�"� "$���+@�&�!I�J�!�#�U�:�+;�+;�A�+>�%?�?�?�!�"�7�� ��.�#�#� ��� � �L�L�5���I�a�S�1� 2��� �sl�G?�B&F:�*F5�+/F:�F8�B"F:�=G?�?3F:�2G?�5F:�8F:�:G<� G?�G<�G7�2G?�7G<�<G?�portc���K� tjtj||�|���d{���\}}|j�|j ��d{���y7�07�#YyxYw�w)u异步扫描单个端口r�NTF)r�r��open_connection�close� wait_closed)rr�r�rq�reader�writers r� scan_portzNetworkScanner.scan_port�sk���� �#*�#3�#3��'�'��D�1��$��N�F�F� �L�L�N��$�$�&� &� &�� �� '�� ��s>�A.�.A'�A#�*A'�A%�A'�"A.�#A'�%A'�'A+�)A.�portsc�� K�|D�cgc]}|j|||���}}tj|ddi��d{���}g}t||�D]*\}}t |t �s�|s�|j |��,|Scc}w7�F�w)u异步扫描多个端口�return_exceptionsTN)r�r��gather�zip� isinstancerg�append) rr�r�rqr��tasks�resultsrXr�s r� scan_portszNetworkScanner.scan_ports�s�����?D�E�u�t�����D�'�2�u��E�����F��F�F��� ���w�/�L�D�&��&�$�'�F��!�!�$�'�0����F�F�s%�B�A=�B�B�(B�%B�(Bc��NK� tj|�d}|S#YyxYw�w)u获取主机名rN)�socket� gethostbyaddr)rr�rRs r� get_hostnamezNetworkScanner.get_hostname�s.���� ��+�+�B�/��2�H��O�� ��s�%��%�"�%rSc���|sy|j�jdd�jdd�}t|�dk\r |dd}|jj |�Sy)u'根据MAC地址前缀获取厂商信息N�-�:�.�)�upperrr�r�r�)rrS� mac_upper�ouis r�get_vendor_by_macz NetworkScanner.get_vendor_by_mac�se���� �%�%�'�/�/��S�9�A�A�#�s�K� � �y�>�Q� ��B�Q�-�C��&�&�*�*�3�/� /�r� scan_resultc����|j}|jxsd}|jxsd�d|vr�d|vsd|vr�t�fd�dD��rzd�j �vsd�j �vrt j Sd �j �vs$d �j �vsd �j �vr2t jS|j �d vrt j S|j �d k(rt j S|j �dvrt j S|j �dk(rt jS�j ��t�fd�dD��rt j St�fd�dD��rt jSt�fd�dD��rt jSt�fd�dD��rt jSt jS)u$根据扫描结果推断设备类型�r}rzr{c3�B�K�|]}|�j�v���y�wr)r�)r��keywordrRs �rr�z3NetworkScanner.infer_device_type.<locals>.<genexpr>�s �����t�Bs�w�w�(�.�.�"2�2�Bs�s�)�switch�sw�router�rt�gw�gatewayrrrrr)�cisco�huawei�h3c�juniperr)rrr c3�&�K�|]}|�v��� y�wrr@�r�r��hostname_lowers �rr�z3NetworkScanner.infer_device_type.<locals>.<genexpr>�s�����I�8H�W�w�.�(�8H���)rrc3�&�K�|]}|�v��� y�wrr@r s �rr�z3NetworkScanner.infer_device_type.<locals>.<genexpr>�s�����\�:[�w��N�*�:[�r )rrrrc3�&�K�|]}|�v��� y�wrr@r s �rr�z3NetworkScanner.infer_device_type.<locals>.<genexpr>�s�����[�:Z�w��N�*�:Z�r )�firewall�fw�asa�pixc3�&�K�|]}|�v��� y�wrr@r s �rr�z3NetworkScanner.infer_device_type.<locals>.<genexpr>�s�����U�:T�w��N�*�:T�r )�ap�wireless�wifi) rXrTrR�anyr�r1�SWITCH�ROUTER�FIREWALL� ACCESS_POINT�OTHER)rr�rXrTrRr s @@r�infer_device_typez NetworkScanner.infer_device_type�s���� �+�+� ��#�#�)�r���'�'�-�2�� �*� ��Z��2��#3��t�Bs�t�t��8�>�>�#3�3�t�x�~�~�?O�7O�)�0�0�0�!�X�^�^�%5�5�����AQ�9Q�UY�]e�]k�]k�]m�Um�)�0�0�0��\�\�^�'L�L�%�,�,�,� �<�<�>�W� $��$�$� $� �\�\�^�0� 0��$�$� $� �\�\�^�y� (��$�$� $�"���)�� �I�8H�I� I��$�$� $� �\�:[�\� \��$�$� $� �[�:Z�[� [��&�&� &� �U�:T�U� U��*�*� *����rc�H��|jxsd}|jxsd}|r`|j�}d|vrtjSd|vrtj Sd|vrtj Sd|vrtjS|j��t�fd�dD��rtjSt�fd�d D��rtj Sd�vrtj St�fd �d D��rtjStjS) u$根据扫描结果推断设备厂商r�rrrr c3�&�K�|]}|�v��� y�wrr@r s �rr�z5NetworkScanner.infer_device_vendor.<locals>.<genexpr>�s�����R�8Q�W�w�.�(�8Q�r )r�cat�nexusc3�&�K�|]}|�v��� y�wrr@r s �rr�z5NetworkScanner.infer_device_vendor.<locals>.<genexpr>�s�����K�:J�w��N�*�:J�r )r�hwc3�&�K�|]}|�v��� y�wrr@r s �rr�z5NetworkScanner.infer_device_vendor.<locals>.<genexpr>�s�����Y�:X�w��N�*�:X�r )r �mx�ex�qfx) rTrRr�r0�CISCO�HUAWEIr��JUNIPERrr)rr�rTrR� vendor_lowerr s @r�infer_device_vendorz"NetworkScanner.infer_device_vendor�s����#�#�)�r���'�'�-�2�� �!�<�<�>�L��,�&�#�)�)�)��\�)�#�*�*�*��,�&�#�'�'�'��l�*�#�+�+�+�"���)�� �R�8Q�R� R��%�%� %� �K�:J�K� K��&�&� &� �n� $��#�#� #� �Y�:X�Y� Y��'�'� '��!�!�!r� community�oidc��pK� y#t$r%}tjd|�d|���Yd}~yd}~wwxYw�w)u%SNMP查询(需要安装pysnmp库)Nu SNMP查询 r�)r�r�r�)rr�r.r/rqr�s r� snmp_queryzNetworkScanner.snmp_query�s;���� ���� � �L�L�;�r�d�)�A�3�7� 8��� �s�6�6� 3�.�6�3�6�configc��6K�t|��} |jr`|j||j��d{���\}}||_||_|r)|j jtj�|js|S|jr�|j||j|j��d{���}||_ |r)|j jtj�|D]0}|jj!|d|���}||j"|<�2|j%|��d{���} | r | |k7r| |_|j(r�d|jvrs|j*D]d} |j-|| |j���d{���} | s�,| |j.| <|j jtj0�n|j2r |j5|j2�|_|j9|�j:|_|j?|�} |j6�| j:|_|S7��!7���7��"7��#t@$r&} tBjEd|�d| ���Yd} ~ |Sd} ~ wwxYw�w)u扫描单个主机�rONzUnknown/r}r�u 扫描主机 u 时出错: )#rNrtr�rqrPrQr]�addrBrHrur�r�rXrKr�r�rYr�rRrvr�r1rZrJrSr�rTrrbrUr-r�r�r�)rr�r2r�rPrQrXr��servicerRr.� snmp_result� vendor_enumr�s r�scan_single_hostzNetworkScanner.scan_single_hostsN�����r�*��1 >��"�"�04���r�6�>�>�0R�*R�'��-�"*���'4��$���+�+�/�/�0E�0P�0P�Q��?�?�� ��'�'�#'�?�?�2�v�7J�7J�F�N�N�#[�[� �$.��!���+�+�/�/�0E�0O�0O�P�'�D�"�9�9�=�=�d�h�t�f�DU�V�G�,3�F�O�O�D�)�'� "�.�.�r�2�2�H��H��N�"*����"�"�s�f�.?�.?�'?�!'�!8�!8�I�(,����I�v�~�~��(^�"^�K�"�6A��(�(��3��/�/�3�3�4I�4S�4S�T�� "9��!�!� $� 6� 6�v�7I�7I� J�� �!%�!7�!7��!?�!E�!E�F� ��2�2�6�:�K��}�}�$� +� 1� 1�� � � �a+S��\��3��#_��� >� �L�L�=���L���<� =� =�� �� >�s�� J�+I'�I�A I'� J� 6I'�I�A?I'�I"�AI'�I%�I'�%B5I'�J�I'�I'�"I'�%I'�' J�0J� J�J�JN�networkc��.���K��� t��tjd|��� tj|d��}|j �D�cgc] }t |���}}t|�dkDr'tjdt|��d��|dd}tjdt|��d ��tj�j�����fd �}|D�cgc] }||��� }}tj|d d i��d{���}g} |D]f} t| t�r+| j| �| �j | j"<�>t| t$�s�Otj'd | ����h| D� cgc]} | j(s�| ��} } tjdt| ��d���j+�| Scc}wcc}w7��cc} w#t$$r$} tj'd| ���gcYd} ~ Sd} ~ wwxYw�w)u扫描网络范围Nu开始扫描网络范围: F)�strictr�u网络范围过大 (u! 个主机),限制为前1000个u 将扫描 u 个主机c���K��4�d{����j|���d{���cddd��d{���S7�/7�7� #1�d{���7swYyxYw�wr)r9)r�r2r� semaphores ���r�scan_with_semaphorez>NetworkScanner.scan_network_range.<locals>.scan_with_semaphoreVs9�����$�9�!%�!6�!6�r�6�!B�B�%�9�9��B��%��9�9�9�sL�A�:�A�A�<�A� A�>�A�A�A�A�A �A�Ar�Tu扫描任务异常: u扫描完成,发现 u 个活跃主机u扫描网络范围失败: )ror�r�� ipaddress� ip_network�hostsrer��warningr�� Semaphorersr�r�rNr�r�rOr�r�rPr�)rr:r2�netr��ip_listr?r�r�� valid_resultsr�r�� alive_resultsr�r>s` ` @r�scan_network_rangez!NetworkScanner.scan_network_range@s������ �>�&�(�F�� � �0�� �:�;�- ��&�&�w�u�=�C�),����5��2�s�2�w��G�5��7�|�d�"����!5�c�'�l�^�Cd�e�f�!�%�4�.�� �K�K�*�S��\�N�*�=� >� �)�)�&�*?�*?�@�I� C� 8?�?�w��(��,�w�E�?�#�N�N�E�J�T�J�J�G��M�!���f�j�1�!�(�(��0�;A�D�%�%�f�&7�&7�8��� �2��L�L�#7��x�!@�A� "�)6�D� �1����Q� �M�D� �K�K�0��]�1C�0D�DT�U� V� � "� "� $� � ��M6��"@�J��E��� � �L�L�5�a�S�9� :��I�� �s~�%H�)G%�G�&BG%�)G�8G%�G�AG%�*G%�G �G �5G%�H� G%� G%�% H�.H �H�H� H�Hr�� auto_createc ��d� K�g}|D�]�� � js�|jj�}t� fd�|D��}|r#tj d� j ����d|s�g� jxsd� j jdd���} � jrt� j�ntj} � jr#t� jj��ntj}t#|� j ||t$j&d� j(j+d��d�d � j,rd � j,�d �nd g� �} |jj/| �} |j1| �tj3d| j4�d| j �d| jj6������|S#t$rtj}Y��8wxYw#tt f$rtj}Y��wxYw�w)u'从扫描结果中发现并创建设备c3�P�K�|]}|j�jk(���y�wrr4)r��devicer�s �rr�z<NetworkScanner.discover_devices_from_scan.<locals>.<genexpr>�s%�����f�Ue�6�� 1� 1�V�5F�5F� F�Ue�s�#&u设备已存在: zDevice-r�r�u.通过网络扫描自动发现 (扫描时间: z%Y-%m-%d %H:%M:%S�)u网络扫描发现u 响应时间:�msr�)�namerOrUrT�status� description�tagsu创建新设备: z (z) - )rPr�� list_devicesrr�r�rOrRrrUr1r� ValueErrorrTr0r��AttributeErrorr/r2�UNKNOWNr\�strftimerQ� add_devicer�r�rPrb) rr�rJ�discovered_devices�existing_devices� device_exists� device_namerUrT� new_device� device_idr�s @r�discover_devices_from_scanz)NetworkScanner.discover_devices_from_scanvs�������"�F��?�?�� $�2�2�?�?�A� ��f�Ue�f�f�M��� � �0��1B�1B�0C�D�E���$�o�o�`�7�6�;L�;L�;T�;T�UX�Z]�;^�:_�1`� �3�DJ�DV�DV�*�V�-?�-?�"@�\f�\l�\l�K�0�DJ�M�M�\�&�-�-�*=�*=�*?�@�Wc�Wi�Wi�F�+�$�%�0�0� +�!�'�/�/�"P�QW�Qe�Qe�Qn�Qn�pC�RD�QE�EF�!G�.�\b�\p�\p�-��@T�@T�?U�UW�0X�vx�y�� �!�/�/�:�:�:�F� �"�)�)�*�5�� � �/� ���/@��:�CX�CX�BY�Y]�^h�^o�^o�^u�^u�]v�w�x�Q#�T"�!��1"�3�",�"2�"2�K�3�� #�N�3�0�)�/�/�F�0�sO�A+H0�/-H0�1G*�?H �CH0�*H�H0�H�H0� H-�)H0�,H-�-H0c ��t|j�}t|jj�D�cgc]}|js�|��c}�}i}|jj�D]H}|js�|js�|j |jd�dz||j<�Ji}|jj�D]H}|js�|j s�|j |j d�dz||j <�Ji}|jj�D]L}|js�|jD].}|j |jd�dz||j<�0�N|||dkDr ||z dzd�d�nd||||jrKt|jj�D�cgc]}|j��c}�j�d�Sdd�Scc}wcc}w) u获取扫描统计信息rr��dz.1fr%z0%N)� total_scanned� alive_hosts�discovery_rate�vendor_distribution�device_type_distribution�discovery_method_distribution�last_scan_time) r�r��valuesrPrTr�rUr]rb�maxr\ra) rrcr�rd� vendor_statsr��device_type_stats�discovery_method_statsrcs r�get_scan_statisticsz"NetworkScanner.get_scan_statistics�s����D�-�-�.� ��d�&7�&7�&>�&>�&@�O�&@��A�J�J�1�&@�O�P� �� ��'�'�.�.�0�F����6�=�=�.:�.>�.>�v�}�}�a�.P�ST�.T� �V�]�]�+�1� ���'�'�.�.�0�F����6�#5�#5�8I�8M�8M�f�N`�N`�bc�8d�gh�8h�!�&�"4�"4�5�1� "$���'�'�.�.�0�F����$�5�5�F�;Q�;U�;U�V\�Vb�Vb�de�;f�ij�;j�*�6�<�<�8�6�1� +�&�KX�[\�K\�+�m�";�C�"?�� E�Q�G�bf�#/�(9�-C�hl�hy�hy�c�D�<M�<M�<T�<T�<V�"W�<V�q�1�?�?�<V�"W�X�b�b�d� � �@D� � ��+P��8#Xs�G?� G?�Hc��|jj�|j�tj d�y)u清空扫描结果u扫描结果已清空N)r��clearr�r�r�)rs r�clear_scan_resultsz!NetworkScanner.clear_scan_results�s-�� �����!� ��� �� � �+�,r)rp)r�z1.3.6.1.2.1.1.1.0rpr)T)#r&r'r(r:r.rr�r�rerhrrgrr�rjr�rr�r�r�rNr1rr0r-r1ror9rIr/r`rrrorrr@rrr�r�ls����~  �}�~  �@ ;�;�@*�#�*��*��d�H�UZ�O�F[�@\�*�X �#� �S� �5� �4� � �3� �t�C�y� �5� �SW�X[�S\� ��S��X�c�]�� �S� �X�c�]� �& �Z�& �J�& �P"�z�"�l�"�<�3��3����lq��}E�FI�}J��7��7�6G�7�J�7�r4��4�X�FW�=X�4�dh�is�dt�4�l."�T�*�=M�."�\`�."�lp�q~�l�."�`  �T�#�s�(�^�  �D-rr�r�r^c��t|�S)u创建网络扫描器实例)r�)r�s r�create_network_scannerrt�s �� �.� )�)r)5�typingrrrrrrr � dataclassesr r �enumr �logging�sysr�r�r�r@r�r�r��concurrent.futures� concurrentr r�aiohttpr�� Formatterr� basicConfig�INFO� StreamHandlerr��rootr,�handlerr�� setFormatter� getLoggerr��network_devicesr.r/r0r1r2r4rBrNror�rtr@rr�<module>r�sG��?�?�?�(��� � � ��� �� ��(���L�G�%�%�L����� �,�,� A�����S�Z�Z�0����|�|�$�$�G��'�7�0�0�1����]�+a�b�c�%� �� � �,� -��`�`�����D�� � � � � �B � W� W� � W�`-�`-�F#*�=�*�^�*r

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/NorthLaneMS/NetBrain_MCP'

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