Go埠掃瞄器

2021-10-12 17:56:21 字數 4028 閱讀 5043

這次呢, 咱們來實現乙個簡單的tcp埠掃瞄器!

也來體驗一下黑客的風采!

我們在使用tcp進行連線時,需要知道對方機器ip:port

連線成功的話,流程如下。

有正常,就有失敗,如果被連線方關閉的話,流程如下。

還有一種可能是,埠開放,但是**防火牆攔截,**流程如下。

本質理解之後,就可以開始擼**了。

在go中,我們通常使用net.dial進行tcp連線

它就兩種情況

相對來說,剛開始時,我們可能都不是太膽大,都是先寫原型,也不考慮效能。

**

package main

import

("fmt"

"net"

)func

main()

conn.

close()

fmt.

println

(address,

"開啟")}

}

執行結果

但是這個過程是非常緩慢的。

因為net.dial如果連線的是未開放的埠,乙個埠可能就是20s+,所以,我們為什麼學習多執行緒懂了把!!!

上述是通過迴圈去乙個個連線ip:port的,那我們就知道了,在乙個個連線的位置,讓多個人去幹就好了。

所以,多執行緒如下。

**

package main

import

("fmt"

"net"

"sync"

"time"

)func

main()

conn.

close()

fmt.

println

(address,

"開啟")}

(j)}

//等待wg

wg.wait()

var elapsetime = time.

now().

sub(begin)

fmt.

println

("耗時:"

, elapsetime)

}

執行結果

其實是同時開啟了6w多個執行緒,去掃瞄每個ip:port

所以耗時最長的執行緒結束的時間,就是程式結束的時間。

感覺還行,20s+掃瞄完6w多個埠!!!

上面我們簡單粗暴的方式為每個ip:port都建立了乙個協程。

雖然在go中,理論上協程開個幾十萬個都沒問題,但是還是有一些壓力的。

所以我們應該採用一種相對節約的方式進行精簡**,一般採用執行緒池方式。

本次使用的執行緒池包:gohive

簡單介紹

//執行緒池方式

//位址管道,100容量

var addresschan =

make

(chan

string

,100

)//工人

func

worker()

"address:", address)

conn, err := net.

dial

("tcp"

, address)

//conn, err := net.dialtimeout("tcp", address, 10)

if err !=

nil conn.

close()

fmt.

println

("open:"

, address)}}

func

main()

//傳送完關閉 addresschan 管道

close

(addresschan)}(

)//啟動pool_size工人,處理addresschan種的每個位址

for work :=

0; work < pool_size; work++

//等待結束

wg.wait()

//計算時間

var elapsetime = time.

now().

sub(begin)

fmt.

println

("耗時:"

, elapsetime)

}執行結果

我設定的執行緒池大小是7w個,所以也是一下子開啟6w多個協程的,但是我們已經可以進行執行緒大小約束了。

假設現在有這樣的去求,有100個ip,需要掃瞄每個ip開放的埠,如果採用簡單粗暴開執行緒的方式.

那就是100+65535=6552300,600多w個執行緒,還是比較消耗記憶體的,可能系統就會崩潰,如果採用執行緒池方式。

將執行緒池控制在50w個,或許情況就會好很多。

但是有一點的是,在go中,執行緒池通常需要配合chan使用,可能需要不錯的基礎。

本篇更偏向於樂趣篇,了解一下好玩的玩意

其實還可以通過net.dialtimeout連線ip:port,這個可以設定超時時間,比如超時5s就判定埠未開放。

此處就不做舉例了。

咱們主要使用三種方式來實現功能。

通常情況下,如果基礎可以,更推薦使用協程池方式。

用微笑告訴別人,今天的我比昨天強,今後也一樣。

我是碼農星期八,如果覺得還不錯,記得動手點讚一下哈。

感謝你的**。

TCP埠掃瞄器

乙個基於python3的tcp埠掃瞄器 原理 就是和不同的埠進行tcp連線,能連線成功就表示此埠是開放的,不能連線成就表示此埠是關閉的。import socket import re import threading import time lock threading.lock threads l...

埠掃瞄器(masscan)

s.exe號稱史上最快 3分鐘掃完全網 掃瞄器小巧而精緻,大小僅僅8k,但是使用上有諸多限制,例如僅支援再winserver2003 上無條件使用,放到其它系統上就要對系統做一些配置,不然無法支援syn方式掃瞄,這顯然不夠友好。nmap掃瞄器,能探知系統型別是否存活等,但是同時獲得更詳細的資訊也就意...

Python指令碼 埠掃瞄器

乙個用python寫的簡單的埠掃瞄器,python環境為 3.7.0,windows系統 掃瞄給定主機是否開放了指定的埠tcp連線掃瞄是利用tcp的三次握手來確定主機的埠是否開放。確定主機埠開放之後,給埠傳送訊息,接收埠返回的訊息,然後判斷該埠執行的服務。使用時,h 引數可以提供主機的網域名稱或者i...