Python的端口扫描器与线程

问题描述:

我想在Python中创建一个端口扫描器。我得到了扫描仪,但它需要四十五分钟才能打印结果。我开始实行线程,但是我无法弄清楚如何把不同的范围到脚本。我开始创建一个全局变量,并尝试在每个线程中传递它。不幸的是,它不能正常工作,我得到一个无效的语法错误。以下是代码。Python的端口扫描器与线程

import socket 
import os 
import sys 
from threading import Thread 

server = raw_input("Please enter a server name ") 

def portConnect(): 

    global num 

    try: 
     serv_ip = socket.gethostbyname(server) # connects to server through try 
     print "Please wait, scanning remote host", serv_ip 

     for port in range(num): 
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
      connect = sock.connect_ex((serv_ip, port)) 
      if connect == 0: 
       print "Port {}: Open".format(port) 
     sock.close() 

    except socket.gaierror: 
     print """ 
     I can't find that server, idiot! Try again 
     """ 
     sys.exit()   

for i in range(1): 
    t = Thread(target=portConnect,(num=100)) 
    t.start() 

我在做什么错?

+0

看看在多页https://docs.python.org/2/library/multiprocessing.html,特别是在'Pool'和'Process'这可能是最合适的你的情况。 – sal

螺纹预计args=的元组,并将其发送它作为参数传递给函数

这样,你发送100作为第一个参数(num)到portConnect()

def portConnect(num): 
    print(num) 
    # code 

t = Thread(target=portConnect, args=(100,)) 

要发送范围,你需要两个参数

def portConnect(from_, to_): 
    print(from_, to_) 
    for port in range(from_, to_): 
     # ... 

size = 20 
for i in range(1, 100, size): 
    t = Thread(target=portConnect, args=(i, i+size)) 
    t.start() 

BTW:模块scapy让所以它被用于端口扫描,嗅探你发送一个数据包,等等

您可以用专用工具做的更像nmap(GUI包装:Zenmap)或Kali Linux

你可以尝试在Python中使用nmappython-nmap : nmap from python

+0

这帮助很大,非常感谢! – George

就可以解决这个真的很容易使用的nmap。

nmap -p- <some_host>

+0

是的,我可以不过我想创建自己的端口扫描器。 – George