python 다중 스레드 스캐닝 포트 (스토리지 풀)

3501 단어 python
서버 ip 오픈 포트를 스캔하고 스레드 탱크ThreadPoolExecutor, i7의 cpu는 600개 안팎으로 실행할 수 있으며 20s 안팎으로 65535개의 포트를 스캔하여 컴퓨터 설정에 따라 스레드 수를 적당히 낮출 수 있다
#!/usr/local/python3.6.3/bin/python3.6
# coding = utf-8

import socket
import datetime
import re
from concurrent.futures import ThreadPoolExecutor, wait

DEBUG = False

#  ip 
def check_ip(ipAddr):
    compile_ip = re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
    if compile_ip.match(ipAddr):
        return True
    else:
        return False

#  
def portscan(ip, port):
    try:
        s = socket.socket()
        s.settimeout(0.2)
        s.connect((ip, port))
        openstr = f'[+] {ip} port:{port} open'
        print(openstr)
    except Exception as e:
        if DEBUG is True:
            print(ip + str(port) + str(e))
        else:
            return f'[+] {ip} port:{port} error'
    finally:
        s.close

# , ThreadPoolExecutor 600 
def main():
    while True:
        ip = input(" ip :")
        if check_ip(ip):
            start_time = datetime.datetime.now()
            executor = ThreadPoolExecutor(max_workers=600)
            t = [executor.submit(portscan, ip, n) for n in range(1, 65536)]
            if wait(t, return_when='ALL_COMPLETED'):
                end_time = datetime.datetime.now()
                print(" , :", (end_time - start_time).seconds)
                break


if __name__ == '__main__':
    main()

좋은 웹페이지 즐겨찾기