示例使用
安易VPN安易VPN官方客户端2026-09-03170
为了帮助用户自动检测节点,我提供了一个功能丰富的节点检测框架,涵盖了节点类型检测、节点状态检测、节点资源使用情况、节点配置信息、节点扩展信息以及节点网络接口信息,以下是详细的步骤说明: 步骤说明 导入必要的库和模块: os 模块用于执行系统命令。 socket 模块用于处理网络相关操作。 time 模块用于记录和格式化时间以便日志记录。 platform 模块用于获取操作系统信息。 subprocess 模块用于运行命令并捕获输出。 定义节点信息模型: 创建一个名为 NodeInfo 的类,包含节点的基本信息字段,如ID、IP、主机名、状态、资源使用情况等。 检测节点类型: 普通节点:通过运行ping命令检测是否响应。 专用节点(如GPU节点):检查是否存在特定_GPU标志位。 无源节点:使用网络扫描工具(如nmap)或内部节点列表进行发现。 检测节点状态: 在线状态:使用ping命令或检查网络连接状态。 可用性状态:通过检查节点的网络端口是否开放。 故障检测:运行健康检查命令(如curl)或使用传感器数据。 获取节点资源使用情况: CPU使用率:使用top或htop命令获取实时使用率。 内存使用率:使用free或top命令获取内存使用情况。 磁盘使用率:使用df命令获取磁盘空间使用情况。 获取节点配置信息: 节点标签和角色:通过节点的标签文件或配置文件获取。 集群信息:检查节点是否属于特定的集群或群组。 运行环境:获取操作系统版本、Kernel版本等信息。 获取节点扩展信息: 系统版本:使用cat /etc/os-release获取操作系统信息。 Kernel版本:使用uname -r获取Kernel版本。 系统 uptime:使用uptime或who -b获取系统运行时间。 获取节点网络接口信息: IP地址:使用ifconfig或ip addr命令获取所有网络接口的IP地址。 子网掩码:使用ifconfig或ip命令获取子网掩码信息。 默认网关:使用ip route或route命令获取默认网关信息。 处理异常和错误:...
为了帮助用户自动检测节点,我提供了一个功能丰富的节点检测框架,涵盖了节点类型检测、节点状态检测、节点资源使用情况、节点配置信息、节点扩展信息以及节点网络接口信息,以下是详细的步骤说明:
步骤说明
-
导入必要的库和模块:
os模块用于执行系统命令。socket模块用于处理网络相关操作。time模块用于记录和格式化时间以便日志记录。platform模块用于获取操作系统信息。subprocess模块用于运行命令并捕获输出。
-
定义节点信息模型:
- 创建一个名为
NodeInfo的类,包含节点的基本信息字段,如ID、IP、主机名、状态、资源使用情况等。
- 创建一个名为
-
检测节点类型:
- 普通节点:通过运行
ping命令检测是否响应。 - 专用节点(如GPU节点):检查是否存在特定_GPU标志位。
- 无源节点:使用网络扫描工具(如
nmap)或内部节点列表进行发现。
- 普通节点:通过运行
-
检测节点状态:
- 在线状态:使用
ping命令或检查网络连接状态。 - 可用性状态:通过检查节点的网络端口是否开放。
- 故障检测:运行健康检查命令(如
curl)或使用传感器数据。
- 在线状态:使用
-
获取节点资源使用情况:
- CPU使用率:使用
top或htop命令获取实时使用率。 - 内存使用率:使用
free或top命令获取内存使用情况。 - 磁盘使用率:使用
df命令获取磁盘空间使用情况。
- CPU使用率:使用
-
获取节点配置信息:
- 节点标签和角色:通过节点的标签文件或配置文件获取。
- 集群信息:检查节点是否属于特定的集群或群组。
- 运行环境:获取操作系统版本、Kernel版本等信息。
-
获取节点扩展信息:
- 系统版本:使用
cat /etc/os-release获取操作系统信息。 - Kernel版本:使用
uname -r获取Kernel版本。 - 系统 uptime:使用
uptime或who -b获取系统运行时间。
- 系统版本:使用
-
获取节点网络接口信息:
- IP地址:使用
ifconfig或ip addr命令获取所有网络接口的IP地址。 - 子网掩码:使用
ifconfig或ip命令获取子网掩码信息。 - 默认网关:使用
ip route或route命令获取默认网关信息。
- IP地址:使用
-
处理异常和错误:
- 在每个函数中添加异常捕获,处理可能的命令失败、网络不可达等情况。
- 提供详细的日志信息以便于调试和问题排查。
-
返回结构化数据:
- 每个检测函数返回一个
NodeInfo实例,包含检测结果。 - 结构化的数据便于后续处理和展示。
- 每个检测函数返回一个
代码示例
import os
import socket
import time
import platform
import subprocess
class NodeInfo:
def __init__(self, node_id, ip, hostname):
self.node_id = node_id
self.ip = ip
self.hostname = hostname
self.status = None
self.resources = None
self.config = None
self.extended = None
self.network = None
def detect_node_type(ip):
try:
# 检测是否为普通节点
response = subprocess.run(['ping', '-c', '1', ip], stdout=subprocess.PIPE, text=True)
if response.returncode == 0:
return '普通节点'
# 检测是否为专用节点(如GPU节点)
node_type = '专用节点'
# 具体实现根据实际情况调整,例如检查GPU是否存在
return node_type
except:
return '无法检测类型'
def detect_node_status(ip):
try:
# 检测是否在线
response = subprocess.run(['ping', '-c', '1', ip], stdout=subprocess.PIPE, text=True)
if response.returncode == 0:
status = '在线'
else:
status = '离线'
return status
except:
return '状态未知'
def detect_node_resources(ip):
try:
# 获取CPU使用率
cpu_usage = os.popen('top -n 1 | grep -E "Cpu(s)|KiB"').read().strip()
# 获取内存使用率
mem_usage = os.popen('free -m | grep -E "Mem|"').read().strip()
# 获取磁盘使用率
disk_usage = os.popen('df -h | grep -E "[/]""').read().strip()
# 解析使用率
cpu_usage = int(cpu_usage.split()[3].replace('%', ''))
mem_usage = int(mem_usage.split()[3].replace('%', ''))
disk_usage = int(disk_usage.split()[4].replace('%', ''))
return {
'CPU使用率': cpu_usage,
'内存使用率': mem_usage,
'磁盘使用率': disk_usage
}
except:
return None
def detect_node_config(ip):
try:
# 获取节点标签和角色
labels = os.popen('cat /etc/labels').read().strip()
role = os.popen('cat /etc/role').read().strip()
cluster = os.popen('cat /etc/cluster').read().strip()
return {
'标签': labels,
'角色': role,
'集群': cluster
}
except:
return None
def detect_node_extended(ip):
try:
# 获取系统版本
version = os.popen('cat /etc/os-release').read().strip()
version = version.split('=')[1].strip().split('"')[]
# 获取Kernel版本
kernel_version = os.popen('uname -r').read().strip()
# 获取系统uptime
uptime = os.popen('who -b').read().strip()
return {
'系统版本': version,
'Kernel版本': kernel_version,
'系统uptime': uptime
}
except:
return None
def detect_node_network(ip):
try:
interfaces = os.popen('ip addr').read().strip()
interface_list = interfaces.split()
if interface_list:
# 获取所有网络接口的信息
for if_name in interface_list:
if 'lo' in if_name.lower():
continue
details = os.popen(f'ip show {if_name}').read().strip()
if ' Peer: ' in details:
peer = details.split('Peer: ')[1].split()[]
return {
'IP地址': ip,
'网络接口': if_name,
'子网掩码': details.split(' ')[1],
'默认网关': peer
}
return None
return None
except:
return None
node = NodeInfo('1', '192.168.1.1', 'node1')
node.status = detect_node_status('192.168.1.1')
node.resources = detect_node_resources('192.168.1.1')
node.config = detect_node_config('192.168.1.1')
node.extended = detect_node_extended('192.168.1.1')
node.network = detect_node_network('192.168.1.1')
print(node.__dict__)
解释
- NodeInfo类:用于存储和展示节点的详细信息,包括节点ID、IP地址、主机名、状态、资源使用情况、配置信息、扩展信息和网络接口信息。
- detect_node_type:检测节点类型,检查是否为普通节点或专用节点(如GPU节点)。
- detect_node_status:通过
ping命令判断节点是否在线。 - detect_node_resources:获取CPU、内存和磁盘的使用率。
- detect_node_config:获取节点的标签、角色和集群信息。
- detect_node_extended:获取系统版本、Kernel版本和系统uptime。
- detect_node_network:获取节点的网络接口信息、IP地址、子网掩码和默认网关。
这个框架通过运行系统命令来实时检测节点信息,确保用户可以获得详细的节点状态和资源使用情况,帮助用户进行节点管理和资源调度。

相关文章








