63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package network
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/yaoapp/gou"
|
|
"github.com/yaoapp/kun/exception"
|
|
)
|
|
|
|
// IP 读取IP地址
|
|
func IP() map[string]string {
|
|
res := map[string]string{}
|
|
ifaces, err := net.Interfaces()
|
|
if err != nil {
|
|
exception.New("读取网卡失败 %s", 500, err.Error()).Throw()
|
|
}
|
|
for _, i := range ifaces {
|
|
addrs, err := i.Addrs()
|
|
if err != nil {
|
|
exception.New("读取IP地址失败 %s", 500, err.Error()).Throw()
|
|
}
|
|
// handle err
|
|
for _, addr := range addrs {
|
|
var ip net.IP
|
|
switch v := addr.(type) {
|
|
case *net.IPNet:
|
|
ip = v.IP
|
|
case *net.IPAddr:
|
|
ip = v.IP
|
|
}
|
|
res[i.Name] = ip.String()
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
// ProcessIP xiang.network.IP IP地址
|
|
func ProcessIP(process *gou.Process) interface{} {
|
|
return IP()
|
|
}
|
|
|
|
// FreePort xiang.network.FreePort 获取可用端口
|
|
func FreePort() int {
|
|
addr, err := net.ResolveTCPAddr("tcp", ":0")
|
|
if err != nil {
|
|
exception.New("获取可用端口失败 %s", 500, err.Error()).Throw()
|
|
return 0
|
|
}
|
|
|
|
l, err := net.ListenTCP("tcp", addr)
|
|
if err != nil {
|
|
exception.New("获取可用端口失败 %s", 500, err.Error()).Throw()
|
|
return 0
|
|
}
|
|
|
|
defer l.Close()
|
|
return l.Addr().(*net.TCPAddr).Port
|
|
}
|
|
|
|
// ProcessFreePort xiang.network.FreePort 获取可用端口
|
|
func ProcessFreePort(process *gou.Process) interface{} {
|
|
return FreePort()
|
|
}
|