实现一个简单的并发端口扫面程序
2018年8月6日
有时候,我们要检测某台服务器的端口是否开放,或者说,有个域名访问不了了,我们看下ip+端口是否通,我们这时候就用到端口扫描,看端口是否开放,网上有很多现成的软件或者在线工具实现这个功能,那我们今天用golang看怎么简单实现这个功能,拥有自己的实现端口扫描,从此,不求人,哈哈!
golang中实现端口扫描用到的是net库,函数如下:
1 |
net.DialTimeout(network, address string, timeout time.Duration) |
带超时的socket连接,因为我们不能无限制的连接时间,查看端口是否开放设置一个很短时间就ok,如果不考虑并发,上边这句话就实现固定端口扫描,看是否通畅!怎么并发呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//设置启动并发的数量,这里设置10 nthread = 10 //这里利用golang的带缓冲的channel实现阻塞,上边指定的数量不完成不执行下边的 //从而实现指定并发数量的执行 ch := make(chan string, nthread) //要扫描的端口 port :=[]string{"80","1080","9090","10000"} ip:="127.0.0.1" for _,v:=range port{ ch = <-v go func(ip,port string) { //超时时间 ntime:=2 _, err := net.DialTimeout("tcp", ip+":"+port, time.Second*time.Duration(ntime)) if err!=nil{ fmt.Println("端口没有打开") } else { fmt.Println("端口是开放的") } }(ip,v string) } |
上边这段代码就实现了一个带超时,带并发的的端口扫描程序,是不是很简答啊!
自己动手,丰衣足食!