Golang实现一个批量自动化执行树莓派指令的软件(7)辅助模块-本地活动网络

ops/2024/10/21 15:31:35/

简介

为了更方便的使用,我们将实现一个可以扫描本地连接网络中可用连接的扫描功能, 扫描本地连接网络中有哪些连接的设备主机。

环境描述

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

实现

package utilsimport ("net"
)type NetworkInterface struct {Name string // interface nameIPv4 stringIPv6 string
}func GetLocalActivityNetworkInterfaces() ([]NetworkInterface, error) {var (networkInterfaces    = make([]NetworkInterface, 0)tempNetworkInterface NetworkInterfaceerr                  errorinterfaces           []net.InterfacetempAddrs            []net.Addr)interfaces, err = net.Interfaces()if err != nil {return nil, err}for _, iface := range interfaces {//fmt.Println("ifaceName: ", iface.Name, ", flags: ", iface.Flags)// 过滤掉蓝牙和未连接的网络接口if !isActivityNetwork(iface.Flags) {continue}tempNetworkInterface.Name = iface.NametempAddrs, err = iface.Addrs()if err != nil {continue}for _, addr := range tempAddrs {// 只处理IP地址if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {if ipnet.IP.To4() != nil {tempNetworkInterface.IPv4 = ipnet.IP.String()} else if ipnet.IP.To16() != nil {tempNetworkInterface.IPv6 = ipnet.IP.String()}}}networkInterfaces = append(networkInterfaces, tempNetworkInterface)}return networkInterfaces, nil
}func isActivityNetwork(flags net.Flags) bool {return !isActivityNetworkUnnecessary(flags) && isActivityNetworkNecessary(flags)
}func isActivityNetworkNecessary(flags net.Flags) bool {var fliterFlags = []net.Flags{net.FlagUp, net.FlagRunning, net.FlagBroadcast, net.FlagMulticast,}for _, flg := range fliterFlags {if 0 == (flg & flags) {return false}}return true
}func isActivityNetworkUnnecessary(flags net.Flags) bool {var fliterFlags = []net.Flags{net.FlagPointToPoint, net.FlagLoopback,}for _, flg := range fliterFlags {if 0 != (flg & flags) {return true}}return false
}

测试用例

package utilsimport ("fmt""testing"
)func TestGetLocalActivityNetworkInterfaces(t *testing.T) {var interfaces, err = GetLocalActivityNetworkInterfaces()if nil != err {fmt.Println("get lcoal activity network fail, ", err.Error())return}for _, intf := range interfaces {fmt.Printf("InterfaceName: %s, IPv4: %s, IPv6: %s.\n", intf.Name, intf.IPv4, intf.IPv6)}}

代码源

https://gitee.com/grayhsu/ssh_remote_access

其他

参考


http://www.ppmy.cn/ops/27281.html

相关文章

PostgreSQL的pg_archivecleanup工具

PostgreSQL的pg_archivecleanup工具 pg_archivecleanup 是 PostgreSQL 中用于管理 WAL(Write-Ahead Logging)归档目录的工具。在使用基于归档的日志复制或持久化存储时,pg_archivecleanup 用来清理那些不再需要的归档日志文件,帮…

Stm32CubeMX 为 stm32mp135d 添加网卡 eth

Stm32CubeMX 为 stm32mp135d 添加网卡 eth 一、启用设备1. eth 设备添加2. eth 引脚配置2. eth 时钟配置 二、 生成代码1. optee 配置2. uboot 配置3. linux 配置 bringup 可参考:Stm32CubeMX 生成设备树 一、启用设备 1. eth 设备添加 我这里只启用一个eth设备&…

常用网络知识点(网管网工需掌握)

前言 最近在学习网络方面的内容时,看到很多知识点重复出现,不管在任何地方都能利用,我也就加班整理出一份针对于网络管理员/网络工程师等从业网络方面的知识点汇总 有需要的可以点赞搜藏慢慢看!后续还会更新常见配置命令 BGP BGP…

Linux 系统上安装 NVIDIA 驱动程序失败(X server问题)

报错信息: ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com. ERROR: …

4月21日,成都Sui Meetup精彩集锦

由 Sui Foundation、开发者教育平台 HackQuest,MoveBit,PoP Planet 共同主办的 Sui 成都开发者茶话会已于 4 月 21 日下午 2:00–6:00 举办,我们诚挚感谢所有对 Sui 生态,Sui Move 语言,和 Web3 开发有兴趣的小伙伴前来…

C++ 之CMake代码编译

1、编译过程 预处理-Pre-Processing //.i文件 # -E 选项指示编译器仅对输入文件进行预处理 g -E test.cpp -o test.i //.i文件 编译-Compiling // .s文件 # -S 编译选项告诉 g 在为 C 代码产生了汇编语言文件后停止编译 # g 产生的汇编语言文件的缺省扩展名是 .s g -S test…

关于kafka,关于消息队列、消息协议

Kafka详解 - 知乎 消息队列RabbitMQ入门与5种模式详解 - 简书 消息协议(MQTT、AMQP、XMPP、WAMP、STOMP)之间的区别和应用_mqtt amqp-CSDN博客

scrapy运行报错

安装好scrapy之后,运行scrapy --help后报错: > scrapy --help scrapy : 无法将“scrapy”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在…