简介
基于 上篇 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