使用python语言基于面向对象思想利用paramiko远程进服务器,在服务器上利用多线程批量ping并声音报警
时间: 2024-05-19 07:16:45 浏览: 22
您好,我理解您要问的是如何基于面向对象思想利用 paramiko 远程进入服务器,并使用多线程批量 ping 并声音报警。以下是一个大致的方案:
1. 安装 paramiko 库,用于 SSH 登录服务器。可以使用 pip install paramiko 命令进行安装。
2. 创建一个 Server 类,包括 IP 地址、用户名、密码等属性和方法。在该类中编写远程登录服务器的方法,可以使用 paramiko 库中的 SSHClient 对象进行登录。
3. 创建一个 Ping 类,包括 IP 地址、超时时间等属性和方法。在该类中编写 ping 操作的方法,可以使用 subprocess 模块进行 ping 命令的执行。
4. 创建一个 Alarm 类,包括声音文件路径等属性和方法。在该类中编写播放声音的方法,可以使用 pygame 库进行声音的输出。
5. 在主程序中,创建多个 Ping 对象,分别代表要 ping 的 IP 地址。使用多线程的方式执行 ping 操作,并记录 ping 的结果。
6. 根据 ping 的结果,判断是否需要播放报警声音。如果需要,创建一个 Alarm 对象,播放声音文件。
以上是一个基本的方案,您可以根据具体情况进行优化和修改。希望对您有所帮助。
相关问题
使用python语言基于面向对象思想利用paramiko远程进服务器,使用多线程批量ping并声音报警
您的问题是如何使用Python语言基于面向对象思想利用Paramiko远程进服务器,使用多线程批量ping并声音报警。
首先,您可以使用Paramiko库来建立一个SSH连接。下面是一些样例代码:
```python
import paramiko
import sys
class SSH:
def __init__(self, hostname, username, password):
self._ssh = paramiko.SSHClient()
self._ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self._ssh.connect(hostname, username = username, password = password)
def execute(self, command):
stdin, stdout, stderr = self._ssh.exec_command(command)
if stderr.read():
print("Failed to run command: " + command)
return None
return stdout.readlines()
#测试
ssh = SSH('localhost', 'user', 'password')
output = ssh.execute("ls -l")
print(output)
```
其中,`SSH`类的构造函数通过`paramiko`库连接到指定主机,并提供用户名和密码。`execute`方法执行给定的命令并返回输出。测试代码展示了如何创建`SSH`对象并执行简单的命令。
接下来,您可以使用多线程来批量ping主机。下面是一些样例代码:
```python
import threading
import subprocess
import re
class Ping(threading.Thread):
def __init__(self, ip):
threading.Thread.__init__(self)
self.ip = ip
self.status = None
def run(self):
ping_output = subprocess.Popen(['ping', '-c', '1', self.ip], stdout = subprocess.PIPE).communicate()[0]
self.status = re.findall("100% packet loss", ping_output.decode('utf-8'))
#测试
threads = []
iplist = ['127.0.0.1', '127.0.0.2']
for ip in iplist:
thread = Ping(ip)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
if thread.status:
print(ip + "is down!")
else:
print(ip + "is up!")
```
以上简单地演示了如何使用多线程ping某些IP,并查看是否有失去任何数据包。如果某个IP无法到达,程序会输出警告。
最后,您可以使用Python库来播放声音。下面是一些参考代码:
```python
import pygame
class Sound:
def __init__(self, filename):
pygame.mixer.init()
pygame.mixer.music.load(filename)
def play(self):
pygame.mixer.music.play()
def stop(self):
pygame.mixer.music.stop()
#测试
sound = Sound('/path/to/your/sound/file.mp3')
sound.play()
```
在以上代码中,`Sound`类使用pygame库初始化音乐播放器。`play`方法播放指定的音频文件。测试代码展示了如何创建`Sound`对象并播放音频文件。
这样,您可以将上述三个组件组合在一起,以实现对大量主机的远程监控以及警报,即在向所有目标ping命令的同时,使用多线程执行该过程,并在服务器未响应时发送警报声音。
希望对您有所帮助!
使用python语言基于面向对象思想利用paramiko远程进服务器,批量ping并声音报警
好的,我明白了您的要求和问题。可以使用Python中的paramiko模块连接到远程服务器,并使用os模块执行ping命令。
下面是一个示例代码,可以根据您的具体需求进行修改:
```python
import os
import paramiko
import time
import winsound
class Server:
def __init__(self, ip, username, password):
self.ip = ip
self.username = username
self.password = password
def connect(self):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self.ip, username=self.username, password=self.password)
return ssh
def ping(self, ip):
response = os.system("ping -n 1 " + ip)
if response == 0:
print(ip, 'is up!')
return True
else:
print(ip, 'is down!')
return False
def ping_servers(self, server_ips):
while True:
for ip in server_ips:
if not self.ping(ip):
# play sound when server is down
winsound.PlaySound('alert.wav', winsound.SND_FILENAME)
time.sleep(10) # delay 10 seconds before running ping again
if __name__ == '__main__':
# server settings
server_ip = 'your_server_ip'
server_username = 'your_username'
server_password = 'your_password'
server_ips = ['server_ip_1', 'server_ip_2', 'server_ip_3']
# connect to server
server = Server(server_ip, server_username, server_password)
ssh = server.connect()
# run ping and sound alert
server.ping_servers(server_ips)
# close connection
ssh.close()
```
需要注意的是,在运行Ping命令时,需要根据不同的操作系统进行修改。上述代码是在Windows系统下运行的ping命令。如果在Linux系统下运行,需要修改为`ping -c 1`。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)