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

2022-06-18 03:54:08 字數 2792 閱讀 8380

0、秘密掃瞄

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

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

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

但是這種掃瞄的缺點是掃瞄結果的不可靠性會增加,而且掃瞄主機也需要自己構造ip包。現有的秘密掃瞄有tcp fin掃瞄、tcp ack掃瞄、null掃瞄、xmas掃瞄和syn/ack掃瞄等。

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可以辨別某台主機執行的作業系統是什麼作業系統。

說明:null掃瞄和前面的tcp connect()和syn的判斷條件正好相反。在前兩種掃瞄中,有響應資料報的表示埠開放,但在null掃瞄中,收到響應資料報表示埠關閉。反向掃瞄比前兩種隱蔽性高些,當精確度也相對低一些。

用途:判斷是否為windows系統還是linux。

4、fin掃瞄

與null有點類似,只是fin為指示tcp會話結束,在fin掃瞄中乙個設定了fin位的資料報被傳送後,若響應rst資料報,則表示埠關閉,沒有響應則表示開放。此類掃瞄同樣不能準確判斷windows系統上埠開發情況。

5、ack掃瞄

掃瞄主機向目標主機傳送ack資料報。根據返回的rst資料報有兩種方法可以得到埠的資訊。方法一是: 若返回的rst資料報的ttl值小於或等於64,則埠開放,反之埠關閉。

6、xmas-tree掃瞄

通過傳送帶有下列標誌位的tcp資料報。

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

xmas掃瞄原理和null掃瞄的類似,將tcp資料報中的ack、fin、rst、syn、urg、psh標誌位置1後傳送給目標主機。在目標埠開放的情況下,目標主機將不返回任何資訊。

7、dump掃瞄

也被稱為idle掃瞄或反向掃瞄,在掃瞄主機時應用了第三方殭屍計算機掃瞄。由殭屍主機向目標主機傳送syn包。目標主機埠開發時回應syn|ack,關閉時返回rst,殭屍主機對syn|ack回應rst,對rst不做回應。從殭屍主機上進行掃瞄時,進行的是乙個從本地計算機到殭屍主機的、連續的ping操作。檢視殭屍主機返回的echo響應的id欄位,能確定目標主機上哪些埠是開放的還是關閉的。

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

2、對ip埠進行多執行緒掃瞄,注意的是不同的電腦不同的cpu每次最多建立的執行緒是不一樣的,如果建立過多可能會報錯,需要根據自己電腦情況修改每次掃瞄的個數或者將seelp的時間加長都可以。

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

用python實現乙個埠掃瞄器

最簡單的埠掃瞄工具使用tcp連線掃瞄的方式,即利用作業系統原生的網路功能,且通常作為syn掃瞄的替代選項。nmap將這種模式稱為連線掃瞄,因為使用了類似unix系統的connect 命令。如果該埠是開放的,作業系統就能完成tcp三次握手,然後埠掃瞄工具會立即關閉剛建立的該連線,防止拒絕服務攻擊。us...

python實現埠掃瞄

一 import socket import multiprocessing def ports ports service 獲取常用埠對應的服務名稱 for port in list range 1,100 143,145,113,443,445,3389,8080 try ports servi...

用JAVA實現乙個簡單的埠掃瞄功能

思路,使用socket物件的connect方法,輸入準備掃瞄的主機名和埠號,根據方法執行階段是否丟擲異常來判斷該埠能否正確訪問,具體 如下 param domain 主機網域名稱或者ip param startport 開始埠 param endport 結束埠 private static voi...