這期內容當中小編將會給大家帶來有關利用python怎么實現一個多線程端口掃描功能,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
需求:掃描目標網站開放哪些端口號,將所有開放的端口號輸出。
分析:使用socket連接,如果連接成功,認為端口開放,如果連接失敗,認為端口關閉(有可能端口開放但連接失敗,這里簡單認為端口不開放)
使用到的庫:socket, threading
過程:
先定義一個函數,對給定的(ip, port)進行掃描,看其是否能連接成功。
def tcpPortScan(ip, port, openPort): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創建套接字 sock.settimeout(0.1) # 設置延時時間 try: result = sock.connect_ex((ip, port)) if result == 0: # 如果連接成功,返回值為0 openPort.append(port) # 如果端口開放,就把端口port賦給openPort except: pass sock.close() # 關閉套接字
當需要掃描目標地址的多個端口時,循環使用上述函數的話,掃描速度會極其慢,因為考慮使用多線程。
再定義一個函數,實現多線程掃描。
def threadingPortScan(host, portList, openPorts = []): hostIP = socket.gethostbyname(host) # 獲取域名對應的IP地址 nloops = range(len(portList)) threads = [] for i in nloops: t = threading.Thread(target=tcpPortScan, args=(hostIP, portList[i], openPorts)) threads.append(t) for i in nloops: threads[i].start() for i in nloops: threads[i].join() return openPorts # 返回值為該域名下開放的端口列表
完整代碼如下:
# -*- coding:utf-8 -*- ''' 使用多線程,檢測一個目標地址的端口開放情況,目標地址由用戶輸入,端口暫時定義為0~1024, 檢測TCP連接是否成功,如果連接成功,則端口開放,不成功則端口關閉 ''' import socket import threading def main(): host = input('please input domain:') portList = range(0, 1025) openPorts = threadingPortScan(host, portList) print(host,'open ports:', openPorts) # 對給定的(ip, port)進行TCP連接掃描 def tcpPortScan(ip, port, openPort): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創建套接字 sock.settimeout(0.1) # 設置延時時間 try: result = sock.connect_ex((ip, port)) if result == 0: openPort.append(port) # 如果端口開放,就把端口port賦給openPort except: pass sock.close() # 關閉套接字 def threadingPortScan(host, portList, openPorts = []): hostIP = socket.gethostbyname(host) # 獲取域名對應的IP地址 nloops = range(len(portList)) threads = [] for i in nloops: t = threading.Thread(target=tcpPortScan, args=(hostIP, portList[i], openPorts)) threads.append(t) for i in nloops: threads[i].start() for i in nloops: threads[i].join() return openPorts # 返回值為該域名下開放的端口列表 if __name__ == '__main__': main()
使用www.qq.com做一個測試,測試結果如下:
>>>please input domain: www.qq.com www.qq.com open ports: [80, 843]
上述就是小編為大家分享的利用python怎么實現一個多線程端口掃描功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。