|
@@ -12,7 +12,7 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
-//检测端口是否可用
|
|
|
+// 检测端口是否可用
|
|
|
func checkPort() (sPorts, fPorts []string) {
|
|
|
output, err := exec.Command("netstat", "-tuln").Output()
|
|
|
if err != nil {
|
|
@@ -40,7 +40,7 @@ func checkPort() (sPorts, fPorts []string) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-//测速
|
|
|
+// 测速
|
|
|
func checkSpeed(addr string, updatename bool) (float64, float64) {
|
|
|
conn, err := net.Dial("tcp", addr)
|
|
|
if err != nil {
|
|
@@ -74,7 +74,7 @@ func checkSpeed(addr string, updatename bool) (float64, float64) {
|
|
|
return dp, up
|
|
|
}
|
|
|
|
|
|
-//切换IP
|
|
|
+// 切换IP
|
|
|
func changeIP() {
|
|
|
sendMessageBeforChangeIp()
|
|
|
defer sendMessageAfterChangeIp()
|
|
@@ -136,7 +136,7 @@ func sendMessageAfterChangeIp() {
|
|
|
}()
|
|
|
}
|
|
|
|
|
|
-//获取IP
|
|
|
+// 获取IP
|
|
|
func getMyIp() (ip string) {
|
|
|
for i := 1; i <= 5; i++ {
|
|
|
client := &http.Client{
|
|
@@ -177,7 +177,7 @@ func checkIpAndPort() (sPorts, fPorts []string) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-//端口重启
|
|
|
+// 端口重启
|
|
|
func reStartPorts() {
|
|
|
tmpPort := []string{}
|
|
|
for _, port := range config.Ports {
|
|
@@ -186,3 +186,30 @@ func reStartPorts() {
|
|
|
exec.Command("/bin/sh", "-c", `kill -9 $(pidof "proxy")`).Run() //杀proxy
|
|
|
exec.Command("proxy", "socks", "-t", "tcp", "-p", strings.Join(tmpPort, ","), "--forever", "--nolog", "--daemon").Run() //启动proxy
|
|
|
}
|
|
|
+
|
|
|
+// new 获取IP
|
|
|
+func GetInterfaceIpv4Addr(interfaceName string) (addr string) {
|
|
|
+ var (
|
|
|
+ ief *net.Interface
|
|
|
+ addrs []net.Addr
|
|
|
+ ipv4Addr net.IP
|
|
|
+ err error
|
|
|
+ )
|
|
|
+ if ief, err = net.InterfaceByName(interfaceName); err != nil { // get interface
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if addrs, err = ief.Addrs(); err != nil { // get addresses
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, addr := range addrs { // get ipv4 address
|
|
|
+ if ipv4Addr = addr.(*net.IPNet).IP.To4(); ipv4Addr != nil {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ipv4Addr == nil {
|
|
|
+ //return "", errors.New(fmt.Sprintf("interface %s don't have an ipv4 address\n", interfaceName))
|
|
|
+ return ""
|
|
|
+ }
|
|
|
+ //return ipv4Addr.String(), nil
|
|
|
+ return ipv4Addr.String()
|
|
|
+}
|