Golang实现一个批量自动化执行树莓派指令的软件(8)辅助模块-远程IP端口是否开放连接(TCP)

发布于:2024-05-01 ⋅ 阅读:(29) ⋅ 点赞:(0)

简介

基于 上篇 Golang实现一个批量自动化执行树莓派指令的软件(7)辅助模块-本地活动网络, 看看本地活动网络接口网络里面有哪些设备是支持ssh网络的。

环境描述

运行环境: Windows, 基于Golang, 暂时没有使用什么不可跨平台接口, 理论上支持Linux/MacOS
目标终端:树莓派DebianOS(主要做用它测试)

实现

func IsRemoteNetworkAlive(ipv4 string, port uint, timeout time.Duration) bool {

	address := net.JoinHostPort(ipv4, fmt.Sprintf("%d", port))

	conn, err := net.DialTimeout("tcp", address, timeout)
	if err != nil {
		//fmt.Printf("Could not connect to host: %s\n", err)
		return false
	} else {
		defer conn.Close()
		//fmt.Printf("Successfully connected to host: %s\n", ipv4)
		return true
	}
}

测试用例

func TestIsRemoteNetworkAlive(t *testing.T) {
	var (
		ipv4PrefixStr   string
		ipv4Str         string
		idx             int
		interfaces, err = GetLocalActivityNetworkInterfaces()
		ipMin           = 1
		ipMax           = 255

		waiter sync.WaitGroup
	)

	if nil != err {
		fmt.Println("get lcoal activity network fail, ", err.Error())
		return
	}
	for _, intf := range interfaces {
		if 0 >= len(intf.IPv4) {
			continue
		}
		idx = strings.LastIndex(intf.IPv4, ".")
		ipv4PrefixStr = intf.IPv4[:idx+1]
		for ipIndex := ipMin; ipIndex < ipMax; ipIndex++ {
			ipv4Str = fmt.Sprintf("%s%d", ipv4PrefixStr, ipIndex+1)
			waiter.Add(1)
			go func(ip string) {
				if IsRemoteNetworkAlive(ip, 22, time.Second) {
					fmt.Println(ip, "is Alive.")
				}
				waiter.Done()
			}(ipv4Str)
		}
	}
	waiter.Wait()
}

代码源

https://gitee.com/grayhsu/ssh_remote_access

其他

参考


网站公告

今日签到

点亮在社区的每一天
去签到