mirror of
https://github.com/remittor/zapret-openwrt.git
synced 2026-01-27 12:50:35 +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('Original sources: https://github.com/hyperion-cs/dpi-checkers');
|
||||||
this.appendLog('WEB-version: https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/');
|
this.appendLog('WEB-version: https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/');
|
||||||
let cmd = [ fn_dwc_sh ];
|
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 log = '/tmp/'+tools.appName+'_dwc.log';
|
||||||
let callback = this.execAndReadCallback;
|
let callback = this.execAndReadCallback;
|
||||||
let wnd = this;
|
let wnd = this;
|
||||||
@@ -60,6 +65,19 @@ return baseclass.extend({
|
|||||||
{
|
{
|
||||||
this.pkg_arch = pkg_arch;
|
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', {
|
this.logArea = E('textarea', {
|
||||||
'id': 'widget.modal_content',
|
'id': 'widget.modal_content',
|
||||||
'readonly': true,
|
'readonly': true,
|
||||||
@@ -84,6 +102,8 @@ return baseclass.extend({
|
|||||||
|
|
||||||
ui.showModal(_('Diagnostics'), [
|
ui.showModal(_('Diagnostics'), [
|
||||||
E('div', { 'class': 'cbi-section' }, [
|
E('div', { 'class': 'cbi-section' }, [
|
||||||
|
resolve_dns,
|
||||||
|
E('br'), E('br'),
|
||||||
this.logArea,
|
this.logArea,
|
||||||
]),
|
]),
|
||||||
E('div', { 'class': 'right' }, [
|
E('div', { 'class': 'right' }, [
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (c) 2026 remittor
|
# Copyright (c) 2026 remittor
|
||||||
|
|
||||||
. /opt/zapret/comfunc.sh
|
|
||||||
|
|
||||||
ZAP_TMP_DIR=/tmp/zapret_dwc
|
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
|
rm -rf $ZAP_TMP_DIR
|
||||||
|
|
||||||
CURL_TIMEOUT=5
|
CURL_TIMEOUT=5
|
||||||
@@ -27,6 +35,16 @@ if ! echo "$CURL_INFO" | grep -q 'https'; then
|
|||||||
return 11
|
return 11
|
||||||
fi
|
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 'Original sources: https://github.com/hyperion-cs/dpi-checkers'
|
||||||
#echo 'WEB-version: https://hyperion-cs.github.io/dpi-checkers/ru/tcp-16-20/'
|
#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"
|
#echo "TAG=$TAG , COUNTRY=$COUNTRY , PROVIDER=$PROVIDER , DOMAIN=$DOMAIN , URL=$URL"
|
||||||
FNAME="$ZAP_TMP_DIR/$ID3=$TAG=$PROVIDER"
|
FNAME="$ZAP_TMP_DIR/$ID3=$TAG=$PROVIDER"
|
||||||
(
|
(
|
||||||
DST_IP="???"
|
DST_IP=
|
||||||
if [ "$DST_IP" = "" ]; then
|
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"
|
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
|
if [ -z "$DST_IP" ]; then
|
||||||
DST_IP=$( curl -4 -s $CURL_TIMEOUTS -o /dev/null -r 0-0 -w '%{remote_ip}\n' "$URL" )
|
DST_IP=$( curl -4 -s $CURL_TIMEOUTS -o /dev/null -r 0-0 -w '%{remote_ip}\n' "$URL" )
|
||||||
fi
|
fi
|
||||||
if [ -z "$DST_IP" ]; then
|
|
||||||
DST_IP="$( ping -c1 "$DOMAIN" 2>/dev/null | sed -n '1s/.*(\([0-9.]*\)).*/\1/p')"
|
|
||||||
fi
|
|
||||||
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"
|
echo "$DST_IP" > "$FNAME.ip"
|
||||||
RESOLVE_OPT="--resolve $DOMAIN:443:$DST_IP"
|
echo "$URL" > "$FNAME.url"
|
||||||
curl "$URL" \
|
curl "$URL" \
|
||||||
|
$RESOLVE_OPT \
|
||||||
--connect-timeout $CURL_CON_TIMEOUT \
|
--connect-timeout $CURL_CON_TIMEOUT \
|
||||||
--max-time $CURL_TIMEOUT \
|
--max-time $CURL_TIMEOUT \
|
||||||
--speed-time $CURL_SPEED_TIME \
|
--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"
|
FNAME="$ZAP_TMP_DIR/$FNAME"
|
||||||
BODY_SIZE=0
|
BODY_SIZE=0
|
||||||
[ -f "$FNAME.body" ] && BODY_SIZE=$( wc -c < "$FNAME.body" )
|
[ -f "$FNAME.body" ] && BODY_SIZE=$( wc -c < "$FNAME.body" )
|
||||||
|
IPADDR="x.x.x.x"
|
||||||
|
[ -s "$FNAME.ip" ] && IPADDR=$( cat "$FNAME.ip" )
|
||||||
status=
|
status=
|
||||||
if [ ! -f "$FNAME.ip" ]; then
|
if [ ! -f "$FNAME.hdr" ]; then
|
||||||
status="ERROR: cannot get IP-Addr"
|
|
||||||
elif [ ! -s "$FNAME.ip" ]; then
|
|
||||||
status="ERROR: cannot get ip-addr"
|
|
||||||
elif [ ! -f "$FNAME.hdr" ]; then
|
|
||||||
status="ERROR: cannot Get Headers"
|
status="ERROR: cannot Get Headers"
|
||||||
elif [ ! -s "$FNAME.hdr" ]; then
|
elif [ ! -s "$FNAME.hdr" ]; then
|
||||||
status="ERROR: cannot get headers"
|
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 ]"
|
status="[ OK ]"
|
||||||
fi
|
fi
|
||||||
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"
|
echo "$BODY_SIZE" > "$FNAME.size"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user