如何使用Go语言获取本机IPv4地址 | 青训营

261 阅读3分钟

如何使用Go语言获取本机IPv4地址 | 青训营

在青训营的大作业中,为了使自己的程序即使在不同的局域网和不同的设备上仍然能运行,因此实现一个获取此时运行环境下的IP地址是非常有必要的。这样我们就可以通过IP地址访问本机的视频和图片等数据。在这篇笔记中,我们将使用Go语言来执行系统命令、解析命令输出,并提取其中的IPv4地址。下面是代码和解释:

代码解析

这段代码通过Go的os/exec包来执行系统命令,并解析命令输出以获取IPv4地址。

  1. 导入所需的包:

    import (
        "fmt"
        "os/exec"
        "strings"
    )
    
  2. 主函数:

    func main() {
        // 执行ipconfig命令获取网络配置信息
        cmd := exec.Command("ipconfig")
        output, err := cmd.Output()
        if err != nil {
            fmt.Println("无法执行ipconfig命令:", err)
            return
        }
    
        // 解析输出结果,查找IPv4地址
        ipv4Address := parseIPv4(string(output))
        if ipv4Address == "" {
            fmt.Println("未找到IPv4地址")
        } else {
            fmt.Println("当前WiFi的IPv4地址:", ipv4Address)
        }
    }
    

    main函数中,首先使用exec.Command创建一个命令对象,用于执行系统命令(这里是ipconfig)。然后,使用cmd.Output()方法执行命令并获取其输出。如果执行命令出现错误,会输出错误信息。

  3. 解析IPv4地址的函数:

    func parseIPv4(output string) string {
        // 遍历输出结果,查找IPv4地址
        for _, line := range strings.Split(output, "\n") {
            fields := strings.Fields(line)
            if len(fields) >= 2 && fields[0] == "IPv4" {
                return fmt.Sprintf(fields[len(fields)-1])
            }
        }
        return ""
    }
    

    parseIPv4函数遍历命令输出的每一行,通过strings.Split将输出按行分割。然后,对每一行使用strings.Fields以空白字符为分隔符将其分割为字段,以便进一步处理。如果该行的字段数大于等于2且第一个字段为"IPv4",则说明找到了IPv4地址的相关行。函数会返回该行中的最后一个字段,即IPv4地址。

全部代码

func main() {
	// 执行ipconfig命令获取网络配置信息
	cmd := exec.Command("ipconfig")
	output, err := cmd.Output()
	if err != nil {
		fmt.Println("无法执行ipconfig命令:", err)
		return
	}

	// 解析输出结果,查找IPv4地址
	ipv4Address := parseIPv4(string(output))
	if ipv4Address == "" {
		fmt.Println("未找到IPv4地址")
	} else {
		fmt.Println("当前WiFi的IPv4地址:", ipv4Address)
	}
}

func parseIPv4(output string) string {
	// 遍历输出结果,查找IPv4地址
	//_是遍历的数组索引
	for _, line := range strings.Split(output, "\n") {
		fields := strings.Fields(line)
		if len(fields) >= 2 && fields[0] == "IPv4" {
			return fmt.Sprintf(fields[len(fields)-1])
		}
	}
	return ""
}

通过这段代码,我们可以执行系统命令获取网络配置信息,并从中提取出IPv4地址。这对于一些需要获取网络信息的任务非常有用,例如系统管理、网络诊断等。

运行结果

屏幕截图 2023-08-30 140713.png

本机IP

在搜索栏输入cmd,进入命令行,输入ipconfig

屏幕截图 2023-08-30 141459.png

赠送知识

ipconfig是一个在Windows操作系统下使用的命令行工具,用于查看和管理网络配置信息。它提供了有关计算机网络接口、IP地址、子网掩码、默认网关、DNS服务器等网络参数的详细信息。ipconfig可以帮助用户诊断网络问题,查看当前连接的网络状态以及获取网络配置信息。

通过在命令提示符(Command Prompt)或PowerShell中运行ipconfig命令,您可以查看与计算机网络连接相关的各种信息,如IPv4和IPv6地址、物理网卡、虚拟网卡(如VPN连接)、DNS配置等。常见的ipconfig命令包括:

  • ipconfig:显示当前所有网络连接的详细信息,包括IP地址、子网掩码、默认网关等。
  • ipconfig /all:显示所有网络连接的详细信息,包括物理网卡、虚拟网卡、DHCP服务器等。
  • ipconfig /release:释放当前网络连接的IP地址。
  • ipconfig /renew:重新获取当前网络连接的IP地址。
  • ipconfig /flushdns:清除DNS缓存,刷新DNS解析信息。

需要注意的是,ipconfig命令是特定于Windows操作系统的工具,类Unix-like系统(如Linux和macOS)通常使用ifconfigip命令来获取类似的网络配置信息。