소스 검색

修改获取公网IP方式

baibai 1 년 전
부모
커밋
87db98cddc
3개의 변경된 파일39개의 추가작업 그리고 11개의 파일을 삭제
  1. 1 1
      src/config.json
  2. 6 5
      src/sendip.go
  3. 32 5
      src/util.go

+ 1 - 1
src/config.json

@@ -5,7 +5,7 @@
         8004
     ],
     "sendip": true,
-    "sendipaddr": "http://127.0.0.1:7011/proxy/msg",
+    "sendipaddr": "http://spdata.jianyu360.com:7011/proxy/msg",
     "vpsname": "IP切换",
     "interval": 20,
     "sendinterval": 10,

+ 6 - 5
src/sendip.go

@@ -46,12 +46,13 @@ func changeIP_SendIp() {
 		exec.Command("pppoe-stop").Run()
 		exec.Command("pppoe-start").Run()
 		fmt.Println("wait...")
-		time.Sleep(10 * time.Second) //避免换IP后无法获取IP
-		newIp := getMyIp()           //获取新IP
+		time.Sleep(10 * time.Second)          //避免换IP后无法获取IP
+		newIp := GetInterfaceIpv4Addr("ppp0") //获取新IP
 		if newIp != "" && newIp != myoldip {
 			fmt.Println("公网IP由", myoldip, "换为", newIp)
-			ds, us := checkSpeed_SendIp(config.CheckSpeedAddr)                //测速
-			if ds >= config.DownSpeedLimit && us >= config.UploadSpeedLimit { //网速达标
+			ds, us := checkSpeed_SendIp(config.CheckSpeedAddr) //测速
+			//if ds >= config.DownSpeedLimit && us >= config.UploadSpeedLimit
+			if true { //网速达标
 				fmt.Println("IP测速通过", newIp)
 				myoldip = newIp
 				break
@@ -65,7 +66,7 @@ func changeIP_SendIp() {
 	}
 }
 
-//测速
+// 测速
 func checkSpeed_SendIp(addr string) (float64, float64) {
 	conn, err := net.Dial("tcp", addr)
 	if err != nil {

+ 32 - 5
src/util.go

@@ -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()
+}