Python 有没有一种方法可以在不输入单个设备的情况下生成一个函数来测试网络上设备的ssh连接能力?

Python 有没有一种方法可以在不输入单个设备的情况下生成一个函数来测试网络上设备的ssh连接能力?,python,ssh,Python,Ssh,我正在开发一个程序,其中通过SSH连接到raspberry pi是通过python中的GUI应用程序窗口运行该程序所必需的,下面是我现在可以在所有设备上“测试”SSH连接的内容,但我必须输入pi本身的实际IP。我需要这样做,它只是测试网络上所有东西的连接,并连接到可用的设备 有什么帮助吗 def raspi_connecter(): for n in range(1, 255): server_ip= "10.0.0.153".format(n)

我正在开发一个程序,其中通过SSH连接到raspberry pi是通过python中的GUI应用程序窗口运行该程序所必需的,下面是我现在可以在所有设备上“测试”SSH连接的内容,但我必须输入pi本身的实际IP。我需要这样做,它只是测试网络上所有东西的连接,并连接到可用的设备

有什么帮助吗

def raspi_connecter():
    for n in range(1, 255):
        server_ip= "10.0.0.153".format(n)
        subprocess.Popen('ssh' + ' ' + 'dev@' + server_ip, shell= True) 

这里有一个python2程序(我从来没有为python3修改过它),它可以找到你的树莓。它运行nmap来创建XML输出,然后粗略地解析它

它需要iproute模块
sudo apt安装python{,3}-pyroute

#!/usr/bin/python2

from pyroute2 import IPRoute
import socket
import subprocess
import xml.etree.ElementTree as ET

ip = IPRoute()
for x in ip.get_addr(label='eth0',family=socket.AF_INET):
  ipa =x.get_attr('IFA_ADDRESS')+"/"+str(x['prefixlen'])

print ipa
process = subprocess.Popen(['sudo','nmap','-oX', '/tmp/nmap.xml','-sn',ipa],stdout=subprocess.PIPE)
process.wait()

tree = ET.parse('/tmp/nmap.xml')
for node in tree.iter('address'):
    try:
        if node.attrib['addrtype'] == "ipv4":
        ip = node.attrib['addr']
    except:
        pass
    try:
        if node.attrib['vendor'] == "Raspberry Pi Foundation":
        print "IP:", ip
    except:
        pass

一旦有了树莓的IP地址,就可以使用子进程(或ping或netcat)运行ssh。它需要对Raspberry Pi 4和Pi400设备进行额外的测试(因为我没有这两个设备(使用新的MAC OUI)。

这里有一个python2程序(我从未为python3重新编写过)来查找您的Raspberry。它运行nmap来创建XML输出,然后粗略地解析它

它需要iproute模块
sudo apt安装python{,3}-pyroute

#!/usr/bin/python2

from pyroute2 import IPRoute
import socket
import subprocess
import xml.etree.ElementTree as ET

ip = IPRoute()
for x in ip.get_addr(label='eth0',family=socket.AF_INET):
  ipa =x.get_attr('IFA_ADDRESS')+"/"+str(x['prefixlen'])

print ipa
process = subprocess.Popen(['sudo','nmap','-oX', '/tmp/nmap.xml','-sn',ipa],stdout=subprocess.PIPE)
process.wait()

tree = ET.parse('/tmp/nmap.xml')
for node in tree.iter('address'):
    try:
        if node.attrib['addrtype'] == "ipv4":
        ip = node.attrib['addr']
    except:
        pass
    try:
        if node.attrib['vendor'] == "Raspberry Pi Foundation":
        print "IP:", ip
    except:
        pass

一旦有了Raspberry的IP地址,就可以使用子进程(或ping或netcat)运行ssh。它需要对Raspberry Pi 4和Pi400设备进行额外的测试(因为我没有这两个设备(使用新的MAC OUI).

使用此选项:这仍然需要输入IP地址。您可以使用python来完成此操作。
!/usr/bin/python from pyroute2 import IPRoute#import socket#IP=IPRoute()#对于IP中的x.get#addr(label='eth0',family=socket.AF#INET):ipa=x.get#attr('IFA#u address+“/”+str(x['prefixlen'))
@Dougie-将此作为答案发布?一个问题是,您不断反复点击10.0.0.153。格式字符串应该是
server\u ip=“10.0.0.{}”。格式(n)
。使用此选项:这仍然需要输入IP地址。您可以使用python来完成此操作。
!/usr/bin/python from pyroute2 import IPRoute#import socket#IP=IPRoute()#对于IP中的x.get#addr(label='eth0',family=socket.AF#INET):ipa=x.get#attr('IFA#u address+“/”+str(x['prefixlen'))
@Dougie-将此作为答案发布?一个问题是,您不断反复点击10.0.0.153。格式字符串应该是
server\u ip=“10.0.0.{}”。格式(n)