首页 > 解决方案 > 线程端口扫描器python

问题描述

import socket
import threading
from Queue import *

print_lock = threading.Lock()
serverIp = socket.gethostbyname('www.google.com')

def pscan(port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((serverIp, port))
        with print_lock:
            print('Port %d is open' %(port))
        s.close()
    except:
        pass

def threader():
    while True:
        worker = q.get()
        pscan(worker)
        q.task_done()

q = Queue()

for x in range(30):
    t = threading.Thread(serverIp = threading)
    t.daemon = True
    t.start()

for worker in range(1, 101):
    q.put(worker)

q.join()

我正在尝试在 PyCharm 中对端口扫描器进行线程化,但是我不断收到的错误是serverIp行上的意外关键字参数t = threading.Thread(serverIp = threading)

这是什么亵渎??

标签: multithreadingpython-2.7network-programming

解决方案


你试图让它变得太复杂。这是一个更清晰的版本,它适用于 Pycharm。(学分 JackalDev)

import socket
import threading
import concurrent.futures
import colorama
from colorama import Fore

colorama.init()

print_lock = threading.Lock()

ip = input(Fore.BLUE + "Enter the IP to scan: ")

def scan(ip, port):
    scanner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    scanner.settimeout(1)
    try:
        scanner.connect((ip, port))
        scanner.close()
        with print_lock:
            print(Fore.BLUE + f"[{port}]" + Fore.GREEN + " Opened")
    except:
        pass

with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
    for port in range(1000):
        executor.submit(scan, ip, port + 1)

推荐阅读