Bläddra i källkod

Add server2ip function & Fix tcpping exceptions

章鱼DS 5 år sedan
förälder
incheckning
1dacafb6e1
1 ändrade filer med 21 tillägg och 9 borttagningar
  1. 21 9
      luci-app-ssr-plus/root/usr/bin/ssr-switch

+ 21 - 9
luci-app-ssr-plus/root/usr/bin/ssr-switch

@@ -35,6 +35,15 @@ uci_get_by_type() {
 DEFAULT_SERVER=$(uci_get_by_type global global_server)
 CURRENT_SERVER=$DEFAULT_SERVER
 
+#获取服务器ip
+server2ip() {
+    if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
+        echo $1
+    else
+        echo $(nslookup $1 | grep 'Address 1' | awk -F ': ' '{ print $2 }')
+    fi
+}
+
 #判断代理是否正常
 check_proxy() {
 	local result=0
@@ -62,16 +71,18 @@ check_proxy() {
 test_proxy() {
 	local servername=$(uci_get_by_name $1 server)
 	local serverport=$(uci_get_by_name $1 server_port)
+	local serverip=$(server2ip $servername)
+	ipset add ss_spec_wan_ac $serverip 2>/dev/null
+	ret_ac=$?
 	ret=$(tcpping -c 3 -p $serverport $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }' | awk -F "." '{ print $1 }')
-	[ -z "$ret" ] && return 1
-	[ "$ret" -gt "50" ] && return 1
-	ipset add ss_spec_wan_ac $servername 2>/dev/null
-	ret=$?
+	#echo "$(date "+%Y-%m-%d %H:%M:%S") test_proxy> name: $servername, ip: $serverip, ret_ac: $ret_ac, ret_tcpping: $ret" >> /tmp/ssrplus.log
+	if [ -z "$ret" ] || [ "$ret" -gt "50" ]; then
+		[ "$ret_ac" == "0" ] && ipset del ss_spec_wan_ac $serverip 2>/dev/null
+		return 1
+	fi
 	/usr/bin/ssr-check $servername $serverport $switch_time
 	local ret2=$?
-	if [ "$ret" == "0" ]; then
-		ipset del ss_spec_wan_ac $servername 2>/dev/null
-	fi
+	[ "$ret_ac" == "0" ] && ipset del ss_spec_wan_ac $serverip 2>/dev/null
 	if [ "$ret2" == "0" ]; then
 		return 0
 	else
@@ -87,12 +98,13 @@ search_proxy() {
 	[ "$1" == "$CURRENT_SERVER" ] && return 0
 	local servername=$(uci_get_by_name $1 server)
 	local serverport=$(uci_get_by_name $1 server_port)
-	ipset add ss_spec_wan_ac $servername 2>/dev/null
+	local serverip=$(server2ip $servername)
+	ipset add ss_spec_wan_ac $serverip 2>/dev/null
 	ret=$?
 	/usr/bin/ssr-check $servername $serverport $switch_time
 	local ret2=$?
 	if [ "$ret" == "0" ]; then
-		ipset del ss_spec_wan_ac $servername 2>/dev/null
+		ipset del ss_spec_wan_ac $serverip 2>/dev/null
 	fi
 	if [ "$ret2" == "0" ]; then
 		server_locate=$server_count