Проблема с проверкой нескольких IP-адресов в сокете Python из CSV

#python #sockets

#python #сокеты

Вопрос:

Я пытаюсь создать скрипт, который будет сканировать все мои серверы и сообщит мне, может ли он сканировать этот сервер или нет.

В настоящее время я использую библиотеки csv и socket для достижения этой цели.

Проблема, с которой я сталкиваюсь, заключается в том, что при запуске этого он работает нормально для первых 5 IP-адресов в моем списке, но как только он успешно сканирует один из моих серверов и сообщает о нем как о запущенном, он мгновенно заполняет остальные журналы с помощью моего оператора печати «Хост» недоступен.

И выдает мне WinError 10056 для недоступных IP-адресов и сообщает об ошибке WinError 10061 для всех записей после успешного сканирования и сообщает о первом доступном IP-адресе как ip. Я знаю, что другие IP-адреса запущены и должны отображаться как up, я могу сканировать их по отдельности, используя этот же скрипт без проблем.

Любые предложения будут с благодарностью приняты.

Пример того, что хотел бы мой csv:

 Servers         Port
192.168.1.200   12334
192.168.1.201   43222
192.168.1.202   24
192.168.1.203   5
192.168.1.204   8080
192.168.1.205   445
192.168.1.206   5
192.168.1.207   5
192.168.1.218   443
192.168.1.219   80
192.168.1.220   8834
192.168.1.221   80

  
 import csv
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


def portScanner():
    with open('IPAddress.csv') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:

            Host = str(row['Servers'])
            Port = int(row['Port'])
            Scan = sock.connect_ex((Host, Port))
            sock.settimeout(int(30))

            if Scan:
                print(f"Scanning Complete: {Host} is Offline or Port {Port} is unreachable.")
                print("DEBUG: "   str(Scan))
            else:
                print(f"Scanning Complete: {Host} is reachable on Port {Port}.")
                print("DEBUG: "   str(Scan))


portScanner()
  

Комментарии:

1. Не изобретайте велосипед, используйте вместо этого nmap

2. Может быть, речь идет о попытке открыть новое соединение с тем же сокетом после того, как вы уже использовали его для подключения других хостов? В этом случае закрытие его с помощью mysocket.close () должно помочь.

3. Наряду с другими предложениями в комментариях попробуйте добавить задержку между каждым запросом, поскольку возможно, что ваш маршрутизатор / прокси мог заблокировать дальнейшие подключения из-за частых запросов на подключение, чтобы предотвратить DDoS-атаку.