Files
miaoDirectory/src-server/api/addressesHandler.go
T

77 lines
1.4 KiB
Go

package api
import (
"net"
"net/http"
"os"
"strings"
"github.com/gin-gonic/gin"
)
// AddressesHandler 返回服务器所有可用的访问地址
func AddressesHandler(serverPort string) gin.HandlerFunc {
return func(c *gin.Context) {
addresses := []gin.H{}
addresses = append(addresses, gin.H{
"title": "localhost",
"url": "http://localhost" + serverPort,
})
host, _ := os.Hostname()
addrs, _ := net.LookupHost(host)
for _, addr := range addrs {
if strings.Contains(addr, "%") {
addr = strings.Split(addr, "%")[0]
}
var url string
var title string
if strings.Contains(addr, ":") {
url = "http://[" + addr + "]" + serverPort
title = "IPv6 Address (" + addr + ")"
} else {
url = "http://" + addr + serverPort
title = "IPv4 Address (" + addr + ")"
}
addresses = append(addresses, gin.H{
"title": title,
"url": url,
})
}
c.JSON(http.StatusOK, addresses)
}
}
// 判断是否是私有IP地址
func isPrivateIP(ip string) bool {
ipAddr := net.ParseIP(ip)
if ipAddr == nil {
return false
}
// 检查常见的私有IP范围
// 10.0.0.0/8
if ipAddr[0] == 10 {
return true
}
// 172.16.0.0/12
if ipAddr[0] == 172 && ipAddr[1] >= 16 && ipAddr[1] <= 31 {
return true
}
// 192.168.0.0/16
if ipAddr[0] == 192 && ipAddr[1] == 168 {
return true
}
// 127.0.0.0/8 (本地回环)
if ipAddr[0] == 127 {
return true
}
return false
}