golang获取当亲ip

发布时间:2024-12-23 03:30:43

无论是在开发网站还是网络爬虫,获取当前IP地址都是非常常见的需求。在Golang中,我们可以使用一些库来轻松获取当前IP地址,并且可以根据实际需要进行进一步处理。

获取当前IP地址

要获取当前IP地址,我们可以使用net包中提供的函数。下面是一个简单的示例代码:

package main

import (
	"fmt"
	"net"
)

func main() {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		fmt.Println(err)
		return
	}

	for _, addr := range addrs {
		if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				fmt.Println(ipnet.IP.String())
			}
		}
	}
}

在上面的代码中,我们首先调用net.InterfaceAddrs()函数获取所有网络接口的地址列表。然后,我们逐个遍历这些地址,并判断是否为IPv4地址。最后,输出获取到的IPv4地址。

获取公网IP地址

除了获取本地IP地址,有时我们还需要获取公网IP地址。在Golang中,我们可以通过发送HTTP请求到一个特定的API来获取公网IP地址。下面是一个示例代码:

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	resp, err := http.Get("https://api.ipify.org?format=text")
	if err != nil {
		fmt.Println(err)
		return
	}

	defer resp.Body.Close()

	ip, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(string(ip))
}

在这个例子中,我们使用http包发送一个GET请求到https://api.ipify.org?format=text。这个API会返回当前的公网IP地址。然后,我们读取返回的内容并输出到控制台。

处理IP地址

获取到IP地址后,我们可能需要对其进行进一步的处理。例如,判断IP地址的类型(IPv4还是IPv6),将IP地址转换为整数等。

对于IP地址的类型判断,Golang的net包提供了一系列的函数,如net.ParseIP()、net.ParseCIDR()等。我们可以使用这些函数来判断和解析IP地址。

对于IP地址的转换,我们可以使用net.IP对象的方法。例如,调用net.IPv4()函数将IPv4地址转换为net.IP对象,然后可以使用该对象的方法进行进一步的操作。

通过上述方式,我们可以轻松地在Golang中获取当前的IP地址,并且根据实际需求进行进一步处理。无论是开发网络爬虫、进行网络监控还是构建网络应用程序,获取IP地址都是非常有用的功能。

相关推荐