Golang简单实现端口扫描器(TCP)
效果如下:

思路:
直接net.Dial,这里我所以的是net.DialTimeout可以设置超时,否则默认好像是20S,然后就是结合sync.waitgroup及goroutine即可实现批量扫描端口
Code:
package main
import (
"flag"
"fmt"
"net"
"strconv"
"strings"
"sync"
"time"
)
var wg sync.WaitGroup
func scan(ip string,port int) {
addr:=ip+":"+strconv.Itoa(port)
conn,_:=net.DialTimeout("tcp",addr,5*time.Second)
if conn != nil {
conn.Close()
fmt.Println(addr+"=====>Opened")
wg.Done()
}else {
fmt.Println(addr+"=====>Closeed")
wg.Done()
}
}
func main() {
before:=time.Now()
var ip string
var port int
var ports string
flag.StringVar(&ip,"ip","127.0.0.1","input ip")
flag.IntVar(&port,"port",80,"input port")
flag.StringVar(&ports,"ports","","input ports")
flag.Parse()
if ports=="" {
scan(ip,port)
}else{
ps:=strings.Split(ports,"-")
top,_:=strconv.Atoi(ps[0])
bot,_:=strconv.Atoi(ps[1])
for i:=top;i<=bot;i++{
wg.Add(1)
go scan(ip,i)
}
}
wg.Wait()
after:=time.Now()
fmt.Printf("扫描完毕!耗时:%v\n",after.Sub(before))
}


本文系作者 @孤独常伴 原创发布在 L0ne1y。未经许可,禁止转载。