首页 > 其他分享 >go 网络包用法

go 网络包用法

时间:2024-03-22 09:15:37浏览次数:23  
标签:return nil err ip fmt 网络 用法 go cidr

获取网卡IPv4地址

package main

import (
	"fmt"
	"net"
)

func main() {
	ifname := "ens33"
	netIf, err := net.InterfaceByName(ifname)
	if err != nil {
		fmt.Printf("get netIf by name %s failed, err is %v\n", ifname, err)
		return
	}

	addrs, err := netIf.Addrs()
	if err != nil {
		fmt.Printf("get addrs by name %s failed, err is %v\n", ifname, err)
		return
	}

	for _, addr := range addrs {
		ipNet, ok := addr.(*net.IPNet)
		if ok && ipNet.IP.To4() != nil {
			fmt.Printf("ipv4 addr is %s\n", ipNet.IP.String())
			return
		}
	}
}

IP整型和字符串互转

package main

import (
	"fmt"
	"net"
)

func IPv4StringToUint32(ip string) (uint32, error) {
	p := net.ParseIP(ip).To4()
	if p == nil {
		return 0, fmt.Errorf("invalid ipv4 format")
	}

	return uint32(p[3])<<24 | uint32(p[2])<<16 | uint32(p[1])<<8 | uint32(p[0]), nil
}

func IPv4Uint32ToString(ipUint32 uint32) (string, error) {
	ip := make(net.IP, net.IPv4len)
	ip[3] = byte(ipUint32 >> 24)
	ip[2] = byte(ipUint32 >> 16)
	ip[1] = byte(ipUint32 >> 8)
	ip[0] = byte(ipUint32)

	return ip.String(), nil
}

func main() {
	ip := "100.101.102.103"

	ipUint32, err := IPv4StringToUint32(ip)
	if err != nil {
		fmt.Printf("get ipv4 uint32 from string %s failed, err is %v", ip, err)
		return
	}
	fmt.Println(ipUint32)

	ipString, err := IPv4Uint32ToString(ipUint32)
	if err != nil {
		fmt.Printf("get ipv4 string from uint32 %d failed, err is %v", ipUint32, err)
		return
	}
	fmt.Println(ipString)
}

解析cidr子网

package main

import (
	"fmt"
	"net"
)

func main() {
	cidrs := []string{"100.101.102.1/16", "100.101.102.1"}

	for _, cidr := range cidrs {
		_, ipNet, err := net.ParseCIDR(cidr)
		if err != nil {
			fmt.Printf("parse cidr %s failed, err is %v\n", cidr, err)
			continue
		}

		mask, _ := ipNet.Mask.Size()
		fmt.Printf("parse cidr %s result is %s/%d\n", cidr, ipNet.IP.String(), mask)
	}
}

标签:return,nil,err,ip,fmt,网络,用法,go,cidr
From: https://www.cnblogs.com/WJQ2017/p/18088650

相关文章

  • GOT表和PLT表
    GOT表和PLT表一.引入目地操作系统通常使用动态链接的方法来提高程序运行的效率。在动态链接的情况下,程序加载的时候并不会把链接库中所有函数都一起加载进来,而是程序执行的时候按需加载,如果有函数并没有被调用,那么它就不会在程序生命中被加载进来。这样的设计就能提高程序运行......
  • 某企业网络及服务器规划与设计(小学期作业)
    目录一、项目需求与设计1.1项目需求1.1网络拓扑1.2设备地址和技术规划二、项目所需环境2.1硬件环境2.2软件环境三、项目实现过程3.1网络配置3.1.1MSTP3.1.2VRRP3.1.3OSPF3.1.4ACL3.1.5LACP3.1.6Telnet3.2服务器配置3.2.1WEB3.2.2DNS3.2.3FTP......
  • GPG 用法
    GPG(GnuPG)是一种加密工具,用于数据加密和数字签名。密钥配置#生成密钥gpg--full-generate-key#列出密钥gpg--list-keys#列出公钥gpg--list-secret-keys#列出私钥#导出密钥gpg--armor--export[email/ID]>public.asc#导出公钥gpg--export-secret-......
  • [Container] study goals for learning container
    LearningObjectivesBuildacontainerimageandstoreitinacontainerregistry.Describethefeatures,benefits,andusecasesofcontainers,andhowtheyaredifferentfromvirtualmachines.DefineDockerandlistsomeofthecommonlyusedDockerCLI......
  • 信息收集(网络安全)
    渗透测试的本质就是信息收集,获取目标服务器的IP地址、端口信息、版本信息....从而达到目的,在攻防渗透中,信息收集是非常重要的一步,通过信息收集可以了解渗透目标的网络架构,描述出相关的网络拓扑,从而缩小攻击范围。只有将目标的相关信息收集完整,才可以对攻击目标开启的主......
  • Ubuntu使用gvm安装go
    建议使用非sudo用户装,方便vscode连接时go插件使用。1.若系统之前存在旧版本的go,无则跳过此步骤sudorm-rf/usr/local/gosudoapt-getremovegolangsudoapt-getremovegolang-gosudoapt-getautoremove2.到gvm的官方github页面找到安装的命令https://github.com/moo......
  • 5.Go变量 常量 变量命名规则 代码风格
    Go变量、常量、命名规则、代码风格1、变量的来历程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存......
  • 3.Go 语言 定义变量、fmt 包、Print、Println、Go 语言注释
    Go语言定义变量、fmt包、Print、Println、Printf、Go语言注释1、Go语言定义变量这里我们为了演示代码期间给大家先简单介绍一下变量,后面的教程还会详细讲解。关于变量:程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是......
  • 4.Go变量 常量申明 变量命名规则
    Go变量、常量、变量命名规则1、变量的来历程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保......
  • MongoDB入门
    目录1.MongoDB简介与特点1.1.NoSQL数据库的概念与分类1.2.MongoDB的特点与优势1.3.为什么选择MongoDB?2.MongoDB安装与配置2.1.下载与安装MongoDB2.2.连接MongoDB数据库并进行基本操作3.MongoDB数据建模3.1.MongoDB的文档模型3.2.集合与文档的概念3.3.如......