Python 端口掃描(全連接掃描,多線程)
阿新 • • 發佈:2018-03-31
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模塊,然後 程序開始運行的時間 減去 程序結束運行的時間 最後輸出時間的差。
Python 端口掃描(全連接掃描,多線程)