From 6734e121725e45d775305be3807610313b0ad926 Mon Sep 17 00:00:00 2001 From: Jerry Date: Sat, 2 Mar 2019 20:12:41 +0800 Subject: [PATCH 1/2] ss-nat: fix hostname lookup bugs introduced in #2230 Fixes: An ipv4 address went through dig and returns nothing, causing the script to print help. ip address can be handled correctly now. --- src/ss-nat | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/ss-nat b/src/ss-nat index f4b1ebdb..4b2183f4 100755 --- a/src/ss-nat +++ b/src/ss-nat @@ -171,29 +171,35 @@ EOF while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do case "$arg" in s) - command -v dig > /dev/null && - server=$(dig +short $OPTARG) || - if ! [[ $OPTARG =~ $IP_REGEX ]] - then - loger 3 "Hostname detected for server but no dig present to resolve!" - exit 1 - else - server=$OPTARG - fi + if [[ $OPTARG =~ $IP_REGEX ]] + then + server=$OPTARG + else + if command -v dig > /dev/null + then + server=$(dig +short $OPTARG) + else + loger 3 "Hostname detected for server but no dig present to resolve!" + exit 1 + fi + fi ;; l) local_port=$OPTARG ;; S) - command -v dig > /dev/null && - SERVER=$(dig +short $OPTARG) || - if ! [[ $OPTARG =~ $IP_REGEX ]] - then - loger 3 "Hostname detected for UDP server but no dig present to resolve!" - exit 1 - else - SERVER=$OPTARG - fi + if [[ $OPTARG =~ $IP_REGEX ]] + then + SERVER=$OPTARG + else + if command -v dig > /dev/null + then + SERVER=$(dig +short $OPTARG) + else + loger 3 "Hostname detected for UDP server but no dig present to resolve!" + exit 1 + fi + fi ;; L) LOCAL_PORT=$OPTARG From 1d5f250032e146085daed2c69a5768d7a217b3d2 Mon Sep 17 00:00:00 2001 From: Jerry Date: Sat, 2 Mar 2019 20:52:09 +0800 Subject: [PATCH 2/2] ss-nat: use ping to lookup dns A records --- src/ss-nat | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/ss-nat b/src/ss-nat index 4b2183f4..8ba122e7 100755 --- a/src/ss-nat +++ b/src/ss-nat @@ -175,13 +175,7 @@ while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do then server=$OPTARG else - if command -v dig > /dev/null - then - server=$(dig +short $OPTARG) - else - loger 3 "Hostname detected for server but no dig present to resolve!" - exit 1 - fi + server=$(ping -4 -q -c 1 -s 0 -W 1 -w 1 $OPTARG| head -n 1 | sed -n 's/[^(]*(\([^)]*\)).*/\1/p') fi ;; l) @@ -192,13 +186,7 @@ while getopts ":s:l:S:L:i:I:e:a:b:w:ouUfh" arg; do then SERVER=$OPTARG else - if command -v dig > /dev/null - then - SERVER=$(dig +short $OPTARG) - else - loger 3 "Hostname detected for UDP server but no dig present to resolve!" - exit 1 - fi + SERVER=$(ping -4 -q -c 1 -s 0 -W 1 -w 1 $OPTARG| head -n 1 | sed -n 's/[^(]*(\([^)]*\)).*/\1/p') fi ;; L)