国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用Python編寫一個高效的端口掃描器的方法

2020-02-16 00:14:39
字體:
來源:轉載
供稿:網友

PyPortScanner

python多線程端口掃描器。

輸出示例:

Github

此端口掃描器的源碼,文檔及詳細調用方法見Github PythonPortScanner by Yaokai。

背景

有時候,在進行網絡相關的研究的時候,我們需要執行一些有目的的參數測量。而端口掃描就是其中比較普遍也比較重要的一項。所謂的端口掃描,就是指通過TCP握手或者別的方式來判別一個給定主機上的某些端口是否處理開放,或者說監聽的狀態。現有的使用比較廣泛的端口掃描工具是nmap。毋庸置疑,nmap是一款非常強大且易于使用的軟件。但nmap是一款運行于terminal中的軟件,有時在別的代碼中調用并不是很方便,甚至沒有相應的庫。另外,nmap依賴的其他庫較多,在較老的系統中可能無法使用較新的nmap,這樣會造成掃描的不便。另外,nmap在掃描時需要root權限。基于這個原因,我用python2.7自帶的庫開發了一款高效的多線程端口掃描器來滿足使用需要。

具體實現

I. 利用TCP握手連接掃描一個給定的(ip,port)地址對

為了實現端口掃描,我們首先明白如何使用python socket與給定的(ip, port)進行TCP握手。為了完成TCP握手,我們需要先初始化一個TCP socket。在python中新建一個TCP socket的代碼如下:

TCP_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #(1)TCP_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) #(2)TCP_sock.settimeout(delay) #(3)

其中(1)是初始化socket的代碼,socket.AF_INTE參數表示IPv4 socketsocket.SOCK_STREAM參數表示TCP socket。這樣我們就初始化了一個使用IPv4,TCP協議的socket。

(2)使用了socket.setsockopt()來設置socket的另一些參數。socket.SOL_SOCKET指定當前socket將使用setsockopt()中后面的參數。socket.SO_REUSEPORT表明當前socket使用了可復用端口的設置。socket.SO_REUSEPORT具體含義可以參考我的另一篇文章。

(3)將socket的連接超時時間設置為delay變量所對應的時間(以秒為單位)。這么做是為了防止我們在一個連接上等待太久。
了解了如何新建一個socket,我們就可以開始對給定的(ip,port)對進行TCP連接。代碼如下:

try:  result = TCP_sock.connect_ex((ip, int(port_number)))  # If the TCP handshake is successful, the port is OPEN. Otherwise it is CLOSE  if result == 0:    output[port_number] = 'OPEN'  else:    output[port_number] = 'CLOSE'    TCP_sock.close()except socket.error as e:  output[port_number] = 'CLOSE'  pass
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新竹县| 潼关县| 兖州市| 黎城县| 广州市| 金湖县| 太原市| 昭通市| 宿迁市| 庄浪县| 锡林郭勒盟| 安阳市| 永德县| 临江市| 高邑县| 綦江县| 万山特区| 临漳县| 石泉县| 宜州市| 常宁市| 高雄市| 福泉市| 济宁市| 噶尔县| 孝昌县| 黄浦区| 长宁县| 抚州市| 渭源县| 农安县| 喜德县| 临汾市| 南丹县| 武功县| 工布江达县| 米泉市| 凤山县| 铁岭县| 邳州市| 偃师市|