golang 根据网段拆分成ip 多线程进行端口探测
在Golang中,可以使用net和sync包来实现根据网段拆分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用于等待所有线程完成扫描任务。
以上代码将根据指定的网段和端口列表进行多线程端口探测
原文地址: http://www.cveoy.top/t/topic/hZFx 著作权归作者所有。请勿转载和采集!