Golang获取本机IP

一、Golang获取本机网关

在Golang中获取本机网关一般通过获取本机网络接口信息以及网络路由信息来实现。可以使用net包中的接口函数和路由函数实现。

    
package main

import (
    "fmt"
    "net"
)

func main() {
    ifaces, err := net.Interfaces()
    if err != nil {
        panic(err)
    }
    for _, iface := range ifaces {
        if iface.Flags&net.FlagUp != 0 && iface.Flags&net.FlagLoopback == 0 {
            addrs, err := iface.Addrs()
            if err != nil {
                panic(err)
            }
            for _, addr := range addrs {
                switch v := addr.(type) {
                case *net.IPNet:
                    if !v.IP.IsLoopback() && v.IP.To4() != nil {
                        gateway := getGateway(v)
                        fmt.Println("Gateway:", gateway)
                        return
                    }
                }
            }
        }
    }
}

func getGateway(ipNet *net.IPNet) net.IP {
    r, err := netlink.RouteGet(ipNet.IP)
    if err != nil {
        panic(err)
    }
    for _, rt := range r {
        if rt.Dst == nil {
            return rt.Gw
        }
    }
    panic("no route")
}
    

上述代码中通过遍历本地网络接口信息,找到可用于外网接入的接口,并获取其对应IP地址,然后通过linux中获取网络路由信息的netlink库查询对应网关,得到本地网关信息。

二、Golang获取本机出口IP

在Golang中获取本机出口IP比较简单,可以直接使用net包中的函数实现。

    
package main

import (
    "fmt"
    "net"
)

func main() {
    conn, err := net.Dial("udp", "baidu.com:80")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    fmt.Println(conn.LocalAddr().(*net.UDPAddr).IP)
}
    

上述代码实现方式是通过连接外部网络,然后获取连接本地地址信息来实现获取本机出口IP的。

三、Go获取本机IP

获取本机IP相对比较容易,可以通过net包中的函数获取。

    
package main

import (
    "fmt"
    "net"
)

func main() {
    addrs, err := net.InterfaceAddrs()
    if err != nil {
        panic(err)
    }
    for _, addr := range addrs {
        switch v := addr.(type) {
        case *net.IPNet:
            if !v.IP.IsLoopback() && v.IP.To4() != nil {
                fmt.Println("IP:", v.IP)
            }
        }
    }
}
    

上述代码中通过遍历本地网络接口信息获取可用的外网接入接口,并获取其对应IP地址,最终实现获取本机IP地址的目的。

四、Golang获取IP地址

Golang获取IP地址需要借助net包中的IP地址相关函数来实现,下面是一个获取外网IP的实例:

    
package main

import (
    "encoding/json"
    "io/ioutil"
    "log"
    "net/http"
    "regexp"
)

const (
    url = "https://ipinfo.io/json"
)

type IpInfo struct {
    IP string `json:"ip"`
}

func main() {
    resp, err := http.Get(url)
    if err != nil {
        log.Fatalln(err)
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatalln(err)
    }

    var ipInfo = new(IpInfo)
    if err := json.Unmarshal(body, ipInfo); err != nil {
        log.Fatalln(err)
    }

    re := regexp.MustCompile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)
    match := re.FindAllString(string(body), 1)
    if len(match) > 0 {
        fmt.Println("IP:", match[0])
    } else {
        fmt.Println("IP:", ipInfo.IP)
    }
}
    

上述代码中借助了外部的IP地址查询接口,将取得的响应结果进行解析,获取出其中的IP地址信息。

五、Golang获取硬盘序列号

Golang获取硬盘序列号需要用到windows下的wmi库,下面是一个获取硬盘序列号的实例:

    
package main

import (
    "fmt"
    "github.com/StackExchange/wmi"
)

type win32PhysicalMedia struct {
    Tag                string
    SerialNumber       string
    RemovableMedia     bool
    MediaType          string
    CreationClassName  string
    Manufacturer       string
    Model              string
    Name               string
    Description        string
    Version            string
    PartNumber         string
    OtherIdentifyingInfo string
}

func GetPhysicalMediaSerial() {
    var dst []win32PhysicalMedia
    query := "SELECT Tag, SerialNumber, MediaType FROM Win32_PhysicalMedia"
    err := wmi.Query(query, &dst)
    if err != nil {
        panic(err)
    }

    for _, item := range dst {
        fmt.Println("Serial:", item.SerialNumber)
    }
}
    

上述代码会查询到本机中所有硬盘的序列号信息,并输出到控制台。

六、Golang获取时间

Golang获取时间可以借助time包中函数实现,下面是一个获取当前时间的实例:

    
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println("Time:", now)
}
    

上述代码中通过time包中获取当前时间对象,将其输出到控制台实现了获取系统当前时间的功能。

七、Golang获取当前路径

Golang获取当前路径可以借助os包中的函数实现,下面是一个获取当前路径的实例:

    
package main

import (
    "fmt"
    "os"
)

func main() {
    wd, err := os.Getwd()
    if err != nil {
        panic(err)
    }
    fmt.Println("Curr dir:", wd)
}
    

上述代码通过os包中的Getwd函数获取当前程序执行的路径,将其输出到控制台即可实现获取程序当前路径的功能。

八、Golang获取时间戳

Golang获取时间戳可以借助time包中函数实现,下面是一个获取当前时间戳的实例:

    
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now().Unix()
    fmt.Println("Timestamp:", now)
}
    

上述代码中通过time.Now()获取当前时间对象,并使用其Unix()方法得到其对应的时间戳,将其输出到控制台即可实现获取当前时间戳的功能。

九、Golang获取环境变量

Golang获取环境变量可以借助os包中的函数实现,下面是一个获取GOPATH环境变量的实例:

    
package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("GOPATH:", os.Getenv("GOPATH"))
}
    

上述代码中通过os包中的Getenv函数获取GOPATH环境变量,将其输出到控制台实现了获取环境变量的功能。

十、Golang获取文件大小

Golang获取文件大小可以借助os包中的函数实现,下面是一个获取指定文件大小的实例:

    
package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("test.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    fi, err := file.Stat()
    if err != nil {
        panic(err)
    }

    fmt.Println("File size:", fi.Size())
}
    

上述代码中通过os包中的Open函数打开指定文件,然后使用Stat函数获取文件信息,最终输出文件大小到控制台实现了获取文件大小的功能。

原创文章,作者:KPGP,如若转载,请注明出处:https://www.506064.com/n/147394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KPGPKPGP
上一篇 2024-11-01 14:08
下一篇 2024-11-01 14:08

相关推荐

  • 使用Golang调用Python

    在现代软件开发中,多种编程语言的协作是相当普遍的。其中一种使用场景是Golang调用Python,这使得在使用Python库的同时,可以利用Golang的高性能和强大并发能力。这篇…

    编程 2025-04-29
  • Centos7配置静态ip

    本文将详细阐述如何在Centos7系统中配置静态ip。 一、查看网络接口 在配置静态ip之前,我们首先需要查看系统中的网络接口,以确定我们需要配置的网卡是哪一个。 ifconfig…

    编程 2025-04-29
  • 使用Golang创建黑色背景图片的方法

    本文将从多个方面介绍使用Golang创建黑色背景图片的方法。 一、安装必要的代码库和工具 在开始创建黑色背景图片之前,我们需要先安装必要的代码库和工具: go get -u git…

    编程 2025-04-29
  • Python检测IP连通

    Python是一门强大的编程语言,常用于网络开发、数据分析等领域。IP地址是网络通信的基础,在网络通信中,有时需要检测IP地址是否连通。下面将从多个方面介绍Python检测IP连通…

    编程 2025-04-28
  • Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901解析

    本文将对Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901进行详细解析,并提供相关代码示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    编程 2025-04-27
  • 详解 IP 正则表达式

    一、IP 地址基础知识 在讲解 IP 的正则表达式前,我们先来了解一下 IP 地址的基础知识。IP 是 Internet Protocol 的缩写,用于标识网络中的设备。IP 地址…

    编程 2025-04-24
  • Mac查看IP地址命令的用法

    一、查看本机IP地址 在Mac系统中,我们可以使用ifconfig命令来查看本机IP地址。具体方法如下: ifconfig 执行以上命令后,会得到如下结果: en0: flags=…

    编程 2025-04-24
  • Golang中使用strings.Split函数进行字符串分割的方法

    一、Split函数的基本用法 字符串是编程中常见的数据类型,它们可以在程序中被处理、存储和传输。在Go语言中,字符串也是一个基本的数据类型,而strings包提供了一些操作字符串的…

    编程 2025-04-23
  • Golang环境变量全面解析

    Golang是一门非常流行的开发语言,拥有高效的CGO、简单易懂的语法、高并发能力等优点,然而它也需要使用环境变量来配置一些参数。在本篇文章中,我们将从多个方面对Golang环境变…

    编程 2025-04-23
  • 深入下探golang http server

    Go语言已经成为了软件开发领域的热门语言,它的高性能、应用广泛、安全性好,使得它成为了众多开发者心目中的首选编程语言。在众多应用场景中,golang http server的应用非…

    编程 2025-04-23

发表回复

登录后才能评论