golang实现ip地址端口的TCP监测
·
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.
更多推荐



所有评论(0)