好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > go 實現簡易端口掃描的示例

go 實現簡易端口掃描的示例

熱門標簽:武漢百應人工智能電銷機器人 開通400電話申請流程 揚州電銷外呼系統軟件 百度地圖標注位置網站 400手機電話免費辦理 電腦外呼系統輻射大嗎 智能語音電銷的機器人 上海企業外呼系統排名 如何利用高德地圖標注家

我在代碼里定義了兩個通道,分別用于生產端口和限制連接數,如果不限制連接數,容易被對方檢測到或導致對方服務器不能正常運行。

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

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

可以使用net庫的Dial函數做為socket客戶端,需要注意的是要設置超時時間,因為若主機不存在,或目標端口是關閉的,往往需要花費數秒才返回錯誤,這樣掃描大量端口時效率會極其低下。在go中可以使用net.Dialer結構體設置超時時間,然后在調用Dial方法:

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

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

package main

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


var wg sync.WaitGroup

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


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

// 限制并發數
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() {
    // 消費端口
    for p := range port {
      // 往通道寫入目標地址,超過限制并發數會阻塞
      connect - fmt.Sprintf("%s:%d", address, p)
    }
  }()

  go Connect()


}

func Connect() {
  // 并發請求
  for target := range connect {
    // 設置超時時間
    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()
  }
}

這里端口生產通道不是必須的,只是為了演示消費生產并發模型,當然這還是最簡單的。
在Run函數里我沒有關閉這兩個通道,按官方的說法是gc會回收不使用的通道,如果要手動關閉,可以定義defer閉包進行close。
我本地運行結果如下:

請輸入目標IP:> 127.0.0.1
請輸入起始端口:> 8080
請輸入結束端口:> 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 連接失敗
執行完畢

這個版本比較簡陋,TCP連接過程也可以簡化,后續再寫另外一篇文章。因為最近在學rust語言,語法內容比較多,所以后面暫時發布編程相關的文章,提升一下語法熟練度。

以上就是go 實現簡易端口掃描的示例的詳細內容,更多關于go 實現端口掃描的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • go xorm框架的使用
  • 解析Go的Waitgroup和鎖的問題
  • Go語言快速入門圖文教程
  • go語言基礎 seek光標位置os包的使用
  • Go語言獲取文件的名稱、前綴、后綴
  • Go語言 如何實現RSA加密解密
  • Go 自定義package包設置與導入操作
  • 詳解Gotorch多機定時任務管理系統

標簽:黑龍江 張掖 宜賓 嘉峪關 武漢 江西 延邊 新余

巨人網絡通訊聲明:本文標題《go 實現簡易端口掃描的示例》,本文關鍵詞  實現,簡易,端口,掃描,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go 實現簡易端口掃描的示例》相關的同類信息!
  • 本頁收集關于go 實現簡易端口掃描的示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产美女在线看| Japanese55丰满成熟| 边做奶水边喷h| 91久久夜色精品国产网站APP| 咕咚影院免费观看视频| 女人被免费视频下载| 男人把小j进女人屁股视频| 宅男午夜fuli影院| 女人让男人猛戳免费视频| 国产久视频| av女人天堂污污污www网站| 老师好大好爽办公室视频| 114电影日本三级日本| 97伦理片| 栗宫ふたば作品在线观看| AV 丝袜 欧美 老 另类 亚洲| 女生舔男生jj| 黄色毛片电影| 久久婷婷色一区二区三区asmr| 成人免费视频???我要手| 美女把腿扒开让男人桶肌肌| 2012中文字幕在线中文| 亚洲国产欧美另类| 男女一边摸一边做爽爽的动漫视频| 埃及性xxxx狂欢| 揉我奶?啊?嗯高潮樱奈| 蜜桃视频在线播放| 国产高清在线精品二区app| 国产睡熟迷奷系列精品| 欧美肉体狂欢派对在线观看| 青青青国产线观频91| 国产黄色在线| 欧美丰满熟妇乱婬AV久久米娜| 国产成人理在线观看视频| 韩国漫画被黄漫免费网站| 日韩在线三级| 国产精品第20页| 成人夫妻网站色情毛片无码视频 | 国产精品久久久久久精品...| 口工番漫画全彩无遮挡在哪里看| 欧洲人体超大胆私露|