Golang实现一个批量自动化执行树莓派指令的软件(9)辅助模块-调用Ping指令判定在线

embedded/2024/9/18 12:52:34/ 标签: golang, 自动化, 开发语言, 树莓派, ssh, PING

简介

基于 Golang实现一个批量自动化执行树莓派指令的软件(8)辅助模块-远程IP端口是否开放连接(TCP) 和 Golang实现一个批量自动化执行树莓派指令的软件(7)辅助模块-本地活动网络, 这两篇, 再新增使用系统ping指令判定设备是否在线。

环境描述

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

实现

network_windows.go

package utilsimport ("os/exec"
)func IsIPOnline(ip string) bool {// 使用ping命令检查IP地址,-c 1表示发送一个请求,-w 1表示等待1秒cmd := exec.Command("ping", "-n", "1", "-l", "1024", "-w", "1000", ip)// 执行命令并等待它完成//output, err := cmd.CombinedOutput()_, err := cmd.CombinedOutput()if err != nil {return false//if exitError, ok := err.(*exec.ExitError); ok {//	fmt.Printf("host is unreachable. Exit code: %d\n", exitError.ExitCode())//} else {//	// 处理其他类型的错误//	fmt.Println("Failed to execute ping command.")//}}return true
}

network.go

func GetNetworkStat(ipv4 string, port uint, timeout time.Duration) NetworkStatus {var (status = NetworkStatus{IPAvailable:   false,PortAvailable: false,})if ok := IsIPOnline(ipv4); !ok {return status}status.IPAvailable = trueif IsRemoteNetworkAlive(ipv4, port, timeout) {status.PortAvailable = true}return status
}

network_linux.go

package utilsimport ("os/exec"
)func IsIPOnline(ip string) bool {// 使用ping命令检查IP地址,-c 1表示发送一个请求,-w 1表示等待1秒cmd := exec.Command("ping", "-s", "1024", "-w", "1", ip)// 执行命令并等待它完成_, err := cmd.CombinedOutput()if err != nil {return false}return true
}

测试用例

func TestIsIPOnline(t *testing.T) {var (ipv4PrefixStr   stringipv4Str         stringidx             intinterfaces, err = GetLocalActivityNetworkInterfaces()ipMin           = 0ipMax           = 255waiter 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 ok := IsIPOnline(ip); ok {fmt.Println(ip, "is Alive.")}waiter.Done()}(ipv4Str)}}waiter.Wait()
}func TestGetNetworkStat(t *testing.T) {var (ipv4PrefixStr   stringipv4Str         stringidx             intinterfaces, err = GetLocalActivityNetworkInterfaces()ipMin           = 0ipMax           = 255port            = uint(22)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, port uint) {status := GetNetworkStat(ip, port, time.Second)if status.IPAvailable || status.PortAvailable {if status.IPAvailable {fmt.Printf("%s ip is online, ", ip)}if status.PortAvailable {fmt.Printf("port(%d) is opened.\n", port)} else {fmt.Printf("port(%d) is closed.\n", port)}}waiter.Done()}(ipv4Str, port)}}waiter.Wait()
}

代码源

https://gitee.com/grayhsu/ssh_remote_access

其他

参考


http://www.ppmy.cn/embedded/27884.html

相关文章

目标检测发展概述

前言 本篇文章只是简单介绍一下目标检测这一计算机视觉方向的发展历史&#xff0c;因此重点在于介绍而不是完整阐述各个时期的代表算法&#xff0c;只要能够简单了解到目标检测的发展历史那么本文的目的就达到了。 目标检测的任务 从上图不难看出&#xff0c;目标检测是计算机…

Mini-Gemini Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models TL; DR&#xff1a;本文构建了一个支持 textimage 多模态输入、textimage 多模态输出的真正的多模态大模型 Mini-Gemini。技术方面主要有三个要点&#xff1a;高效高分辨率的视觉 token 编码&…

python gmssl SM4不填充加解密

问题描述 使用gmssl(python版本)进行SM4加/解密时结果与国标(GMT0002)不符&#xff0c;或解密失败&#xff0c;原因是gmssl默认使用PKCS7填充&#xff0c;国标文档里的样例是没有填充的。 解决方法 方法一&#xff1a;创建CryptSM4对象时将填充模式设为-1。这是笔者推荐的方法…

知乎广告投放怎么操作?如何开通知乎广告账户?

知乎作为一个汇聚知识精英与行业领袖的问答社区&#xff0c;其独特的平台属性和高质量的用户基础&#xff0c;使之成为品牌广告投放不可忽视的一片蓝海。云衔科技通过专业化的广告开户及代运营服务&#xff0c;助力企业精准触达目标人群&#xff0c;实现品牌传播与商业目标的双…

idea No versioned directories to update were found

idea如何配置svn以及svn安装时需要注意什么 下载地址&#xff1a;https://112-28-188-82.pd1.123pan.cn:30443/download-cdn.123pan.cn/batch-download/123-820/3ec9445a/1626635-0/3ec9445a25ba365a23fc433ce0c16f34?v5&t1714358478&s171435847804276f7d9249382ba512…

UDP/TCP

udp/tcp特征 udp&#xff1a; 无连接不可靠传输面向数据包全双工 tcp&#xff1a; 有连接可靠传输面向字节流全双工 解释&#xff1a; 有连接/无连接&#xff1a;发送消息时&#xff0c;对方是否必须要在线 比如我们聊天程序&#xff0c;我们给对方发送消息&#xff0c;是不管现…

layui 表格添加 checkbox 开关

记录 &#xff1a; 使用 数据表格 获取到数据以后 用 表格中加载表单元素 {field: test, width: 20%, title: 是否显示, align: center, unresize: true ,templet: #switchTpl} 由于获取到的 test 数据 为的 value值 true 所以使用时候直接写了 <input type"ch…

SPRING从入门到精通

集中管理类第二版 目录&#xff08;单击可跳转对应目录&#xff09; 1.初步认识SPRING.......................................................... 1 1.1简单认识............................................................ 1 1.2简单DEMO..............................…

网络安全实训Day24(End)

写在前面 并没有完整上完四个星期&#xff0c;老师已经趁着清明节假期的东风跑掉了。可以很明显地看出这次持续了“四个星期”实训的知识体系并不完整&#xff0c;内容也只能算是一次基础的“复习”。更多的内容还是靠自己继续自学吧。 网络空间安全实训-渗透测试 文件包含攻击…

WPF中Nlog的使用--能够提取Nlog的日志内容,并定义使用

背景 使用Nlog日志进行本地文件输出,以及进行定时清理删除参考其他文章 在用户本地计算机上进行Nlog输出,或者使用Web的Http的Post请求输出到后端数据库使用File或者Web的数据类型就可以了,但是我这里希望把我的日志进行输出到自己的云端,但是存在如下情况: 1、用户在一天…

[华为OD]C卷 机场航班调度 ,XX市机场停放了多架飞机,每架飞机都有自己的航班号100

题目&#xff1a; XX市机场停放了多架飞机&#xff0c;每架飞机都有自己的航班号CA3385, CZ6678, SC6508 等&#xff0c;航班号的前2个大写字母&#xff08;或数字&#xff09;代表航空公司的缩写&#xff0c;后面4个数字代表航班信息。 但是XX市机场只有一条起飞用跑道&am…

Es6和Es5的区别?

ES5和ES6都是JavaScript语言的版本&#xff0c;ES5在2009年发布&#xff0c;ES6在2015年发布&#xff0c;两者之间有以下的区别&#xff1a; 1、变量声明方式不同&#xff1a;ES5使用var关键字进行变量声明&#xff0c;而ES6则引入了let和const关键字来声明变量。 2、块级作用…

【webrtc】MessageHandler 8: 基于线程的消息处理:处理音频输入输出断开

m98代码,看起来m114 去掉了MessageHandler :音频的录制和播放 都使用了on message,但只是用来通知并处理流的断开的。AAudioRecorder AAudioRecorder 处理流断开 OnErrorCallback :有可能 错误回调是别处来的,是其他线程, 但是这个错误的处理要再自己的线程执行: 音频播…

【学习AI-相关路程-工具使用-NVIDIA SDK MANAGER==NVIDIA-jetson刷机工具安装使用 】

【学习AI-相关路程-工具使用-NVIDIA SDK manager-NVIDIA-jetson刷机工具安装使用 】 1、前言2、环境配置3、知识点了解&#xff08;1&#xff09;jetson 系列硬件了解&#xff08;2&#xff09;以下大致罗列jetson系列1. Jetson Nano2. Jetson TX23. Jetson Xavier NX4. Jetson…

使用Python的Tkinter库创建你的第一个桌面应用程序

文章目录 准备工作创建窗口和按钮代码解释运行你的应用程序结论 在本教程中&#xff0c;我们将介绍如何使用Python的Tkinter库创建一个简单的桌面应用程序。我们将会创建一个包含一个按钮的窗口&#xff0c;点击按钮时会在窗口上显示一条消息。 准备工作 首先&#xff0c;确保…

2024-04-30 区块链-加密数字货币-法律风险-分析

摘要: 2024-04-30 区块链-加密数字货币之法律政策分析 加密数字货币之法律政策分析 加密数字货币&#xff08;英文&#xff1a;Cryptocurrency&#xff0c;常常用复数Cryptocurrencies&#xff0c;又译密码货币&#xff0c;密码学货币&#xff09;是一种使用密码学原理来确保交…

15.Blender Eevee和Cycles渲染引擎对比

初步介绍 Eevee是实时渲染的引擎&#xff0c;会省略一些解算方式&#xff0c;尤其对光线和阴影 Cycles会考虑这些因素&#xff0c;所以会对光线和阴影的表达更加真实&#xff0c;有一个实时光线追踪的功能 Cycles渲染完之后&#xff0c;每移动一次画面&#xff0c;都会重新渲染…

【C语言】文件操作(万字解读超详细解析)

最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 • ✨说在前面 &#x1f34b;知识点一&#xff1a;什么是文件&#xff1f; • &#x1f330;1.程序…

virtualbox kafka nat + host-only集群 + windows 外网 多网卡

virtualbox kafka nat + host-only集群 + windows 映射访问 kafka集群搭建背景kafka集群搭建 背景 使用virtualbox搭建kafka集群,涉及到不同网络策略的取舍 首先 桥接 网络虽说 啥都可以,但是涉及到过多ip的时候,而且还不能保证使用的ip不被占用,所以个人选择kafka虚拟机…

OPPO Reno10Pro/Reno11/K10手机强解BL刷root权限KSU内核抓包刷机救砖

OPPO Reno10Pro/Reno11/K10手机虽然发布时间并不久&#xff0c;但由于天玑处理器的体质&#xff0c;已经支持强制解锁BL了&#xff0c;该漏洞来自第三方工具适配&#xff0c;支持OPPO天机8100/8200刷机救砖解锁BL不需要等待官方深度测试直接实现。解锁BL后的OPPO Reno10Pro/Ren…