forked from ckam/proxy_checker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheckProxy.sh
executable file
·158 lines (137 loc) · 3.68 KB
/
checkProxy.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
PROXYS='proxy.txt'
CHECK_GEOIP_URL='https://geoip-db.com/json/'
MAX_CONNECT=10
PING_COUNT=4
GOOD_ARR=()
FAIL_ARR=()
GOOD=0
FAIL=0
# COLORS #
RED='\033[1;31m'
GRN='\033[1;32m'
YEL='\033[1;33m'
BLU='\033[1;34m'
TUR='\033[1;36m'
WHT='\033[1;37m'
DEF='\033[0m'
# END OF COLORS #
# GET OPTIONS #
while getopts ":h:f:g:b:m:u:c:" OPTION
do
case $OPTION in
h)
echo "Usage: $0 [-h - help] [-f <file> - file with proxy, default proxy.txt] [-g <file> - out file for good proxies] [-b <file> - out file for bad proxies] [-u <url> - url for check proxy, default $CHECK_URL] [-m <sec> - max connect time in second, default 10 sec] [-c <count> - max ping count for AVG time, default 4 count]"
echo "proxy format: ip:port:username:password or ip:port"
exit 0;;
f)
PROXYS="$OPTARG";;
g)
GOOD_FILE="$OPTARG";;
b)
FAIL_FILE="$OPTARG";;
u)
CHECK_URL="$OPTARG";;
m)
MAX_CONNECT="$OPTARG";;
c)
PING_COUNT="$OPTARG";;
esac
done
# END OF GET OPTIONS #
# CHECK CURL IF EXIST #
if ! which curl > /dev/null
then
echo -e $RED"curl not found"$DEF
exit 1
fi
# END OF CHECK CURL IF EXIST #
# CHECK FILE WITH PROXY IF EXIST #
if ! [ -f $PROXYS > /dev/null ]
then
echo -e $RED"File with proxy not found ($PROXYS)"$DEF
exit 1
fi
# END OF CHECK FILE WITH PROXY IF EXIST #
# CHECK MAX TIME CONNECT #
RE='^[0-9]+$'
if ! [[ $MAX_CONNECT =~ $RE ]]
then
echo -e $RED"Max connect - invalid format"$DEF
exit 1
fi
# END OF CHECK MAX TIME CONNECT#
# CHECK PROXY #
for PROXY in $(<$PROXYS)
do
if [[ "${PROXY:0:1}" != "#" ]]
then
unset USER PASS
IP=$(echo $PROXY | awk -F: '{print $1}')
PORT=$(echo $PROXY | awk -F: '{print $2}')
USER=$(echo $PROXY | awk -F: '{print $3}')
PASS=$(echo $PROXY | awk -F: '{print $4}')
PROXY_TYPE=$(echo $PROXY | awk -F: '{print $5}')
# PROXY TYPE #
if [[ $PROXY_TYPE == "socks4" ]]
then
PROXY_TYPE="socks4"
PROXY_TYPE_COMMAND="--socks4 "
elif [[ $PROXY_TYPE == "socks5" ]]
then
PROXY_TYPE="socks5"
PROXY_TYPE_COMMAND="--socks5 "
elif [[ $PROXY_TYPE == "socks5-hostname" ]]
then
PROXY_TYPE="s5host"
PROXY_TYPE_COMMAND="--socks5-hostname "
elif [[ $PROXY_TYPE == "https" ]]
then
PROXY_TYPE="https "
PROXY_TYPE_COMMAND="--proxy https://"
else
PROXY_TYPE=" http "
PROXY_TYPE_COMMAND="--proxy http://"
fi
# END OF PROXY TYPE #
echo -ne "$IP\t$PORT\t$USER\t$PASS\t[$PROXY_TYPE] "
if [[ $USER && $PASS ]]
then
GEOIP=$(curl -s -m $MAX_CONNECT $PROXY_TYPE_COMMAND$IP:$PORT -U $USER:$PASS $CHECK_GEOIP_URL$IP)
CHECK=$?
else
GEOIP=$(curl -s -m $MAX_CONNECT $PROXY_TYPE_COMMAND$IP:$PORT $CHECK_GEOIP_URL$IP)
CHECK=$?
fi
if [[ $CHECK -eq 0 ]]
then
echo -ne $GRN"good"$DEF" "$(echo $GEOIP | awk -F, '{print $2}' | awk -F: '{print $2}' | cut -d '"' -f 2)" "
echo -e $WHT$(ping -c $PING_COUNT $IP | tail -1| awk '{print $4}' | cut -d '/' -f 2)$DEF
GOOD=$(($GOOD+1))
GOOD_ARR+=($PROXY)
else
echo -e $RED"dead"$DEF
FAIL=$(($FAIL+1))
FAIL_ARR+=($PROXY)
fi
fi
done
# END OF CHECK PROXY #
# SAVE GOOD PROXY TO FILE #
if [[ $GOOD_FILE ]]
then
echo -n > $GOOD_FILE
echo ${GOOD_ARR[@]} | tr " " "\n" >> $GOOD_FILE
echo -e $GRN"Good proxies save in $GOOD_FILE"$DEF
fi
# ENF OF SAVE GOOD PROXY TO FILE #
# SAVE FAIL PROXY TO FILE #
if [[ $FAIL_FILE ]]
then
echo -n > $FAIL_FILE
echo ${FAIL_ARR[@]} | tr " " "\n" >> $FAIL_FILE
echo -e $RED"Bad proxies save in $FAIL_FILE"$DEF
fi
# END OF SAVE FAIL PROXY TO FILE #
echo -e $TUR"all: $(($GOOD+$FAIL))"$DEF", "$GRN"Good proxy: $GOOD"$DEF", "$RED"bad proxy: $FAIL"$DEF
exit 0