婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例

go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例

熱門標(biāo)簽:武漢百應(yīng)人工智能電銷機(jī)器人 開通400電話申請(qǐng)流程 揚(yáng)州電銷外呼系統(tǒng)軟件 百度地圖標(biāo)注位置網(wǎng)站 400手機(jī)電話免費(fèi)辦理 電腦外呼系統(tǒng)輻射大嗎 智能語音電銷的機(jī)器人 上海企業(yè)外呼系統(tǒng)排名 如何利用高德地圖標(biāo)注家

我在代碼里定義了兩個(gè)通道,分別用于生產(chǎn)端口和限制連接數(shù),如果不限制連接數(shù),容易被對(duì)方檢測(cè)到或?qū)е聦?duì)方服務(wù)器不能正常運(yùn)行。

// 生產(chǎn)端口
var port = make(chan int, 10)

// 限制并發(fā)數(shù)
var connect = make(chan string, 5)

可以使用net庫的Dial函數(shù)做為socket客戶端,需要注意的是要設(shè)置超時(shí)時(shí)間,因?yàn)槿糁鳈C(jī)不存在,或目標(biāo)端口是關(guān)閉的,往往需要花費(fèi)數(shù)秒才返回錯(cuò)誤,這樣掃描大量端口時(shí)效率會(huì)極其低下。在go中可以使用net.Dialer結(jié)構(gòu)體設(shè)置超時(shí)時(shí)間,然后在調(diào)用Dial方法:

d := net.Dialer{Timeout: time.Second}
dial, err := d.Dial("tcp", target)

只要err不等于nil,表示目標(biāo)端口是對(duì)外開放的。
完整代碼如下:

package main

import (
  "fmt"
  "net"
  "sync"
  "time"
)


var wg sync.WaitGroup

func main() {
  var start, end int
  var address string
  fmt.Printf("請(qǐng)輸入目標(biāo)IP:> ")
  fmt.Scan(address)
  fmt.Printf("請(qǐng)輸入起始端口:> ")
  fmt.Scan(start)
  fmt.Printf("請(qǐng)輸入結(jié)束端口:> ")
  fmt.Scan(end)
  wg.Add(end - start + 1)
  Run(address, start, end)
  wg.Wait()
  fmt.Println("執(zhí)行完畢")
}


// 生產(chǎn)端口
var port = make(chan int, 10)

// 限制并發(fā)數(shù)
var connect = make(chan string, 5)

func Run(address string,  start, end int) {

  go func() {
    for i := start; i = end; i++ {
      port - i
    }
  }()

  go func() {
    // 消費(fèi)端口
    for p := range port {
      // 往通道寫入目標(biāo)地址,超過限制并發(fā)數(shù)會(huì)阻塞
      connect - fmt.Sprintf("%s:%d", address, p)
    }
  }()

  go Connect()


}

func Connect() {
  // 并發(fā)請(qǐng)求
  for target := range connect {
    // 設(shè)置超時(shí)時(shí)間
    d := net.Dialer{Timeout: time.Second}
    dial, err := d.Dial("tcp", target)
    if err == nil {
      fmt.Printf("%s 連接成功\n", target)
      dial.Close()
    }else{
      fmt.Printf("%s 連接失敗\n", target)
    }
    wg.Done()
  }
}

這里端口生產(chǎn)通道不是必須的,只是為了演示消費(fèi)生產(chǎn)并發(fā)模型,當(dāng)然這還是最簡(jiǎn)單的。
在Run函數(shù)里我沒有關(guān)閉這兩個(gè)通道,按官方的說法是gc會(huì)回收不使用的通道,如果要手動(dòng)關(guān)閉,可以定義defer閉包進(jìn)行close。
我本地運(yùn)行結(jié)果如下:

請(qǐng)輸入目標(biāo)IP:> 127.0.0.1
請(qǐng)輸入起始端口:> 8080
請(qǐng)輸入結(jié)束端口:> 8094
127.0.0.1:8080 連接成功
127.0.0.1:8081 連接成功
127.0.0.1:8082 連接成功
127.0.0.1:8083 連接成功
127.0.0.1:8084 連接成功
127.0.0.1:8085 連接成功
127.0.0.1:8086 連接成功
127.0.0.1:8087 連接成功
127.0.0.1:8088 連接成功
127.0.0.1:8089 連接成功
127.0.0.1:8090 連接成功
127.0.0.1:8091 連接成功
127.0.0.1:8092 連接成功
127.0.0.1:8093 連接失敗
127.0.0.1:8094 連接失敗
執(zhí)行完畢

這個(gè)版本比較簡(jiǎn)陋,TCP連接過程也可以簡(jiǎn)化,后續(xù)再寫另外一篇文章。因?yàn)樽罱趯W(xué)rust語言,語法內(nèi)容比較多,所以后面暫時(shí)發(fā)布編程相關(guān)的文章,提升一下語法熟練度。

以上就是go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例的詳細(xì)內(nèi)容,更多關(guān)于go 實(shí)現(xiàn)端口掃描的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • go xorm框架的使用
  • 解析Go的Waitgroup和鎖的問題
  • Go語言快速入門圖文教程
  • go語言基礎(chǔ) seek光標(biāo)位置os包的使用
  • Go語言獲取文件的名稱、前綴、后綴
  • Go語言 如何實(shí)現(xiàn)RSA加密解密
  • Go 自定義package包設(shè)置與導(dǎo)入操作
  • 詳解Gotorch多機(jī)定時(shí)任務(wù)管理系統(tǒng)

標(biāo)簽:黑龍江 張掖 宜賓 嘉峪關(guān) 武漢 江西 延邊 新余

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例》,本文關(guān)鍵詞  實(shí)現(xiàn),簡(jiǎn)易,端口,掃描,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 股票| 昭平县| 论坛| 陆河县| 张掖市| 平阴县| 墨竹工卡县| 天气| 印江| 西充县| 兴安县| 罗甸县| 正阳县| 健康| 马龙县| 临泉县| 绿春县| 高邮市| 太白县| 竹山县| 孟州市| 隆安县| 琼海市| 江达县| 房产| 大方县| 涿鹿县| 宁强县| 璧山县| 德清县| 金昌市| 嵊州市| 柯坪县| 鄂托克旗| 南木林县| 红桥区| 景东| 台北市| 盐山县| 临猗县| 东港市|