给出一段python代码,使用putty远程主机扫描一个位于/home/group12/all_ip.txt的一个txt文档中的所有ip地址,同时将这其中所有活跃的ip和它所对于的活跃的端口号下载到一个名为answer的txt文档中
时间: 2024-09-11 17:10:52 浏览: 51
首先,你需要安装一些必要的Python库,如`paramiko`用于SSH连接和文件操作,以及`socket`用于检查端口是否开放。这里是一个简化的示例,展示如何使用putty(虽然它是Windows的SSH客户端,但我们可以通过Python模拟它的功能)和`paramiko`库来完成这个任务:
```python
import paramiko
import socket
# 远程服务器信息
remote_host = 'your.remote.host'
remote_port = 22 # SSH默认端口
remote_username = 'your_username'
remote_password = 'your_password'
# 要扫描的本地文件路径
local_file_path = '/home/group12/all_ip.txt'
output_file_path = 'answer.txt'
def is_port_open(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5) # 设置超时时间
try:
sock.connect((ip, port))
sock.close()
return True
except (ConnectionRefusedError, timeout):
return False
finally:
sock.close()
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加未知主机的密钥
try:
ssh.connect(remote_host, remote_port, username=remote_username, password=remote_password)
with open(local_file_path, 'r') as f:
ip_list = f.readlines()
with open(output_file_path, 'w') as out:
for ip in ip_list:
ip_address = ip.strip() # 去除行尾的换行符
if is_port_open(ip_address, 80): # 示例中检查的是HTTP端口,你可以替换为任何端口
out.write(f'{ip_address} (active on port 80)\n')
finally:
ssh.close()
```
**注意**:在实际生产环境中,直接硬编码密码并存储在代码中不是一个安全的做法。你应该考虑使用密钥对认证或者环境变量等方式。
阅读全文