Go语言获取本地IP地址(windows)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
网上搜了很多go语言查找本地可用ip4,基本就是这一套 func main(){ addrs, err := net.InterfaceAddrs() if err != nil{ fmt.Println(err) return } for _, value := range addrs{ if ipnet, ok := value.(*net.IPNet); ok && !ipnet.IP.IsLoopback(){ if ipnet.IP.To4() != nil{ 在Go语言中获取本地IP地址,特别是在Windows操作系统上,通常有多种方法。这些方法的目的是找到与网络接口关联的IP地址,并过滤出那些真正用于网络通信而非回环接口的地址。下面将详细介绍两种常见的方法,一种是通过`net.InterfaceAddrs()`函数,另一种是通过执行`ipconfig`命令。 我们来看第一种方法,即直接使用Go的标准库`net`包。`net.InterfaceAddrs()`函数可以获取到系统中所有网络接口的地址。以下是一个简单的示例: ```go package main import ( "fmt" "net" ) func main() { addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println(err) return } for _, value := range addrs { if ipnet, ok := value.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { fmt.Println(ipnet.IP.String()) } } } } ``` 这段代码会遍历所有网络接口,检查它们是否为IP网络类型,排除回环接口,并且检查是否是IPv4地址。这种方法简单直接,但并不总是能确保找到真正用于网络通信的IP地址,因为它可能会返回多个接口的IP,包括虚拟网络接口的IP。 第二种方法是通过执行操作系统命令`ipconfig`来获取。在Windows中,`ipconfig`命令会显示详细的网络配置信息,包括默认网关,这通常是本地主机实际使用的IP地址。以下是一个使用`os/exec`包执行`ipconfig`并解析结果的示例: ```go package main import ( "bufio" "fmt" "log" "os/exec" "strings" ) func LocalIp() string { cmd := exec.Command("cmd", "/c", "ipconfig") var finalIp string reader, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } defer reader.Close() if err := cmd.Start(); err != nil { log.Fatal(err) } scanner := bufio.NewScanner(reader) for scanner.Scan() { line := scanner.Text() vidx := strings.Index(line, "IPv4") if vidx != -1 { ip4Lines := strings.Split(line, ":") if len(ip4Lines) == 2 { finalIp = strings.TrimSpace(ip4Lines[1]) break } } } if err := scanner.Err(); err != nil { log.Fatal(err) } return finalIp } func main() { ip := LocalIp() fmt.Println(ip) } ``` 这种方法的优点在于,通过查找`IPv4`关键字,我们可以找到与默认网关相关的IP地址,这通常更接近于我们期望的本地IP。然而,这种方法依赖于命令行工具,并且解析结果可能需要根据`ipconfig`输出的具体格式进行调整。 总结起来,获取本地IP地址在Go语言中有多种途径,直接使用`net`包或通过执行操作系统命令。每种方法都有其适用场景和限制,开发者应根据实际需求选择合适的方法。在Windows环境下,考虑到网络配置的复杂性,通过`ipconfig`命令的方式可能更可靠,因为它能提供默认网关信息。但在其他操作系统如Linux或macOS中,可能需要使用不同的命令或者API。
- 粉丝: 4
- 资源: 918
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助