如何编写这个简单的扫描仪

时间:2015-07-13 16:03:32

标签: python multithreading port

我需要在Python上使用端口扫描程序提供一些帮助。我必须学习如何将threading模块添加到它,但没有任何线索,并且不太了解我找到的一些教程和帮助。这是一个小测试脚本:

from socket import *

remote = raw_input ("Website: ")
remote_ip = gethostbyname(remote)

print "scaning at:",remote_ip
for i in range (20,100):
    s = socket(AF_INET,SOCK_STREAM)
    result = s.connect_ex((remote,i))
    if result == 0):
        print "port %d: open"%(i)
    s.close

1 个答案:

答案 0 :(得分:0)

如下所示。您将每个函数强制转换为一个单独的线程并将其踢掉。您还保留对每个线程的引用,以便您可以阻止主线程,直到它们全部执行完毕。你还需要一个锁,因为Python中的“print”不是线程安全的,否则你最终会得到每个线程的输出(否则你可以使用记录器,而不是线程安全和整洁)。这也会产生很多线程,因为我甚至没有打算向你展示池。这只是一个粗略的准备好的例子,让您开始在Python中发现多线程。

print_lock = Lock()


def socket_test(address, port):
    s = socket(AF_INET,SOCK_STREAM)
    result = s.connect_ex((address,port))
    if result == 0:
        with print_lock:
            print "port %s: open" % port
    s.close()


def main():
    remote = raw_input("Website: ")
    remote_ip = gethostbyname(remote)
    print "scaning at:",remote_ip
    threads = []
    for i in range(20, 100):
        new_thread = threading.Thread(socket_test(remote_ip, i))
        new_thread.start()
        threads.append(new_thread)

    [this_thread.join() for this_thread in threads]