有时处于内网环境,且不能随意去安装命令,去检测机器端口是否开启就很麻烦,那就意味着shell、python就不好用了,因为需要去安装命令、依赖等,这时使用Go就是一个很好的选择,编译后放在机器,直接就能运行。 在这里,写一个脚本,通过接收ip:port的方式去检测端口
脚本
checkPort.sh
package main
import (
"fmt"
"net"
"os"
"time"
)
// 获取IP和端口
func getIpPort() []string {
// 根据接收参数个数,定义动态数组,
ip_ports := make([]string, len(os.Args)-1)
i := 0
for index, value := range os.Args {
//排除脚本名称
if index == 0 {
continue
}
//写入数组
ip_ports[i] = value
i++
}
return ip_ports
}
// 检测端口
func checkPorts(ip_ports []string) {
now := time.Now().Format("2006-01-02 15:04:05")
for _, ip_port := range ip_ports {
// 检测端口
conn, err := net.DialTimeout("tcp", ip_port, 3*time.Second)
if err != nil {
fmt.Println("["+now+"]", ip_port, "端口未开启(fail)!")
} else {
if conn != nil {
fmt.Println("["+now+"]", ip_port, "端口已开启(success)!")
conn.Close()
} else {
fmt.Println("["+now+"]", ip_port, "端口未开启(fail)!")
}
}
}
}
func main() {
ret := getIpPort()
checkPorts(ret)
}
编译后在Linux上行
cmd命令行配置环境变量
SET CGO_ENABLE=0 //禁用CGO
SET GOOS=linux //目标平台
SET GOARCH=amd64
编译
go build checkPort.go
编译后就会获取一个checkPort的二进制文件
checkPort
放到linux机器赋权
chmod +x checkPort
运行
|