Python 端口掃描(全鏈接掃描,多線程)

from socket import *
import threading      #導入線程相關模塊

lock = threading.Lock()
openNum = 0
threads = []              #定義線程列表

def portScanner(host,port):
    global openNum
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((host,port))
        lock.acquire()        #由於openNum是個全局變量,每一個線程不能對openNum 同時操做,只有得到所的線程才能夠操做 openNum
        openNum+=1
        print('[+] %d open' % port)
        lock.release()        #線程對全局變量openNum操做完成後,須要釋放所,其餘線程才能夠繼續修改全局變量openNum
        s.close()
    except:                     #若是端口沒開,那麼就直接pass,不執行其餘輸出操做。
        pass

def main():
    setdefaulttimeout(1)
    ports = [20, 21, 22, 23, 80, 111, 3306]     #定義要掃描的端口,也能夠在for中使用range進行定義,看我的需求,例如 for p in range(1,1024): 
    for p in ports:
        t = threading.Thread(target=portScanner,args=('192.168.60.130',p))
        threads.append(t)
        t.start()

    for t in threads:        #等待線程列表中的因此線程的執行完畢
        t.join()

    print('[*] The scan is complete!')
    print('[*] A total of %d open port' % (openNum))

if __name__ == '__main__':
    main()

若是要計算掃描了多久的話,能夠導入time模塊,而後 程序開始運行的時間 減去 程序結束運行的時間 最後輸出時間的差。app

相關文章
相關標籤/搜索