转载 Python/Golang获取 IPv4 和 IPv6 地址
本站是个人站点,用于作者实战学习前端和后台知识,请勿用于商业用途,仅供个人测试学习之用,请遵守中国法律法规
通过 Python/Golang 获取公网 IPv4 和 IPv6 地址,还可以返回是 IPv4 还是 IPv6 访问优先。
1. Python/Golang获取 IPv4 地址
1.1 Python 获取本机公网IPv4地址
- 输入示例
#!/usr/bin/python3
import requests
# 获取 IPv4 地址接口; https://4.wsmdn.top
r = requests.get('https://4.wsmdn.top')
clientIP = r.text
print(clientIP)
- 输出示例
106.224.145.147
1.2 Golang 获取本机公网IPv4 地址
- 输入示例
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 获取 IPv4 地址接口; https://4.wsmdn.top
responseClient, errClient := http.Get("https://4.wsmdn.top")
if errClient != nil {
fmt.Printf("获取外网 IP 失败,请检查网络\n")
panic(errClient)
}
defer responseClient.Body.Close()
// 获取 http response 的 body
body, _ := ioutil.ReadAll(responseClient.Body)
clientIP := string(body)
print(clientIP)
}
- 输出示例
106.224.145.147
2. Python/Golang获取 IPv6 地址
2.1 Python 获取本机公网IPv6地址
- 输入示例
#!/usr/bin/python3
import requests
r = requests.get('https://6.wsmdn.top')
clientIP = r.text
print(clientIP)
- 输出示例
2408:824c:200::2b8b:336f:cc9c
2.2 Golang 获取本机公网IPv6地址
- 输入示例
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
responseClient, errClient := http.Get("https://6.wsmdn.top")
if errClient != nil {
fmt.Printf("获取外网 IP 失败,请检查网络\n")
panic(errClient)
}
defer responseClient.Body.Close()
// 获取 http response 的 body
body, _ := ioutil.ReadAll(responseClient.Body)
clientIP := string(body)
print(clientIP)
}
- 输出示例
2408:824c:200::2b8b:336f:cc9c
3. 测试网络是IPv4还是IPv6访问优先
3.1 Python 测试网络是IPv4还是IPv6访问优先
- 输入示例
#!/usr/bin/python3
import requests
## HTTP GET,返回的是纯文本地址
r = requests.get('https://test.wsmdn.top')
IP = r.text.strip()
## 返回的地址含冒号即 IPv6,否则为 IPv4
IPVersion = 'IPv6' if ':' in IP else 'IPv4'
## 打印
print('IP:',IP)
print('IPVersion:',IPVersion)
- 输出示例
## 返回示例1(IPv4 访问优先)
IP: 106.224.145.147
IPVersion: IPv4
## 返回示例2(IPv6 访问优先)
IP: 2408:824c:200::2b8b:336f:cc9c
IPVersion: IPv6
3.2 Golang 测试网络是IPv4还是IPv6访问优先
- 输入示例
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
responseClient, errClient := http.Get("https://test.wsmdn.top") // 获取外网 IP
if errClient != nil {
fmt.Printf("获取外网 IP 失败,请检查网络\n")
panic(errClient)
}
// 程序在使用完 response 后必须关闭 response 的主体。
defer responseClient.Body.Close()
body, _ := ioutil.ReadAll(responseClient.Body)
IP := strings.TrimSpace(string(body))
// 返回的地址含冒号即 IPv6,否则为 IPv4
IPVersion := "IPv4"
if strings.Contains(IP, ":") {
IPVersion = "IPv6"
}
fmt.Printf("IP: %s\n", IP)
fmt.Printf("IPVersion: %s\n", IPVersion)
}
- 输出示例
## 返回示例1(IPv4 访问优先)
IP: 106.224.145.147
IPVersion: IPv4
## 返回示例2(IPv6 访问优先)
IP: 2408:824c:200::2b8b:336f:cc9c
IPVersion: IPv6