返回顶部
首页 > 资讯 > 后端开发 > GO >如何使用 golang 列出网络中的子网?
  • 871
分享到

如何使用 golang 列出网络中的子网?

2024-02-12 22:02:39 871人浏览 安东尼
摘要

PHP小编香蕉将为大家介绍如何使用golang列出网络中的子网。Golang是一种强大的编程语言,它提供了许多功能和库,可以轻松处理网络相关的任务。要列出网络中的子网,我们可以使用Go

PHP小编香蕉将为大家介绍如何使用golang列出网络中的子网。Golang是一种强大的编程语言,它提供了许多功能和库,可以轻松处理网络相关的任务。要列出网络中的子网,我们可以使用Golang的net包和CIDR(无类域间路由选择)库。通过解析IP地址和子网掩码,我们可以计算出网络中的所有子网。接下来,我们将详细讲解如何使用Golang编写代码来实现这一功能。

问题内容

我想列出没有。网络中的子网,我有 python 中的示例工作代码,但在 golang 中需要它。

NETWORK="192.168.0.0/16"
subnet_prefix=22
net = ipaddress.ip_network(NETWORK)
for subnet in net.subnets(new_prefix=subnet_prefix):
    net = ipaddress.ip_interface(subnet)
    print(net)

192.168.0.0/22 192.168.4.0/22 192.168.8.0/22 192.168.12.0/22 192.168.16.0/22 192.168.20.0/22 192.168.24.0/22 192.168 .28.0/22 192.168.32.0/22 192.168.36.0/22 192.168.40.0/22 192.168.44.0/22 192.168.48.0/22 192.168.52.0/22 192.168.56.0/22 192.168.60.0/22 192.168.64。 0/22 192.168.68.0/22 192.168.72.0/22 192.168.76.0/22 192.168.80.0/22 192.168.84.0/22 192.168.88.0/22 192.168.92.0/22 192.168.96.0/22 192.168.100.0/22 192.168.10 4.0/22 192.168.108.0/22 192.168.112.0/22 192.168.116.0/22 192.168.120.0/22 192.168.124.0/22 192.168.128.0/22 192.168.132.0/22 192.168.136.0/22 192.168.140.0/22 192。 168.144.0/22 192.168.148.0/22 192.168.152.0/22 192.168.156.0/22 192.168.160.0/22 192.168.164.0/22 192.168.168.0/22 192.168.172.0/22 192.168.176.0/22 192.168.180.0/22 192。 168.184.0/22 192.168.188.0/22 192.168.192.0/22 192.168.196.0/22 192.168.200.0/22 192.168.204.0/22 192.168.208.0/22 192.168.212.0/22 192.168.216.0/22 192.168.220.0/22 192. 168.224.0/22 192.168.228.0/22 192.168.232.0/22 192.168.236.0/22 192.168.240.0/22 192.168.244.0/22 192.168.248.0/22 192.168.252.0/22

解决方法

我编写的函数生成给定 subnetmasksize 的所有子网,这些子网可以在给定 netcidr 内创建。网络和子网均采用 cidr 表示法。

例如:

func runner() {
    fmt.println(gensubnetsinnetwork("192.168.0.0/24", 26))
}
=== run   testrunner/run_me
[192.168.0.0/26 192.168.0.64/26 192.168.0.128/26 192.168.0.192/26] 
--- pass: testrunner (0.00s)

我选择了算术运算,因此它更容易理解(为了获得更好的性能,请使用按位运算)。

该函数计算有关给定网络和子网掩码的一些事实,然后生成所有子网 cidr。

func GenSubnetsInNetwork(netCIDR string, subnetMaskSize int) ([]string, error) {
    ip, ipNet, err := net.ParseCIDR(netCIDR)
    if err != nil {
        return nil, err
    }
    if !ip.Equal(ipNet.IP) {
        return nil, errors.New("netCIDR is not a valid network address")
    }
    netMaskSize, _ := ipNet.Mask.Size()
    if netMaskSize > int(subnetMaskSize) {
        return nil, errors.New("subnetMaskSize must be greater or equal than netMaskSize")
    }

    totalSubnetsInNetwork := math.Pow(2, float64(subnetMaskSize)-float64(netMaskSize))
    totalHostsInSubnet := math.Pow(2, 32-float64(subnetMaskSize))
    subnetIntAddresses := make([]uint32, int(totalSubnetsInNetwork))
    // first subnet address is same as the network address
    subnetIntAddresses[0] = ip2int(ip.To4())
    for i := 1; i < int(totalSubnetsInNetwork); i++ {
        subnetIntAddresses[i] = subnetIntAddresses[i-1] + uint32(totalHostsInSubnet)
    }

    subnetCIDRs := make([]string, 0)
    for _, sia := range subnetIntAddresses {
        subnetCIDRs = append(
            subnetCIDRs,
            int2ip(sia).String()+"/"+strconv.Itoa(int(subnetMaskSize)),
        )
    }
    return subnetCIDRs, nil
}

func ip2int(ip net.IP) uint32 {
    if len(ip) == 16 {
        panic("cannot convert IPv6 into uint32")
    }
    return binary.BigEndian.Uint32(ip)
}
func int2ip(nn uint32) net.IP {
    ip := make(net.IP, 4)
    binary.BigEndian.PutUint32(ip, nn)
    return ip
}

以上就是如何使用 golang 列出网络中的子网?的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 如何使用 golang 列出网络中的子网?

本文链接: https://lsjlt.com/news/563941.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用 golang 列出网络中的子网?
    php小编香蕉将为大家介绍如何使用Golang列出网络中的子网。Golang是一种强大的编程语言,它提供了许多功能和库,可以轻松处理网络相关的任务。要列出网络中的子网,我们可以使用Go...
    99+
    2024-02-12
  • 如何使用iisweb.vbs列出网站
    本篇内容主要讲解“如何使用iisweb.vbs列出网站”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用iisweb.vbs列出网站”吧!应用到: Windows Server 2003, ...
    99+
    2023-06-08
  • Keras中如何使用Capsule网络
    在Keras中实现Capsule网络可以通过使用keras.layers中的Capsule和PrimaryCap层来实现。下面是一个...
    99+
    2024-03-08
    Keras
  • 如何使用linux网络编程用到的网络函数
    本篇内容主要讲解“如何使用linux网络编程用到的网络函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用linux网络编程用到的网络函数”吧!一.概念介绍网络程序分为服务端程序和客户端程...
    99+
    2023-06-09
  • 在Golang中如何进行网络请求
    Golang是一种高效的编程语言,被广泛应用于Web应用程序和网络服务开发。在网络服务中,请求是一个非常重要的部分。本文将介绍Golang中如何进行网络请求,包括GET请求和POST请求。GET请求GET请求是最常用的网络请求方法之一。它用...
    99+
    2023-05-14
  • vbs如何列出内网的中计算机
    这篇文章给大家分享的是有关vbs如何列出内网的中计算机的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:'Handle Errors On Error Resume Next 'Get th...
    99+
    2023-06-08
  • golang对象池在网络中怎么使用
    在网络编程中,可以使用golang的对象池来管理网络连接对象,以提高资源的复用和性能。 首先,你需要定义一个对象池结构体,用来管理连...
    99+
    2023-10-26
    golang
  • 如何使用PHP进行电子商务和网络营销?
    随着互联网的普及和发展,电子商务和网络营销已成为许多企业实现销售和推广的重要途径。而PHP作为一种广泛应用于Web开发的编程语言,也被越来越多的企业用于电子商务和网络营销中。在本文中,我们将介绍如何使用PHP进行电子商务和网络营销,让您在这...
    99+
    2023-05-20
    电子商务 PHP 网络营销
  • 如何使用 PHP 的网络函数?
    如何在 PHP 中使用网络函数? PHP 提供了强大的网络函数集合,使开发人员能够轻松创建 Web 应用程序、处理 HTTP 请求并与网络服务器通信。本指南将介绍 PHP 最重要的网络...
    99+
    2024-04-19
    php 网络函数
  • 如何使用C++中的网络编程函数?
    如何使用C++中的网络编程函数?在现代社会中,网络已经成为了人们生活中不可或缺的一部分。在软件开发领域中,网络编程更是其中的重要组成部分。C++作为一种强大的编程语言,提供了丰富的网络编程函数和库,使得开发者可以轻松地构建各种网络应用程序。...
    99+
    2023-11-18
    C++ 网络编程 函数使用
  • win7无线网络列表显示不出来如何解决
    今天小编给大家分享一下win7无线网络列表显示不出来如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。解决方法:右键你电...
    99+
    2023-07-04
  • 如何调试通过网络调用的 Golang 函数?
    如何调试通过网络调用的 golang 函数?有以下两种方法:使用日志记录:添加 log.printf 语句以记录函数调用、返回结果或错误。使用跟踪:启用 -tags go.net.tra...
    99+
    2024-04-17
    调试 golang
  • 计算机网络中如何使用爬虫
    这篇文章将为大家详细讲解有关计算机网络中如何使用爬虫,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、网络爬虫一般分为以下两个阶段,先URL库初始化,然后开始爬行。2、爬虫读取未访问的URL,确定其工作范...
    99+
    2023-06-14
  • Linux中如何使用netpas网络加速器
    这篇文章将为大家详细讲解有关Linux中如何使用netpas网络加速器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。2 准备工作2.1 好点的机器配置。既然是用虚拟机跑代理,当然机子内存要大...
    99+
    2023-06-13
  • Keras中如何使用卷积神经网络
    使用卷积神经网络(CNN)在Keras中非常简单。以下是一个简单的例子,演示如何构建一个简单的CNN模型: from keras.m...
    99+
    2024-04-02
  • 如何使用云服务器的网络
    使用云服务器的网络需要具备一定的技术知识和网络知识,以下是一些常见的步骤: 步骤1:安装云服务器 1. 选择云服务器供应商:您可能需要查看云服务器供应商的网站,了解它们提供的技术和服务。您可以通过访问该供应商的网站来查看最新的产品信息和更...
    99+
    2023-10-26
    如何使用 服务器 网络
  • 如何使用Golang的同步机制提高网络服务的性能
    使用Golang的同步机制可以提高网络服务的性能的几种方法:1. 使用并发:Golang中的goroutine可以实现轻量级的并发。...
    99+
    2023-10-08
    Golang
  • 网络安全中如何保护电子邮件安全
    这篇文章主要介绍了网络安全中如何保护电子邮件安全,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.使用多个电子邮件账号如果你和大多数人一样,那么你的电子邮件账户可能就是个人网...
    99+
    2023-06-17
  • 如何在Flutter中使用DIO网络请求库
    这篇文章将为大家详细讲解有关如何在Flutter中使用DIO网络请求库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 导入dio包目前dio库的最新版本是3.0.1,同使用其他三方库一样...
    99+
    2023-06-14
  • Linux中如何使用nmcli命令配置网络
    这篇文章主要介绍Linux中如何使用nmcli命令配置网络,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!nmcli命令是redhat7或者centos7之后的命令,该命令可以完成网卡上所有的配置工作,并且可以写入配置...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作