diag: Add support resolve ip via specific dns

This commit is contained in:
remittor
2026-01-15 22:02:34 +03:00
parent dfb6b0a338
commit 508e81b66c
2 changed files with 56 additions and 16 deletions

View File

@@ -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' }, [

View File

@@ -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