用Python實現一個埠掃描,只需簡單幾步就好

来源:https://www.cnblogs.com/python960410445/archive/2018/12/29/10198199.html
-Advertisement-
Play Games

一、常見埠掃描的原理 0、秘密掃描 秘密掃描是一種不被審計工具所檢測的掃描技術。 它通常用於在通過普通的防火牆或路由器的篩選(filtering)時隱藏自己。 秘密掃描能躲避IDS、防火牆、包過濾器和日誌審計,從而獲取目標埠的開放或關閉的信息。由於沒有包含TCP 3次握手協議的任何部分,所以無法 ...


一、常見埠掃描的原理

0、秘密掃描

秘密掃描是一種不被審計工具所檢測的掃描技術。

它通常用於在通過普通的防火牆或路由器的篩選(filtering)時隱藏自己。

秘密掃描能躲避IDS、防火牆、包過濾器和日誌審計,從而獲取目標埠的開放或關閉的信息。由於沒有包含TCP 3次握手協議的任何部分,所以無法被記錄下來,比半連接掃描更為隱蔽。

但是這種掃描的缺點是掃描結果的不可靠性會增加,而且掃描主機也需要自己構造IP包。現有的秘密掃描有TCP FIN掃描、TCP ACK掃描、NULL掃描、XMAS掃描和SYN/ACK掃描等。

用Python實現一個埠掃描,只需簡單幾步就好

 

1、Connect()掃描

此掃描試圖與每一個TCP埠進行“三次握手”通信。如果能夠成功建立接連,則證明埠開發,否則為關閉。準確度很高,但是最容易被防火牆和IDS檢測到,並且在目標主機的日誌中會記錄大量的連接請求以及錯誤信息。

TCP connect埠掃描服務端與客戶端建立連接成功(目標埠開放)的過程:

① Client端發送SYN;

② Server端返回SYN/ACK,表明埠開放;

③ Client端返回ACK,表明連接已建立;

④ Client端主動斷開連接。

建立連接成功(目標埠開放)

TCP connect埠掃描服務端與客戶端未建立連接成功(目標埠關閉)過程:

① Client端發送SYN;

② Server端返回RST/ACK,表明埠未開放。

優點:實現簡單,對操作者的許可權沒有嚴格要求(有些類型的埠掃描需要操作者具有root許可權),系統中的任何用戶都有權力使用這個調用,而且如果想要得到從目標埠返回banners信息,也只能採用這一方法。

另一優點是掃描速度快。如果對每個目標埠以線性的方式,使用單獨的connect()調用,可以通過同時打開多個套接字,從而加速掃描。

缺點:是會在目標主機的日誌記錄中留下痕跡,易被髮現,並且數據包會被過濾掉。目標主機的logs文件會顯示一連串的連接和連接出錯的服務信息,並且能很快地使它關閉。

2、SYN掃描

掃描器向目標主機的一個埠發送請求連接的SYN包,掃描器在收到SYN/ACK後,不是發送的ACK應答而是發送RST包請求斷開連接。這樣,三次握手就沒有完成,無法建立正常的TCP連接,因此,這次掃描就不會被記錄到系統日誌中。這種掃描技術一般不會在目標主機上留下掃描痕跡。但是,這種掃描需要有root許可權。

埠開放:1、Client發送SYN 2、Server端發送SYN/ACK 3、Client發送RST斷開(只需要前兩步就可以判斷埠開放)

埠關閉:1、Client發送SYN 2、Server端回覆RST(表示埠關閉)

優點:SYN掃描要比TCP Connect()掃描隱蔽一些,SYN僅僅需要發送初始的SYN數據包給目標主機,如果埠開放,則相應SYN-ACK數據包;如果關閉,則響應RST數據包;

3、NULL掃描

反向掃描—-原理是將一個沒有設置任何標誌位的數據包發送給TCP埠,在正常的通信中至少要設置一個標誌位,根據FRC 793的要求,在埠關閉的情況下,若收到一個沒有設置標誌位的數據欄位,那麼主機應該捨棄這個分段,併發送一個RST數據包,否則不會響應發起掃描的客戶端電腦。也就是說,如果TCP埠處於關閉則響應一個RST數據包,若處於開放則無相應。但是應該知道理由NULL掃描要求所有的主機都符合RFC 793規定,但是windows系統主機不遵從RFC 793標準,且只要收到沒有設置任何標誌位的數據包時,不管埠是處於開放還是關閉都響應一個RST數據包。但是基於Unix(*nix,如Linux)遵從RFC 793標準,所以可以用NULL掃描。 經過上面的分析,我們知道NULL可以辨別某台主機運行的操作系統是什麼操作系統。

  • 埠開放:Client發送Null,server沒有響應
  • 埠關閉:1、Client發送NUll 2、Server回覆RST

說明:Null掃描和前面的TCP Connect()和SYN的判斷條件正好相反。在前兩種掃描中,有響應數據包的表示埠開放,但在NUll掃描中,收到響應數據包表示埠關閉。反向掃描比前兩種隱蔽性高些,當精確度也相對低一些。

用途:判斷是否為Windows系統還是Linux。

4、FIN掃描

與NULL有點類似,只是FIN為指示TCP會話結束,在FIN掃描中一個設置了FIN位的數據包被髮送後,若響應RST數據包,則表示埠關閉,沒有響應則表示開放。此類掃描同樣不能準確判斷windows系統上埠開發情況。

  • 埠開放:發送FIN,沒有響應
  • 埠關閉:1、發送FIN 2、回覆RST

5、ACK掃描

掃描主機向目標主機發送ACK數據包。根據返回的RST數據包有兩種方法可以得到埠的信息。方法一是: 若返回的RST數據包的TTL值小於或等於64,則埠開放,反之埠關閉。

6、Xmas-Tree掃描

通過發送帶有下列標誌位的tcp數據包。

  • URG:指示數據時緊急數據,應立即處理。
  • PSH:強制將數據壓入緩衝區。
  • FIN:在結束TCP會話時使用。

正常情況下,三個標誌位不能被同時設置,但在此種掃描中可以用來判斷哪些埠關閉還是開放,與上面的反向掃描情況相同,依然不能判斷windows平臺上的埠。

  • 埠開放:發送URG/PSH/FIN,沒有響應
  • 埠關閉:1、發送URG/PSH/FIN,沒有響應 2、響應RST

XMAS掃描原理和NULL掃描的類似,將TCP數據包中的ACK、FIN、RST、SYN、URG、PSH標誌位置1後發送給目標主機。在目標埠開放的情況下,目標主機將不返回任何信息。

7、Dump掃描

也被稱為Idle掃描或反向掃描,在掃描主機時應用了第三方僵屍電腦掃描。由僵屍主機向目標主機發送SYN包。目標主機埠開發時回應SYN|ACK,關閉時返回RST,僵屍主機對SYN|ACK回應RST,對RST不做回應。從僵屍主機上進行掃描時,進行的是一個從本地電腦到僵屍主機的、連續的ping操作。查看僵屍主機返回的Echo響應的ID欄位,能確定目標主機上哪些埠是開放的還是關閉的。

二、Python 代碼實現

1、利用Python的Socket包中的connect方法,直接對目標IP和埠進行連接並且嘗試返回結果,而無需自己構建SYN包。

用Python實現一個埠掃描,只需簡單幾步就好

 

用Python實現一個埠掃描,只需簡單幾步就好

 

2、對IP埠進行多線程掃描,註意的是不同的電腦不同的CPU每次最多創建的線程是不一樣的,如果創建過多可能會報錯,需要根據自己電腦情況修改每次掃描的個數或者將seelp的時間加長都可以。

用Python實現一個埠掃描,只需簡單幾步就好

 

用Python實現一個埠掃描,只需簡單幾步就好

 

看完了嗎?感覺動手操作一下把!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:my ...
  • 行為類模式包括: 行為型模式涉及到演算法和對象間職責的分配 行為類模式關註如何管理對象的行為. 命令模式VS策略模式 策略模式和命令模式相似, 特別是命令模式退化時,比如無接收者(接收者非常簡單或者接收者是Java的基礎操作,無需專門寫一個接收者), 這種情況下, 命令模式和策略模式的類圖完全一樣. ...
  • 規格模式 規格模式 使用了策略模式,組合模式. 只不過將模式具體化了 規格模式將 與或非 操作進行了封裝, 實現了類似 SQL查詢語句的操作. 類圖如下: 其中的角色如下: 抽象規格書代碼: 組合規格書代碼: 與或非規格書代碼: 業務規格書: 場景類: 規格模式已經是一個非常具體的應用框架了, 遇到 ...
  • 資料庫的讀寫操作中,事務在保證數據的安全性和一致性方面起著關鍵的作用,而回滾正是這裡面的核心操作。Django的ORM在事務方面也提供了不少的API。有事務出錯的整體回滾操作,也有基於保存點的部分回滾。本文將討論Django中的這兩種機制的運行原理。 Django利用django.db.transa ...
  • 繼承與多態 引用有的時候並不能達到多態的效果 問題:c++ primer 第五版說,只有指針和引用調用虛函數時才會發生動態綁定(多態)。實踐一下,發現引用有的時候不能發生多態綁定(多態)。 下麵的例子,父類是Quote,在Quote里定義了一個虛函數debug,用來列印出各自成員的值。2個子類Bul ...
  • 寫這篇博客其實主要算是一個筆記,當然也是為了希望幫助更多使用git的新手 1、首先,你需要在本地安裝git客戶端,此處網上教程較多,不在贅述 2、假設本地項目路徑為: E:\gitWorkspace\spring-framework-5.1.2.RELEASE 3、創建本地git倉庫 進入到 spr ...
  • 讀入 n(>0)名學生的姓名、學號、成績,分別輸出成績最高和成績最低學生的姓名和學號。 輸入格式: 每個測試輸入包含 1 個測試用例,格式為 其中姓名和學號均為不超過 10 個字元的字元串,成績為 0 到 100 之間的一個整數,這裡保證在一組測試用例中沒有兩個學生的成績是相同的。 輸出格式: 對每 ...
  • 基礎:函數裝飾器的表現方式 假如你已經定義了一個函數funcA(),在準備定義函數funcB()的時候,如果寫成下麵的格式: 表示用函數funcA()裝飾函數funcB()。當然,也可以認為是funcA包裝函數funcB。它等價於: 也就是說,將函數funcB作為函數funcA的參數,funcA會重 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...