在Python中构建一个IP sacanner,返回活动主机列表。只返回一个主机

在Python中构建一个IP sacanner,返回活动主机列表。只返回一个主机,python,list,sockets,Python,List,Sockets,我只写了一个月的Python,这是我第一个找不到答案的问题 我正在构建一个Python脚本,其中包含一个IP扫描程序作为其功能的一部分。它在本地网段上查找具有开放Telnet端口(23)的主机,并返回找到的主机列表。此脚本将在Windows上运行。代码如下: import socket def isOpen(hostname, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket.setde

我只写了一个月的Python,这是我第一个找不到答案的问题

我正在构建一个Python脚本,其中包含一个IP扫描程序作为其功能的一部分。它在本地网段上查找具有开放Telnet端口(23)的主机,并返回找到的主机列表。此脚本将在Windows上运行。代码如下:

import socket

def isOpen(hostname, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.setdefaulttimeout(0.1)
    result = sock.connect_ex((hostname, port))
    sock.close()
    return result == 0

def ipScan(start, end):
    livehosts = []
    for i in range (start, end):
        res = isOpen("192.168.1."+str(i), 23)
        if res:
            foundhost = "192.168.1." + str(i)
            livehosts.append(foundhost)
            return livehosts

print (ipScan(0, 254))
我知道,这是粗糙的,不能说明扫描计算机在哪个子网中,但我已将其剥离回去,尝试进行故障排除

我遇到的问题是,我只得到了一个单一的项目列表

['192.168.1.2']
网络上应该有5个设备具有开放的Telnet端口,但我只能让此脚本返回单个设备。期望输出为:

['192.168.1.2','192.168.1.3','192.168.1.4','192.168.101','192.168.1.124', etc...]
在已知活动主机上启动搜索将返回该主机,但不会返回其他主机。例如,如果我在192.168.1.101开始搜索,它将返回

['192.168.1.101']
而不是

['192.168.1.101', '192.168.1.124', etc...]
应该如此


将来,我打算实现线程来提高性能,并实现一种脚本发现它所在的子网并从中找出要扫描的内容的方法。

一旦找到一台主机,您将返回列表,该主机回答:

    if res:
        foundhost = "192.168.1." + str(i)
        livehosts.append(foundhost)
        return livehosts   <--

这样,您的列表可以在返回之前完全填充。

是!非常感谢。缩进错误,通常是这样。@pspkiller91如果这对您有帮助,请不要忘记勾选答案,这样问题就结束了检查返回语句的缩进。它应该在for循环之外。
for i in range (start, end):
    res = isOpen("192.168.1."+str(i), 23)
    if res:
        foundhost = "192.168.1." + str(i)
        livehosts.append(foundhost)

return livehosts