1. 程式人生 > 其它 >TCP掃描埠

TCP掃描埠

1.非併發

package main

import (
    "fmt"
    "net"
)

func main() {
    for i := 21; i < 120; i++ {
        address := fmt.Sprintf("192.168.90.1:%d", i)
        conn, err := net.Dial("tcp", address)
        if err != nil {
            fmt.Printf("%s 關閉了 \n", address)
            continue
        }
        conn.Close()
        fmt.Printf(
"%s 打開了!!!\n", address) } }

結果:

2.併發

package main

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

func main() {
    start := time.Now()
    var wg sync.WaitGroup //計數器
    for i := 21; i < 120; i++ {
        wg.Add(1) //加一
        //每次迴圈建立一個 go func
        go func(j int) {
            defer wg.Done() 
//減1 address := fmt.Sprintf("192.168.90.1:%d", j) conn, err := net.Dial("tcp", address) if err != nil { fmt.Printf("%s 關閉了 \n", address) return } conn.Close() fmt.Printf("%s 打開了!!!\n", address) }(i) } wg.Wait()
//直到wg計數器位0放行 elapse := time.Since(start) / 1e9 //執行時長 fmt.Printf("\n %d second:", elapse) }

結果:

感謝:https://www.bilibili.com/video/BV13K4y1a7dt?p=3