golang实现ip地址端口的TCP监测:

解决想知道某个服务器开放了哪些端口,实现扫描功能

package main

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

func scanPortSync(ip string, port int, wg *sync.WaitGroup) {
	defer wg.Done()
	address := fmt.Sprintf("%s:%d", ip, port)
	d := net.Dialer{Timeout: 5 * time.Second}
	conn, err := d.Dial("tcp", address)
	if err == nil {
		fmt.Printf("%s:%d 的端口是开放的\n", ip, port)
		conn.Close()
	}
}

func scanPort(ip string, port int) {
	address := fmt.Sprintf("%s:%d", ip, port)
	conn, err := net.Dial("tcp", address)
	if err == nil {
		fmt.Printf("%s:%d 的端口是开放的\n", ip, port)
		conn.Close()
	} else {
		fmt.Printf("%s:%d 的端口是关闭的\n", ip, port)
	}
}

func main() {
	ip := flag.String("ip", "127.0.0.1", "ip地址")
	port := flag.Int("port", 0, "端口")
	flag.Usage = func() {
		fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0])
		flag.PrintDefaults()
		fmt.Println("程序帮助使用提示")
		helpstr := `
		gotest.exe  -ip 10.72.1.253  #检测扫描Ip地址端口开放情况
		gotest.exe  -ip 10.72.1.253 -port 1000  #扫描制定IP的指定的端口信息
		gotest.exe       #s扫描本机的地址(127.0.0.1)的端口信息
		`

		fmt.Println(helpstr)

	}
	flag.Parse()
	if *port == 0 {
		wg := new(sync.WaitGroup)
		for p := 1; p <= 65535; p++ {
			wg.Add(1)
			go scanPortSync(*ip, p, wg)

		}
		wg.Wait()
	} else {
		scanPort(*ip, *port)
	}
}

软件编译后,软件展示:

软件常用的功能:

参数就是监测的两个信息:

-ip 

-port

 gotest.exe  -ip 10.72.1.253  #检测扫描Ip地址端口开放情况
                gotest.exe  -ip 10.72.1.253 -port 1000  #扫描制定IP的指定的端口信息
                gotest.exe       #s扫描本机的地址(127.0.0.1)的端口信息

1.gotest.exe -help  显示软件实现的功能

 

2.

更多推荐