当Linux服务器绑定了多个IP地址的时候,在一些特殊应用场合,需要获取主IP,即向外访问的时候IP包上带的IP,一种方式是通过shell脚本获得,另一种方式是通过其它脚本获取,本程序通过golang程序实现了Linux服务器绑定多个IP地址的时候主IP的获取。
1、程序源码如下:
package main
import (
"fmt"
"net"
"os"
"strings"
)
func main() {
MasterIP := "127.0.0.1"
conn, err := net.Dial("udp", "8.8.8.8:53")
if err != nil {
//get ether name && ether ip
interfaces, _ := net.Interfaces()
//fmt.Println(interfaces)
for _, inter := range interfaces {
if addrs, err := inter.Addrs(); err == nil {
for _, addr := range addrs {
if addr.(*net.IPNet).IP.To4() != nil &&
addr.(*net.IPNet).IP.String() != "127.0.0.1" {
//fmt.Println(inter.Name, "->", addr.(*net.IPNet).IP.String())
if len(inter.Name) >= 1 && string(inter.Name[0]) == "e" {
MasterIP = addr.(*net.IPNet).IP.String()
//fmt.Println(inter.Name, "->", addr.(*net.IPNet).IP.String())
break
}
}
}
}
}
fmt.Println(MasterIP)
os.Exit(0)
}
defer conn.Close()
MasterIP = strings.Split(conn.LocalAddr().String(), ":")[0]
fmt.Println(MasterIP)
os.Exit(0)
}
2、执行方式如下:
安装golang,yum install golang 或者 sudo apt-get install golang
执行上面的golang程序,go run masterip.go,即可获取服务器的主IP地址