使用golang获取本机IP

纵然是瞬间 提交于 2020-03-12 19:00:54

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

 

应用场景

需要知道用户的IP地址来分析问题,用户不知道怎么操作,这个时候把编译好的ip.exe发给对方运行截屏即可

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

 

运行效果(win10操作系统)

 

代码

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文件

 

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

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!