2016-11-16 141 views
0

我想在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

回答

1

螺紋預計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

0

就可以解決這個真的很容易使用的nmap。

nmap -p- <some_host>

+0

是的,我可以不過我想創建自己的端口掃描器。 – George