Проблема с открытием многопоточных сеансов с IP-адресами - PullRequest
0 голосов
/ 05 августа 2020

Я хочу написать сценарий для сканирования su bnet, взять список IP-адресов и открыть многопоточные сеансы для одновременного сканирования ВСЕХ этих IP-адресов на наличие открытых портов:

import socket
import subprocess
import sys
import threading

from netaddr import IPNetwork
from datetime import datetime


List_IP = ['33.45.48.0','33.45.48.1' ]


def subnet_port_scan(subnet):
 
   remoteServerIP = socket.gethostbyname(subnet)

   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   result = sock.connect_ex((subnet, 22))

   if result == 0:
       print ("Port 22 is Open", subnet)
       sock.close()
   else: 
       print ("Port 22 is Closed", subnet)
       sock.close()


for function in List_IP:
   my_thread = threading.Thread(target=subnet_port_scan,args=List_IP)

   my_thread.start()

   print("Session")


my_thread.join()

Прямо сейчас, если я используйте более 1 аргумента в List_IP, он показывает мне ошибку:

TypeError: subnet_port_scan() takes 1 positional argument but 2 were given

Мне нужно иметь возможность использовать 10-100 IP-адресов и открывать сеансы со всеми, если они одновременно, но я не понимаю, как сделать это. Пожалуйста, посмотрите и дайте мне знать, что мне не хватает.

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Найдено решение:

для функции в List_IP: my_thread = threading.Thread (target = subnet_port_scan, args = (function,)) my_thread.start ()

Не указаны правильные аргументы .

0 голосов
/ 05 августа 2020

Да, вы передаете каждую переменную в списке в качестве аргумента, или 2 аргумента. Вы можете добавить каждый поток в список, запустить их все, а затем присоединиться ко всем, как я обычно использую многопроцессорность. Попробуйте что-то вроде этого, чтобы понять, как это может работать -

import threading

print('start')
List_IP = ['33.45.48.0','33.45.48.1' ]
threads = []

def subnet_port_scan(subnet):
  print("thread called: ", subnet)

for x in List_IP:
  my_thread = threading.Thread(target=subnet_port_scan, args=(x,))
  threads.append(my_thread)

for y in threads:
  print('starting', y)
  y.start()

for z in threads:
  print('joining ', z)
  z.join()

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