Построение IP-саканнера в Python, который возвращает список активных хостов. Возвращается только один хост - PullRequest
0 голосов
/ 16 апреля 2020

Я всего лишь 1023 * месяц, и это первая проблема, на которую я не смог найти ответ!

Я создаю Python скрипт, который имеет сканер IP как часть своей функциональности. Он ищет хосты в сегменте локальной сети с открытым портом Te lnet (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))

Я знаю, что он грубый и не учитывает, на каком компьютере su bnet находится сканирование, но я удалил его, чтобы попытаться устранить неполадки.

Проблема в том, что мне возвращают только список из одного элемента.

['192.168.1.2']

В сети должно быть 5 устройств с открытыми портами Te lnet, но я могу получить только этот скрипт для возврата одного устройства. Требуемый вывод:

['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...]

, как следует.

В будущем я намерен реализовать поточная обработка для снижения производительности и средства сценария, определяющие, в каком су bnet оно находится, и от того, что нужно сканировать.

1 Ответ

1 голос
/ 16 апреля 2020

Вы возвращаете свой список, как только найдете хост, который отвечает:

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

Вместо этого вы хотите, чтобы l oop завершил работу перед возвратом:

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

Таким образом, ваш список может быть полностью заполнен до его возвращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...