Skip to content

Commit d2b8100

Browse files
committed
update generate_dnsmasq_chinalist.sh
1 parent b790c10 commit d2b8100

3 files changed

+143
-69
lines changed

generate_dnsmasq_chinalist.sh

+139-69
Original file line numberDiff line numberDiff line change
@@ -2,98 +2,168 @@
22

33
# Name: generate_dnsmasq_chinalist.sh
44
# Desription: A script which auto-download newest dnsmasq-china-list and add ipset rules to the config file.
5-
# Version: 0.1
6-
# Date: 2017-01-30
5+
# Version: 0.2
6+
# Date: 2017-03-13
77
# Author: Cokebar Chi
88
# Website: https://github.com/cokebar
99

10-
usage() {
10+
_usage() {
1111
cat <<-EOF
12-
Usage: generate_dnsmasq_chinalist [options] -f FILE
1312
14-
Valid options are:
15-
16-
-d <dns_ip> DNS IP address for the China domains (Default: 114.114.114.114)
17-
-s <ipset_name> IP set name for the China domains (If not given, ipset rules will not be generated.)
18-
-f <FILE> /path/to/output_filename
19-
-h Usage
13+
Usage: sh generate_dnsmasq_chinalist.sh [options] -o FILE
14+
Valid options are:
15+
-d, --dns <dns_ip>
16+
DNS IP address for the GfwList Domains (Default: 114.114.114.114)
17+
-p, --port <dns_port>
18+
DNS Port for the GfwList Domains (Default: 53)
19+
-s, --ipset <ipset_name>
20+
Ipset name for the China-List domains
21+
(If not given, ipset rules will not be generated.)
22+
-o, --output <FILE>
23+
/path/to/output_filename
24+
-i, --insecure
25+
Force bypass certificate validation (insecure)
26+
-h, --help Usage
2027
EOF
2128
exit $1
2229
}
2330

24-
DNS_IP=''
25-
FILE_FULLPATH=''
26-
IPSET_NAME=''
31+
_clean_and_exit(){
32+
# Clean up temp files
33+
printf 'Cleaning up...'
34+
rm -rf $_WORKING_DIR
35+
printf ' Done.\n\n'
36+
exit $1
37+
}
2738

28-
while getopts "d:s:f:h" arg; do
29-
case "$arg" in
30-
f)
31-
FILE_FULLPATH=$OPTARG
32-
;;
33-
d)
34-
DNS_IP=$OPTARG
35-
;;
36-
s)
37-
IPSET_NAME=$OPTARG
38-
;;
39-
h)
40-
usage 0
41-
;;
42-
*)
43-
echo "Invalid argument: -$OPTARG"
44-
exit 1
45-
;;
46-
esac
47-
done
39+
_check_depends(){
40+
which awk curl >/dev/null
41+
if [ $? != 0 ]; then
42+
printf '\033[31mError: Missing Dependency.\nPlease check whether you have the following binaries on you system:\nawk, curl\033[m\n'
43+
exit 3
44+
fi
45+
}
4846

49-
# Check input arguments
47+
_get_args(){
48+
_DNS_IP='114.114.114.114'
49+
_DNS_PORT='53'
50+
_IPSET_NAME=''
51+
_OUT_FILE=''
52+
_CURL_EXTARG=''
53+
_WITH_IPSET=0
5054

51-
# Check path & file name
52-
if [ -z $FILE_FULLPATH ]; then
53-
echo 'Please enter full path to the file.( Use: -f /path/to/output_filename)'
54-
exit 1
55-
else
56-
if [ -z ${FILE_FULLPATH##*/} ]; then
57-
echo 'Please enter full path to the file, include file name.'
55+
while [ ${#} -gt 0 ]; do
56+
case "${1}" in
57+
--help | -h)
58+
_usage 0
59+
;;
60+
--insecure | -i)
61+
_CURL_EXTARG='--insecure'
62+
;;
63+
--dns | -d)
64+
_DNS_IP="$2"
65+
shift
66+
;;
67+
--port | -p)
68+
_DNS_PORT="$2"
69+
shift
70+
;;
71+
--ipset | -s)
72+
_IPSET_NAME="$2"
73+
shift
74+
;;
75+
--output | -o)
76+
_OUT_FILE="$2"
77+
shift
78+
;;
79+
*)
80+
echo "Invalid argument: $1"
81+
_usage 1
82+
;;
83+
esac
84+
shift 1
85+
done
86+
87+
# Check path & file name
88+
if [ -z $_OUT_FILE ]; then
89+
echo 'Please enter full path to the file.(/path/to/output_filename)'
5890
exit 1
5991
else
60-
if [ ! -d ${FILE_FULLPATH%/*} ]; then
61-
echo "Folder do not exist: ${FILE_FULLPATH%/*}"
92+
if [ -z ${_OUT_FILE##*/} ]; then
93+
echo 'Please enter full path to the file, include file name.'
6294
exit 1
95+
else
96+
if [ ${_OUT_FILE}a != ${_OUT_FILE%/*}a ] && [ ! -d ${_OUT_FILE%/*} ]; then
97+
echo "Folder do not exist: ${_OUT_FILE%/*}"
98+
exit 1
99+
fi
63100
fi
64101
fi
65-
fi
66102

67-
# Check DNS IP
68-
if [ -z $DNS_IP ]; then
69-
DNS_IP=114.114.114.114
70-
else
71-
IP_TEST=$(echo $DNS_IP | grep -E '^((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)$')
72-
if [ "$IP_TEST" != "$DNS_IP" ]; then
103+
# Check DNS IP
104+
_IP_TEST=$(echo $_DNS_IP | grep -E '^((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)$')
105+
if [ "$_IP_TEST" != "$_DNS_IP" ]; then
73106
echo 'Please enter a valid DNS server IP address.'
74107
exit 1
75108
fi
76-
fi
77109

78-
# Check IP set name
79-
if [ -z $IPSET_NAME ]; then
80-
# Download dnsmasq-china-list and replace DNS IP
81-
echo "Download & writing file to $FILE_FULLPATH without ipset ..."
82-
( wget -O- 'https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf' || (echo "Failed to download dnsmasq-china-list"; exit 2;) ) |\
83-
sed -r 's#server=/(\S+)/(((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?))#server=/\1/'$DNS_IP'#g' >\
84-
/tmp/dnsmasq_chinalist.tmp
85-
else
86-
IPSET_TEST=$(echo $IPSET_NAME | grep -E '^\w+$')
87-
if [ "$IPSET_TEST" != "$IPSET_NAME" ]; then
88-
echo 'Please enter a valid IP set name.'
110+
# Check DNS port
111+
if [ $_DNS_PORT -lt 1 -o $_DNS_PORT -gt 65535 ]; then
112+
echo 'Please enter a valid DNS server port.'
89113
exit 1
114+
fi
115+
116+
# Check ipset name
117+
if [ -z $_IPSET_NAME ]; then
118+
_WITH_IPSET=0
119+
else
120+
_IPSET_TEST=$(echo $_IPSET_NAME | grep -E '^\w+$')
121+
if [ "$_IPSET_TEST" != "$_IPSET_NAME" ]; then
122+
echo 'Please enter a valid IP set name.'
123+
exit 1
124+
else
125+
_WITH_IPSET=1
126+
fi
127+
fi
128+
}
129+
130+
_process(){
131+
_BASE_URL='https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf'
132+
_WORKING_DIR=`mktemp -d /tmp/generate_dnsmasq_chinalist.XXXXXX`
133+
_CHINA_LIST_FILE=$_WORKING_DIR/accelerated-domains.china.conf
134+
_TMP_FILE=$_WORKING_DIR/generate_dnsmasq_chinalist.tmp
135+
136+
# Fetch China-List
137+
printf 'Fetching China-List...'
138+
curl -s -L $CURL_EXTARG -o$_CHINA_LIST_FILE $_BASE_URL
139+
if [ $? != 0 ]; then
140+
printf '\033[31mFailed to fetch China-List. Please check your Internet connection.\033[m\n'
141+
_clean_and_exit 2
142+
fi
143+
printf ' Done.\n\n'
144+
145+
# Convert
146+
if [ $_WITH_IPSET == 0 ]; then
147+
echo "Writing file to $_OUT_FILE without ipset ..."
148+
awk -v _dns="$_DNS_IP" -v _port="$_DNS_PORT" -F'/' '{printf("%s/%s/%s#%s\n",$1,$2,_dns,_port)}' $_CHINA_LIST_FILE > $_TMP_FILE
90149
else
91-
echo "Download & writing file to $FILE_FULLPATH with ipset ..."
92-
# Download dnsmasq-china-list, and replace DNS IP and add ipset rules
93-
( wget -O- 'https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf' || (echo "Failed to download dnsmasq-china-list"; exit 2;) ) |\
94-
sed -r 's#server=/(\S+)/(((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\.){3}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?))#server=/\1/'$DNS_IP'\nipset=/\1/'$IPSET_NAME'#g' >\
95-
/tmp/dnsmasq_chinalist.tmp
150+
echo "Writing file to $_OUT_FILE with ipset ..."
151+
awk -v _dns="$_DNS_IP" -v _port="$_DNS_PORT" -v _ipset="$_IPSET_NAME" -F'/' '{printf("%s/%s/%s#%s\nipset=/%s/%s\n",$1,$2,_dns,_port,_dns,_ipset)}' $_CHINA_LIST_FILE > $_TMP_FILE
96152
fi
97-
fi
153+
154+
mv $_TMP_FILE $_OUT_FILE
155+
156+
_clean_and_exit 0
157+
}
158+
159+
main() {
160+
if [ -z "$1" ]; then
161+
_usage 0
162+
else
163+
_check_depends
164+
_get_args "$@"
165+
_process
166+
fi
167+
}
98168

99-
mv /tmp/dnsmasq_chinalist.tmp $FILE_FULLPATH
169+
main "$@"

shadowsocks_watchdog.sh

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/bin/sh
22

3+
# version: 0.0.1
4+
35
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
46
wget --spider --quiet --tries=1 --timeout=10 https://www.google.com/
57
if [ "$?" == "0" ]; then

upgrade_chnroute.sh

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/bin/sh
22

3+
# version: 0.0.1
4+
35
set -e -o pipefail
46

57
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | \

0 commit comments

Comments
 (0)