mirror of
https://github.com/remittor/zapret-openwrt.git
synced 2026-01-27 04:40:34 +03:00
diag: Add support resolve ip via specific dns
This commit is contained in:
@@ -30,6 +30,11 @@ return baseclass.extend({
|
||||
this.appendLog('Original sources: https://github.com/hyperion-cs/dpi-checkers');
|
||||
this.appendLog('WEB-version: https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/');
|
||||
let cmd = [ fn_dwc_sh ];
|
||||
let resolve_dns = document.getElementById('cfg_resolve_dns');
|
||||
let dns_ip = resolve_dns.options[resolve_dns.selectedIndex].text;
|
||||
if (dns_ip && dns_ip != 'default') {
|
||||
cmd.push(...[ '-d', dns_ip.trim() ]);
|
||||
}
|
||||
let log = '/tmp/'+tools.appName+'_dwc.log';
|
||||
let callback = this.execAndReadCallback;
|
||||
let wnd = this;
|
||||
@@ -60,6 +65,19 @@ return baseclass.extend({
|
||||
{
|
||||
this.pkg_arch = pkg_arch;
|
||||
|
||||
let DNS_LIST = [ '8.8.8.8', '1.1.1.1' ];
|
||||
let dns_list = [ ];
|
||||
dns_list.push( E('option', { value: 'dns_default' }, [ 'default' ] ) );
|
||||
for (let id = 0; id < DNS_LIST.length; id++) {
|
||||
let dns_ipaddr = '' + DNS_LIST[id];
|
||||
let val = 'dns_' + dns_ipaddr.replace(/\./g, "_");
|
||||
dns_list.push( E('option', { value: val }, [ dns_ipaddr ] ));
|
||||
}
|
||||
let resolve_dns = E('label', [
|
||||
_('Resolve IP-Addr via') + ': ',
|
||||
E('select', { id: 'cfg_resolve_dns' }, dns_list)
|
||||
]);
|
||||
|
||||
this.logArea = E('textarea', {
|
||||
'id': 'widget.modal_content',
|
||||
'readonly': true,
|
||||
@@ -84,6 +102,8 @@ return baseclass.extend({
|
||||
|
||||
ui.showModal(_('Diagnostics'), [
|
||||
E('div', { 'class': 'cbi-section' }, [
|
||||
resolve_dns,
|
||||
E('br'), E('br'),
|
||||
this.logArea,
|
||||
]),
|
||||
E('div', { 'class': 'right' }, [
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) 2026 remittor
|
||||
|
||||
. /opt/zapret/comfunc.sh
|
||||
|
||||
ZAP_TMP_DIR=/tmp/zapret_dwc
|
||||
|
||||
opt_dig=
|
||||
opt_test=
|
||||
|
||||
while getopts "d:t" opt; do
|
||||
case $opt in
|
||||
d) opt_dig="$OPTARG";;
|
||||
t) opt_test="true";;
|
||||
esac
|
||||
done
|
||||
|
||||
rm -rf $ZAP_TMP_DIR
|
||||
|
||||
CURL_TIMEOUT=5
|
||||
@@ -27,6 +35,16 @@ if ! echo "$CURL_INFO" | grep -q 'https'; then
|
||||
return 11
|
||||
fi
|
||||
|
||||
if [ "$opt_dig" != "" ]; then
|
||||
if ! command -v dig >/dev/null 2>&1; then
|
||||
echo "ERROR: package \"bind-dig\" not installed!"
|
||||
return 12
|
||||
fi
|
||||
[ "$opt_dig" = "@" ] && opt_dig='8.8.8.8'
|
||||
[ "$opt_dig" = "8" ] && opt_dig='8.8.8.8'
|
||||
[ "$opt_dig" = "1" ] && opt_dig='1.1.1.1'
|
||||
fi
|
||||
|
||||
#echo 'Original sources: https://github.com/hyperion-cs/dpi-checkers'
|
||||
#echo 'WEB-version: https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/'
|
||||
|
||||
@@ -102,21 +120,25 @@ while IFS='|' read -r ID TAG COUNTRY PROVIDER TIMES URL; do
|
||||
#echo "TAG=$TAG , COUNTRY=$COUNTRY , PROVIDER=$PROVIDER , DOMAIN=$DOMAIN , URL=$URL"
|
||||
FNAME="$ZAP_TMP_DIR/$ID3=$TAG=$PROVIDER"
|
||||
(
|
||||
DST_IP="???"
|
||||
if [ "$DST_IP" = "" ]; then
|
||||
DST_IP=
|
||||
RESOLVE_OPT=
|
||||
if [ "$opt_dig" != "" ]; then
|
||||
DST_IP=$( dig +time=2 +retry=1 @$opt_dig +short "$DOMAIN" 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -n1 )
|
||||
else
|
||||
CURL_TIMEOUTS="--connect-timeout 5 --max-time 6 --speed-time 5 --speed-limit 1"
|
||||
#DST_IP=$( curl -4 -I -s $CURL_TIMEOUTS -o /dev/null -w '%{remote_ip}\n' "$URL" )
|
||||
DST_IP=$( curl -4 -I -s $CURL_TIMEOUTS -o /dev/null -w '%{remote_ip}\n' "$URL" )
|
||||
if [ -z "$DST_IP" ]; then
|
||||
DST_IP=$( curl -4 -s $CURL_TIMEOUTS -o /dev/null -r 0-0 -w '%{remote_ip}\n' "$URL" )
|
||||
fi
|
||||
if [ -z "$DST_IP" ]; then
|
||||
DST_IP="$( ping -c1 "$DOMAIN" 2>/dev/null | sed -n '1s/.*(\([0-9.]*\)).*/\1/p')"
|
||||
fi
|
||||
fi
|
||||
echo "$URL" > "$FNAME.url"
|
||||
if [ "$DST_IP" = "" ]; then
|
||||
DST_IP=$( ping -c1 "$DOMAIN" 2>/dev/null | sed -n '1s/.*(\([0-9.]*\)).*/\1/p' )
|
||||
fi
|
||||
[ "$DST_IP" != "" ] && RESOLVE_OPT="--resolve $DOMAIN:443:$DST_IP"
|
||||
echo "$DST_IP" > "$FNAME.ip"
|
||||
RESOLVE_OPT="--resolve $DOMAIN:443:$DST_IP"
|
||||
echo "$URL" > "$FNAME.url"
|
||||
curl "$URL" \
|
||||
$RESOLVE_OPT \
|
||||
--connect-timeout $CURL_CON_TIMEOUT \
|
||||
--max-time $CURL_TIMEOUT \
|
||||
--speed-time $CURL_SPEED_TIME \
|
||||
@@ -140,12 +162,10 @@ printf '%s\n' "$ZAP_TMP_DIR"/*.txt | sort | while IFS= read -r file; do
|
||||
FNAME="$ZAP_TMP_DIR/$FNAME"
|
||||
BODY_SIZE=0
|
||||
[ -f "$FNAME.body" ] && BODY_SIZE=$( wc -c < "$FNAME.body" )
|
||||
IPADDR="x.x.x.x"
|
||||
[ -s "$FNAME.ip" ] && IPADDR=$( cat "$FNAME.ip" )
|
||||
status=
|
||||
if [ ! -f "$FNAME.ip" ]; then
|
||||
status="ERROR: cannot get IP-Addr"
|
||||
elif [ ! -s "$FNAME.ip" ]; then
|
||||
status="ERROR: cannot get ip-addr"
|
||||
elif [ ! -f "$FNAME.hdr" ]; then
|
||||
if [ ! -f "$FNAME.hdr" ]; then
|
||||
status="ERROR: cannot Get Headers"
|
||||
elif [ ! -s "$FNAME.hdr" ]; then
|
||||
status="ERROR: cannot get headers"
|
||||
@@ -160,7 +180,7 @@ printf '%s\n' "$ZAP_TMP_DIR"/*.txt | sort | while IFS= read -r file; do
|
||||
status="[ OK ]"
|
||||
fi
|
||||
fi
|
||||
printf '%12s / %-13s: %s \n' "$TAG" "$PROVIDER" "$status"
|
||||
printf '%12s / %-15s / %-13s: %s \n' "$TAG" "$IPADDR" "$PROVIDER" "$status"
|
||||
echo "$BODY_SIZE" > "$FNAME.size"
|
||||
done
|
||||
|
||||
|
||||
Reference in New Issue
Block a user