網絡踩點一一基於Python的端口掃描
- 2020 年 3 月 8 日
- 筆記
文章來自【位元組脈搏社區】 作者-Jadore

在探測一個區域的網絡布局時,端口掃描是黑客經常使用的一種輔助攻擊手段,掃描主機端口並不能直接對主機直接造成危害,但是可以獲取到主機的一些信息,藉此來對目標主機進行分析,為進一步入侵做好準備。
我們都知道,TCP是面向連接的協議,建立TCP連接的時候必然會發生三次握手,C、Python等語言提供了套接字的應用編程接口,我們可以創建、綁定、監聽、連接或在套接字上發送數據,因此可以利用其來編寫端口掃描器。(大部分互聯網應用使用的都是TCP協議,如HTTP在TCP80端口上,SMTP在TCP25端口上等等)
這裡說說TCP掃描的幾種類型:
TCP SYN掃描一一也稱為半開放掃描,請求服務的一方會發送一個SYN數據包,如果提供服務的一方在接收到這個數據包之後,若端口開放則會回復一個[SYN|ACK]包,否則返回一個RST數據包,而在服務端回復之後,客戶端直接發送RST包,直接重置掉連接,此時並沒有連接建立,因此稱為「半開放掃描」。

端口開啟:

端口關閉:


TCP ACK掃描一一請求服務的一方發送一個只有ACK標誌的TCP數據包後,無論端口開啟與否,服務端只返回RST包,這種掃描方式可用來檢測端口是否被過濾。

端口開啟:

端口關閉:


TCP FIN掃描一一請求服務的一方發送一個FIN=1的數據包,如果服務端對應的端口關閉則回復一個RST數據包,如果開啟則不回復,這種掃描方式大多用於判斷操作類型。



此外還有很多種掃描方式,對應於不同的網絡環境,選擇不同的掃描方式,往往會達到比較理想的效果。

以Python為例:
Scan函數引入IP和端口通過套接字進行連接並打印相關信息,在函數中通過發送一個數據串從而獲取到使用對應端口的服務回應的banner

portScan函數引入IP地址並調用Scan函數遍歷指定的端口號

main函數強調使用的相關規則並調用portScan函數

考慮到要掃描的端口數量較多,時間總量會成倍數增加,這時可以利用多線程,修改portScan中的for循環部分,代碼如下:

通過上面的代碼,掃描速度會明顯增加,但是隨之而來的問題是,線程同時打印的時候會出現亂序失序的問題,因此使用一個屏幕控制權的信號量對輸出進行控制,代碼如下:

最終代碼:





掃描速度確實相當快,在range函數中,我們可以指定掃描範圍:
例如:range(1,100)->range(400,1000)
來看看底層,典型的三次握手



在[PSH,ACK]字段中可以看到我們通過套接字發送的數據:



重要通知
公眾號招募文章投稿小夥伴啦!只要你有技術有想法要分享給更多的朋友,就可以參與到我們的投稿計劃當中哦~感興趣的朋友公眾號首頁菜單欄點擊【商務合作-我要投稿】即可。期待大家的參與~


