在Golang中,可以使用netsync包来实现根据网段拆分IP并进行多线程端口探测。

首先,需要导入所需的包:

package main

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

然后,定义一个函数来进行端口扫描:

func scanIP(ip string, ports []int, wg *sync.WaitGroup) {
    defer wg.Done()

    for _, port := range ports {
        address := fmt.Sprintf("%s:%d", ip, port)

        conn, err := net.DialTimeout("tcp", address, 5*time.Second)
        if err == nil {
            fmt.Printf("Port %d on %s is open\n", port, ip)
            conn.Close()
        }
    }
}

接下来,定义一个函数来拆分网段并启动多个线程进行端口扫描:

func main() {
    ip := "192.168.1" // 输入需要扫描的网段
    ports := []int{80, 443, 8080} // 输入需要扫描的端口列表

    var wg sync.WaitGroup

    for i := 1; i <= 255; i++ {
        wg.Add(1)

        go func(i int) {
            defer wg.Done()
            address := fmt.Sprintf("%s.%d", ip, i)

            scanIP(address, ports, &wg)
        }(i)
    }

    wg.Wait()
}

main函数中,使用一个循环来遍历网段中的每个IP地址,并启动一个新的线程来进行端口扫描。

注意,sync.WaitGroup用于等待所有线程完成扫描任务。

以上代码将根据指定的网段和端口列表进行多线程端口探测

golang 根据网段拆分成ip 多线程进行端口探测

原文地址: http://www.cveoy.top/t/topic/hZFx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录