如何获取本机网卡的IP地址

应用场景

无需各种繁琐操作,直接双击打开go-ip.exe,即可看到本机网卡的全部IP

golang可以编译全平台(win/mac/linux)程序

运行效果(win10操作系统)

up-dbae5ef97b729f5365e144d917d9315f7db.png

代码

package main

// 获取本机全部网卡的全部IP
// 2020-03-12 16:52

import (
    "fmt"
    "net"

    "fyne.io/fyne/app"
    "fyne.io/fyne/widget"
)

//获取全部网卡的全部IP
func Ips() (map[string]string, error) {

    ips := make(map[string]string)

    //返回 interface 结构体对象的列表,包含了全部网卡信息
    interfaces, err := net.Interfaces()
    if err != nil {
        return nil, err
    }

    //遍历全部网卡
    for _, i := range interfaces {

        // Addrs() 方法返回一个网卡上全部的IP列表
        address, err := i.Addrs()
        if err != nil {
            return nil, err
        }

        //遍历一个网卡上全部的IP列表,组合为一个字符串,放入对应网卡名称的map中
        for _, v := range address {
            ips[i.Name] += v.String() + " "
        }
    }
    return ips, nil
}

func main() {

    var ips = make(map[string]string)
    ips, _ = Ips()

    var ipstring string

    //key是网卡名称,value是网卡IP
    for k, v := range ips {
        ipstring += "adapter name: " + k + "  IP: " + v + "\n"
    }

    //使用 fyne 画到 GUI 界面上
    myApp := app.New()
    myWindow := myApp.NewWindow("Network Info")
    myWindow.SetContent(widget.NewLabel(ipstring))

    myWindow.Show()
    myApp.Run()
    tidyUp()
}

func tidyUp() {
    fmt.Println("Exited")
}

编译

go build -ldflags "-H windowsgui -s -w" main.go

会得到一个main.exe文件

up-0daf2d28be3d8229af45fa18fc44a71820b.png

将 main.exe 改名为 ip.exe 即可。


左程立
71 声望13 粉丝