Compare commits

..

14 Commits

Author SHA1 Message Date
remittor
ce26fdff22 Bump version to v72.20260117 2026-01-17 17:06:40 +03:00
remittor
18cc8d4115 luci: Fix typo into get_svc_buttons 2026-01-17 16:20:44 +03:00
remittor
702fe4721d luci: Fix file permissions for saved configs 2026-01-17 15:58:30 +03:00
remittor
10997a443f luci: Using dict for arguments of function 2026-01-17 15:50:46 +03:00
remittor
d91f44c287 diag: dwc: Add detect JS-challenge 2026-01-17 14:59:25 +03:00
remittor
45974e191d config: Use --comment option for strategy naming 2026-01-17 13:59:07 +03:00
remittor
42d8ee8ba6 luci: NFQWS_OPT: Block enter text with quotes 2026-01-17 13:57:49 +03:00
remittor
2ce84ee555 Bump version to v72.20260116 2026-01-16 20:22:02 +03:00
remittor
e9632267d5 makefile: Fix creation main config file 2026-01-16 20:21:10 +03:00
remittor
e3e8ba36ed diag: dwc: Add recommendations 2026-01-16 19:36:05 +03:00
remittor
438c1baa97 updater: Add uninstall oldest mdig and ip2net packages 2026-01-16 19:05:24 +03:00
remittor
d966dd605e luci: Fix checkbox enable_custom_d 2026-01-16 17:11:37 +03:00
remittor
cef8c709a1 makefile: Cleanup conffiles and install sections 2026-01-16 16:09:33 +03:00
remittor
5a7a88ccbd luci: Fix save very long textareas to file 2026-01-16 11:34:09 +03:00
9 changed files with 330 additions and 203 deletions

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-zapret PKG_NAME:=luci-app-zapret
PKG_VERSION:=72.20260115 PKG_VERSION:=72.20260117
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_LICENSE:=MIT PKG_LICENSE:=MIT
PKG_MAINTAINER:=remittor <https://github.com/remittor> PKG_MAINTAINER:=remittor <https://github.com/remittor>

View File

@@ -35,6 +35,7 @@ return baseclass.extend({
if (dns_ip && dns_ip != 'default') { if (dns_ip && dns_ip != 'default') {
cmd.push(...[ '-d', dns_ip.trim() ]); cmd.push(...[ '-d', dns_ip.trim() ]);
} }
cmd.push('-R'); // show recommendations
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;
@@ -65,7 +66,20 @@ 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 = [
'8.8.8.8', // Google
'8.8.4.4', // Google
'1.1.1.1', // Cloudflare
'1.0.0.1', // Cloudflare
'9.9.9.9', // Quad9
'149.112.112.112', // Quad9
'208.67.222.222', // OpenDNS
'208.67.220.220', // OpenDNS
'8.26.56.26', // Comodo
'8.20.247.20', // Comodo
'64.6.64.6', // Verisign
'64.6.65.6', // Verisign
];
let dns_list = [ ]; let dns_list = [ ];
dns_list.push( E('option', { value: 'dns_default' }, [ 'default' ] ) ); dns_list.push( E('option', { value: 'dns_default' }, [ 'default' ] ) );
for (let id = 0; id < DNS_LIST.length; id++) { for (let id = 0; id < DNS_LIST.length; id++) {

View File

@@ -18,14 +18,14 @@ const btn_style_success = 'btn cbi-button-success important';
return view.extend({ return view.extend({
get_svc_buttons: function(elems = { }) { get_svc_buttons: function(elems = { }) {
return { return {
enable : elems.btn_enable || document.getElementById('btn_enable'), "enable" : elems.btn_enable || document.getElementById('btn_enable'),
disable : elems.btn_disable || document.getElementById('btn_disable'), "disable" : elems.btn_disable || document.getElementById('btn_disable'),
start : elems.btn_start || document.getElementById('btn_start'), "start" : elems.btn_start || document.getElementById('btn_start'),
restart : elems.btn_restart || document.getElementById('btn_restart'), "restart" : elems.btn_restart || document.getElementById('btn_restart'),
stop : elems.btn_stop || document.getElementById('btn_stop'), "stop" : elems.btn_stop || document.getElementById('btn_stop'),
reset : elems.btn_reset || document.getElementById('btn_reset'), "reset" : elems.btn_reset || document.getElementById('btn_reset'),
diag : elems.btn_diag || document.getElementById('btn_diag'), "diag" : elems.btn_diag || document.getElementById('btn_diag'),
update : elems.btn_update || document.getElementById('btn_update'), "update" : elems.btn_update || document.getElementById('btn_update'),
}; };
}, },
@@ -289,7 +289,7 @@ return view.extend({
if (document.getElementById('cfg_erase_autohostlist').checked) { if (document.getElementById('cfg_erase_autohostlist').checked) {
opt_flags += '(erase_autohostlist)'; opt_flags += '(erase_autohostlist)';
}; };
if (document.getElementById('enable_custom_d').checked) { if (document.getElementById('cfg_enable_custom_d').checked) {
opt_flags += '(enable_custom_d)'; opt_flags += '(enable_custom_d)';
}; };
//console.log('RESET: opt_flags = ' + opt_flags); //console.log('RESET: opt_flags = ' + opt_flags);

View File

@@ -157,7 +157,14 @@ return view.extend({
if (multiline == 2) { if (multiline == 2) {
desc += '<br/>' + _('Example') + ': <a target=_blank href=%s>%s</a>'.format(tools.nfqws_opt_url); desc += '<br/>' + _('Example') + ': <a target=_blank href=%s>%s</a>'.format(tools.nfqws_opt_url);
} }
btn.onclick = () => new tools.longstrEditDialog('config', param, param, desc, rows, multiline).show(); btn.onclick = () => new tools.longstrEditDialog({
cfgsec: 'config',
cfgparam: param,
title: param,
desc: desc,
rows: rows,
multiline: multiline,
}).show();
}; };
if (tools.appName == 'zapret2') { if (tools.appName == 'zapret2') {
@@ -313,13 +320,12 @@ return view.extend({
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.autoHostListFN; o.description = tools.autoHostListFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.autoHostListFN, file: tools.autoHostListFN,
_('Auto host list'), title: _('Auto host list'),
'', desc: '',
'', rows: 15,
15 }).show();
).show();
o = s.taboption(tabname, form.Flag, 'AUTOHOSTLIST_DEBUGLOG', _('DEBUGLOG')); o = s.taboption(tabname, form.Flag, 'AUTOHOSTLIST_DEBUGLOG', _('DEBUGLOG'));
o.rmempty = false; o.rmempty = false;
@@ -329,13 +335,12 @@ return view.extend({
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.autoHostListDbgFN; o.description = tools.autoHostListDbgFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.autoHostListDbgFN, file: tools.autoHostListDbgFN,
_('Auto host debug list'), title: _('Auto host debug list'),
'', desc: '',
'', rows: 15,
15 }).show();
).show();
/* HostList settings */ /* HostList settings */
@@ -346,37 +351,37 @@ return view.extend({
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.hostsGoogleFN; o.description = tools.hostsGoogleFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.hostsGoogleFN, file: tools.hostsGoogleFN,
_('Google hostname entries'), title: _('Google hostname entries'),
_('One hostname per line.<br />Examples:'), desc: _('One hostname per line.<br />Examples:'),
'<code>youtube.com<br />googlevideo.com</code>', aux: '<code>youtube.com<br />googlevideo.com</code>',
15 rows: 15,
).show(); }).show();
o = s.taboption(tabname, form.Button, '_user_entries_btn', _('User hostname entries <HOSTLIST>')); o = s.taboption(tabname, form.Button, '_user_entries_btn', _('User hostname entries <HOSTLIST>'));
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.hostsUserFN; o.description = tools.hostsUserFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.hostsUserFN, file: tools.hostsUserFN,
_('User entries'), title: _('User entries'),
_('One hostname per line.<br />Examples:'), desc: _('One hostname per line.<br />Examples:'),
'<code>domain.net<br />sub.domain.com<br />facebook.com</code>', aux: '<code>domain.net<br />sub.domain.com<br />facebook.com</code>',
15 rows: 15,
).show(); }).show();
o = s.taboption(tabname, form.Button, '_user_excluded_entries_btn', _('User excluded hostname entries')); o = s.taboption(tabname, form.Button, '_user_excluded_entries_btn', _('User excluded hostname entries'));
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.hostsUserExcludeFN; o.description = tools.hostsUserExcludeFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.hostsUserExcludeFN, file: tools.hostsUserExcludeFN,
_('User excluded entries'), title: _('User excluded entries'),
_('One hostname per line.<br />Examples:'), desc: _('One hostname per line.<br />Examples:'),
'<code>domain.net<br />sub.domain.com<br />gosuslugi.ru</code>', aux: '<code>domain.net<br />sub.domain.com<br />gosuslugi.ru</code>',
15 rows: 15,
).show(); }).show();
add_delim(s); add_delim(s);
@@ -384,37 +389,37 @@ return view.extend({
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.iplstExcludeFN; o.description = tools.iplstExcludeFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.iplstExcludeFN, file: tools.iplstExcludeFN,
_('Excluded IP filter'), title: _('Excluded IP filter'),
_('Patterns can be strings or regular expressions. Each pattern in a separate line<br />Examples:'), desc: _('Patterns can be strings or regular expressions. Each pattern in a separate line<br />Examples:'),
'<code>128.199.0.0/16<br />34.217.90.52<br />162.13.190.77</code>', aux: '<code>128.199.0.0/16<br />34.217.90.52<br />162.13.190.77</code>',
15 rows: 15,
).show(); }).show();
o = s.taboption(tabname, form.Button, '_user_ip_filter_btn', _('User IP entries')); o = s.taboption(tabname, form.Button, '_user_ip_filter_btn', _('User IP entries'));
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.iplstUserFN; o.description = tools.iplstUserFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.iplstUserFN, file: tools.iplstUserFN,
_('User IP filter'), title: _('User IP filter'),
_('Patterns can be strings or regular expressions. Each pattern in a separate line<br />Examples:'), desc: _('Patterns can be strings or regular expressions. Each pattern in a separate line<br />Examples:'),
'<code>128.199.0.0/16<br />34.217.90.52<br />162.13.190.77</code>', aux: '<code>128.199.0.0/16<br />34.217.90.52<br />162.13.190.77</code>',
15 rows: 15,
).show(); }).show();
o = s.taboption(tabname, form.Button, '_user_excluded_ip_filter_btn', _('User excluded IP entries')); o = s.taboption(tabname, form.Button, '_user_excluded_ip_filter_btn', _('User excluded IP entries'));
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = tools.iplstUserExcludeFN; o.description = tools.iplstUserExcludeFN;
o.onclick = () => new tools.fileEditDialog( o.onclick = () => new tools.fileEditDialog({
tools.iplstUserExcludeFN, file: tools.iplstUserExcludeFN,
_('User excluded IP filter'), title: _('User excluded IP filter'),
_('Patterns can be strings or regular expressions. Each pattern in a separate line<br />Examples:'), desc: _('Patterns can be strings or regular expressions. Each pattern in a separate line<br />Examples:'),
'<code>128.199.0.0/16<br />34.217.90.52<br />162.13.190.77</code>', aux: '<code>128.199.0.0/16<br />34.217.90.52<br />162.13.190.77</code>',
15 rows: 15,
).show(); }).show();
add_delim(s); add_delim(s);
@@ -425,7 +430,7 @@ return view.extend({
o.inputtitle = _('Edit'); o.inputtitle = _('Edit');
o.inputstyle = 'edit btn'; o.inputstyle = 'edit btn';
o.description = fn; o.description = fn;
o.onclick = () => new tools.fileEditDialog(fn, name, '', '', 15).show(); o.onclick = () => new tools.fileEditDialog({ file: fn, title: name, rows: 15}).show();
} }
/* custom.d files */ /* custom.d files */
@@ -467,7 +472,7 @@ return view.extend({
desc += '<a target=_blank href=' + url + '>' + filename + '</a>'; desc += '<a target=_blank href=' + url + '>' + filename + '</a>';
} }
} }
o.onclick = () => new tools.fileEditDialog(fn, name, desc, '', 15).show(); o.onclick = () => new tools.fileEditDialog({ file: fn, title: name, desc: desc, rows: 15}).show();
} }
let map_promise = m.render(); let map_promise = m.render();

View File

@@ -320,14 +320,18 @@ return baseclass.extend({
}, },
fileEditDialog: baseclass.extend({ fileEditDialog: baseclass.extend({
__init__: function(file, title, desc, aux = null, rows = 10, callback, file_exists = false) { __init__: function(opts = {})
this.file = file; {
this.title = title; Object.assign(this, {
this.desc = desc; file: '',
this.aux = aux; title: '',
this.rows = rows, desc: '',
this.callback = callback; aux: '',
this.file_exists = file_exists; rows: 10,
callback: null,
file_exists: false,
setperm: 644,
}, opts);
}, },
load: function() { load: function() {
@@ -370,40 +374,62 @@ return baseclass.extend({
]); ]);
}, },
handleSaveAdv: async function(ev) { writeAdv: async function(fileName, data, chunkSize = 8000)
let txt = document.getElementById('widget.modal_content'); {
let value = txt.value.trim().replace(/\r\n/g, '\n'); let tmpFile = fileName + '.tmp';
if (value.length > 0) {
value += '\n';
}
let data = value.replace(/'/g, `'\"'\"'`);
let chunkSize = 8000;
try { try {
for (let wsize = -1; wsize < data.length; wsize += chunkSize) { for (let wsize = 0; wsize <= data.length; wsize += chunkSize) {
let chunk = ''; let chunk = data.slice(wsize, wsize + chunkSize);
if (wsize < 0) { if (wsize > 0 && chunk.length == 0) {
wsize = 0; break; // EOF
} }
if (data.length > 0) { chunk = chunk.replace(/'/g, `'\"'\"'`);
chunk = data.slice(wsize, wsize + chunkSize); let teeArg = (wsize === 0) ? '' : '-a';
} let cmd = `printf %s '${chunk}' | tee ${teeArg} '${tmpFile}'`;
let teeArg = (wsize === 0) ? '' : '-a ';
let cmd = `printf %s '${chunk}' | tee ${teeArg} '${this.file}'`;
let res = await fs.exec('/bin/busybox', [ 'sh', '-c', cmd ]); let res = await fs.exec('/bin/busybox', [ 'sh', '-c', cmd ]);
if (res.code !== 0) { if (res.code !== 0) {
throw new Error('tee failed, rc = ' + res.code); throw new Error('tee failed, rc = ' + res.code);
} }
} }
if (this.setperm) {
let res = await fs.exec('/bin/busybox', [ 'chmod', '644', tmpFile ]);
if (res.code != 0) {
throw new Error('chmod failed, rc = ' + res.code);
}
}
let res = await fs.exec('/bin/busybox', [ 'mv', '-f', tmpFile, fileName ]);
if (res.code != 0) {
throw new Error('mv failed, rc = ' + res.code);
}
} catch(e) {
try {
await fs.exec('/bin/busybox', [ 'rm', '-f', tmpFile ]);
} catch(e2) {
// nothing
}
throw e;
}
return fs.stat(fileName);
},
handleSaveAdv: async function(ev)
{
let txt = document.getElementById('widget.modal_content');
let value = txt.value.trim().replace(/\r\n/g, '\n');
if (value.length > 0) {
value += '\n';
}
return this.writeAdv(this.file, value).then(async rc => {
txt.value = value; txt.value = value;
ui.addNotification(null, E('p', _('Contents have been saved.')), 'info'); ui.addNotification(null, E('p', _('Contents have been saved.')), 'info');
if (this.callback) { if (this.callback) {
return this.callback(rc); return this.callback(rc);
} }
} catch(e) { }).catch(e => {
ui.addNotification(null, E('p', _('Unable to save the contents') + ': %s'.format(e.message))); ui.addNotification(null, E('p', _('Unable to save the contents') + ': %s'.format(e.message)));
} finally { }).finally(() => {
ui.hideModal(); ui.hideModal();
} });
}, },
error: function(e) { error: function(e) {
@@ -439,13 +465,16 @@ return baseclass.extend({
}), }),
longstrEditDialog: baseclass.extend({ longstrEditDialog: baseclass.extend({
__init__: function(cfgsec, cfgparam, title, desc, rows = 10, multiline = false) { __init__: function(opts = {})
this.cfgsec = cfgsec; {
this.cfgparam = cfgparam; Object.assign(this, {
this.title = title; cfgsec: '',
this.desc = desc; cfgparam: '',
this.rows = rows; title: '',
this.multiline = multiline; desc: '',
rows: 10,
multiline: false // may be 2
}, opts);
env_tools.load_env(this); env_tools.load_env(this);
}, },
@@ -509,6 +538,10 @@ return baseclass.extend({
if (value != "" && value != "\t") { if (value != "" && value != "\t") {
value = '\n' + value + '\n'; value = '\n' + value + '\n';
if (this.multiline == 2) { if (this.multiline == 2) {
if (value.includes("'") || value.includes('"')) {
alert(_('Unable to save the contents') + ':\n' + _('text cannot contain quotes!'));
return false;
}
value = value.replace(/"/g, ''); value = value.replace(/"/g, '');
value = value.replace(/'/g, ''); value = value.replace(/'/g, '');
} }

View File

@@ -5,7 +5,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=zapret PKG_NAME:=zapret
PKG_VERSION:=72.20260115 PKG_VERSION:=72.20260117
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_MAINTAINER:=bol-van PKG_MAINTAINER:=bol-van
@@ -14,8 +14,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=76764ad6b0ee7d3991c97e7b8c24d53189d25c28 PKG_SOURCE_VERSION:=c849e55ef0f1c244206f5a05ff7b1ab41a3824ee
PKG_SOURCE_DATE:=2026-01-15 PKG_SOURCE_DATE:=2026-01-17
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz #PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz? #PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
@@ -56,87 +56,99 @@ define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR)/mdig $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(PKG_BUILD_DIR)/mdig $(TARGET_CONFIGURE_OPTS)
endef endef
ZAPRET_DIR := /opt/zapret
define ZAPRET_CONFFILES_LIST
$(ZAPRET_DIR)/config
$(ZAPRET_DIR)/ipset/zapret-hosts-google.txt
$(ZAPRET_DIR)/ipset/zapret-hosts-user.txt
$(ZAPRET_DIR)/ipset/zapret-hosts-user-exclude.txt
$(ZAPRET_DIR)/ipset/zapret-ip-exclude.txt
$(ZAPRET_DIR)/ipset/zapret-hosts-auto.txt
$(ZAPRET_DIR)/ipset/cust1.txt
$(ZAPRET_DIR)/ipset/cust2.txt
$(ZAPRET_DIR)/ipset/cust3.txt
$(ZAPRET_DIR)/ipset/cust4.txt
$(ZAPRET_DIR)/init.d/openwrt/custom.d/10-script.sh
$(ZAPRET_DIR)/init.d/openwrt/custom.d/20-script.sh
$(ZAPRET_DIR)/init.d/openwrt/custom.d/50-script.sh
$(ZAPRET_DIR)/init.d/openwrt/custom.d/60-script.sh
$(ZAPRET_DIR)/init.d/openwrt/custom.d/90-script.sh
endef
$(eval ZAPRET_CONFFILES := $(foreach file,$(ZAPRET_CONFFILES_LIST),$(strip $(file))))
define Package/$(PKG_NAME)/conffiles define Package/$(PKG_NAME)/conffiles
/opt/zapret/config $(ZAPRET_CONFFILES_LIST)
/opt/zapret/ipset/zapret-hosts-google.txt
/opt/zapret/ipset/zapret-hosts-user.txt
/opt/zapret/ipset/zapret-hosts-user-exclude.txt
/opt/zapret/ipset/zapret-ip-exclude.txt
/opt/zapret/ipset/zapret-hosts-auto.txt
/opt/zapret/init.d/openwrt/custom.d/10-script.sh
/opt/zapret/init.d/openwrt/custom.d/20-script.sh
/opt/zapret/init.d/openwrt/custom.d/50-script.sh
/opt/zapret/init.d/openwrt/custom.d/60-script.sh
/opt/zapret/init.d/openwrt/custom.d/90-script.sh
endef endef
define Package/$(PKG_NAME)/install define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/opt/zapret $(INSTALL_DIR) $(1)$(ZAPRET_DIR)
$(INSTALL_DIR) $(1)/opt/zapret/$(MAKE_PATH) $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/$(MAKE_PATH)
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/nfqws $(1)/opt/zapret/$(MAKE_PATH)/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/nfqws $(1)$(ZAPRET_DIR)/$(MAKE_PATH)/
$(INSTALL_DIR) $(1)/opt/zapret/ip2net $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/ip2net
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ip2net/ip2net $(1)/opt/zapret/ip2net/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/ip2net/ip2net $(1)$(ZAPRET_DIR)/ip2net/
$(INSTALL_DIR) $(1)/opt/zapret/mdig $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/mdig
$(INSTALL_BIN) $(PKG_BUILD_DIR)/mdig/mdig $(1)/opt/zapret/mdig/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/mdig/mdig $(1)$(ZAPRET_DIR)/mdig/
$(INSTALL_DIR) $(1)/opt/zapret/common $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/common
$(CP) $(PKG_BUILD_DIR)/common/* $(1)/opt/zapret/common/ $(CP) $(PKG_BUILD_DIR)/common/* $(1)$(ZAPRET_DIR)/common/
#$(INSTALL_DIR) $(1)/opt/zapret/docs #$(INSTALL_DIR) $(1)$(ZAPRET_DIR)/docs
#$(CP) $(PKG_BUILD_DIR)/docs/* $(1)/opt/zapret/docs/ #$(CP) $(PKG_BUILD_DIR)/docs/* $(1)$(ZAPRET_DIR)/docs/
$(INSTALL_DIR) $(1)/opt/zapret/files $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/files
$(CP) $(PKG_BUILD_DIR)/files/* $(1)/opt/zapret/files/ $(CP) $(PKG_BUILD_DIR)/files/* $(1)$(ZAPRET_DIR)/files/
$(CP) ./files/* $(1)/opt/zapret/files/ $(CP) ./files/* $(1)$(ZAPRET_DIR)/files/
$(INSTALL_DIR) $(1)/opt/zapret/ipset $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/ipset
$(CP) $(PKG_BUILD_DIR)/ipset/* $(1)/opt/zapret/ipset/ $(CP) $(PKG_BUILD_DIR)/ipset/* $(1)$(ZAPRET_DIR)/ipset/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/blockcheck.sh $(1)/opt/zapret/blockcheck.sh $(INSTALL_BIN) $(PKG_BUILD_DIR)/blockcheck.sh $(1)$(ZAPRET_DIR)/blockcheck.sh
#$(INSTALL_DATA) $(PKG_BUILD_DIR)/config.default $(1)/opt/zapret/config.default $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/tmp
$(INSTALL_DIR) $(1)/opt/zapret/tmp $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/init.d/openwrt
$(INSTALL_DIR) $(1)/opt/zapret/init.d/openwrt $(CP) $(PKG_BUILD_DIR)/init.d/openwrt/* $(1)$(ZAPRET_DIR)/init.d/openwrt/
$(CP) $(PKG_BUILD_DIR)/init.d/openwrt/* $(1)/opt/zapret/init.d/openwrt/
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_BIN) $(PKG_BUILD_DIR)/init.d/openwrt/90-zapret $(1)/etc/hotplug.d/iface/90-zapret $(INSTALL_BIN) $(PKG_BUILD_DIR)/init.d/openwrt/90-zapret $(1)/etc/hotplug.d/iface/90-zapret
$(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./init.d.sh $(1)/etc/init.d/zapret $(INSTALL_BIN) ./init.d.sh $(1)/etc/init.d/zapret
$(INSTALL_DATA) ./config.default $(1)/opt/zapret/config.default $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/init.d
$(INSTALL_DATA) ./config.default $(1)/opt/zapret/config $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/init.d/openwrt
$(INSTALL_DATA) ./ipset/zapret-hosts-google.txt $(1)/opt/zapret/ipset/zapret-hosts-google.txt $(INSTALL_DIR) $(1)$(ZAPRET_DIR)/init.d/openwrt/custom.d
$(INSTALL_DATA) ./ipset/zapret-hosts-user.txt $(1)/opt/zapret/ipset/zapret-hosts-user.txt
$(INSTALL_DATA) ./ipset/zapret-hosts-user-exclude.txt $(1)/opt/zapret/ipset/zapret-hosts-user-exclude.txt
$(INSTALL_DATA) ./ipset/zapret-ip-exclude.txt $(1)/opt/zapret/ipset/zapret-ip-exclude.txt
$(INSTALL_DIR) $(1)/opt/zapret/ipset_def
$(INSTALL_DATA) ./ipset/zapret-hosts-google.txt $(1)/opt/zapret/ipset_def/zapret-hosts-google.txt
$(INSTALL_DATA) ./ipset/zapret-hosts-user.txt $(1)/opt/zapret/ipset_def/zapret-hosts-user.txt
$(INSTALL_DATA) ./ipset/zapret-hosts-user-exclude.txt $(1)/opt/zapret/ipset_def/zapret-hosts-user-exclude.txt
$(INSTALL_DATA) ./ipset/zapret-ip-exclude.txt $(1)/opt/zapret/ipset_def/zapret-ip-exclude.txt
$(INSTALL_DIR) $(1)/opt/zapret/init.d
$(INSTALL_DIR) $(1)/opt/zapret/init.d/openwrt
$(INSTALL_DIR) $(1)/opt/zapret/init.d/openwrt/custom.d
$(CP) ./custom.d/* $(1)/opt/zapret/init.d/openwrt/custom.d/
$(INSTALL_DIR) $(1)/etc/uci-defaults $(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_BIN) ./uci-def-cfg.sh $(1)/etc/uci-defaults/zapret-uci-def-cfg.sh $(INSTALL_BIN) ./uci-def-cfg.sh $(1)/etc/uci-defaults/zapret-uci-def-cfg.sh
# install all sh-scripts # install all sh-scripts
$(CP) ./*.sh $(1)/opt/zapret/ $(CP) ./*.sh $(1)$(ZAPRET_DIR)/
rm -f $(1)/opt/zapret/init.d.sh rm -f $(1)$(ZAPRET_DIR)/init.d.sh
# Create empty conf files # Install conf files
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/ipset/zapret-hosts-auto.txt $(foreach cfg,$(ZAPRET_CONFFILES), \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/ipset/cust1.txt rel="$(cfg:$(ZAPRET_DIR)/%=%)"; \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/ipset/cust2.txt src="./$$$$rel"; \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/ipset/cust3.txt if echo "$$$$rel" | grep -q "/custom.d/"; then \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/ipset/cust4.txt src="./custom.d/$$$$(basename $$$$rel)"; \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/init.d/openwrt/custom.d/10-script.sh fi; \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/init.d/openwrt/custom.d/20-script.sh dst="$(1)$(cfg)"; \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/init.d/openwrt/custom.d/60-script.sh mkdir -p "$(1)$(dir $(cfg))"; \
$(INSTALL_DATA) /dev/null $(1)/opt/zapret/init.d/openwrt/custom.d/90-script.sh rm -f "$$$${dst}"; \
if [ -f "$$$${src}" ]; then \
$(INSTALL_DATA) "$$$${src}" "$$$${dst}"; \
else \
$(INSTALL_DATA) /dev/null "$$$${dst}"; \
fi; \
)
# Fix main config file
rm -f $(1)$(ZAPRET_DIR)/config
$(INSTALL_DATA) ./config.default $(1)$(ZAPRET_DIR)/config
$(INSTALL_DATA) ./config.default $(1)$(ZAPRET_DIR)/config.default
# Install def conf files
$(INSTALL_DIR) $(1)$(ZAPRET_DIR)/ipset_def
$(CP) ./ipset/zapret*.txt $(1)$(ZAPRET_DIR)/ipset_def/
# Fix permissions # Fix permissions
chmod 644 $(1)/opt/zapret/ipset/*.txt chmod 644 $(1)$(ZAPRET_DIR)/ipset/*.txt
chmod 644 $(1)/opt/zapret/ipset_def/*.txt chmod 644 $(1)$(ZAPRET_DIR)/ipset_def/*.txt
chmod 644 $(1)/opt/zapret/init.d/openwrt/custom.d/*.sh chmod 644 $(1)$(ZAPRET_DIR)/init.d/openwrt/custom.d/*.sh
chmod 644 $(1)/opt/zapret/config* chmod 644 $(1)$(ZAPRET_DIR)/config*
chmod 755 $(1)/opt/zapret/*.sh chmod 755 $(1)$(ZAPRET_DIR)/*.sh
chmod 755 $(1)/opt/zapret/$(MAKE_PATH)/* chmod 755 $(1)$(ZAPRET_DIR)/$(MAKE_PATH)/*
chmod 755 $(1)/opt/zapret/ip2net/* chmod 755 $(1)$(ZAPRET_DIR)/ip2net/*
chmod 755 $(1)/opt/zapret/mdig/* chmod 755 $(1)$(ZAPRET_DIR)/mdig/*
# Disable TPWS in blockcheck # Disable TPWS in blockcheck
grep -q '^SKIP_TPWS=' $(1)/opt/zapret/blockcheck.sh || sed -i '/^NFT_TABLE=blockcheck$$$$/a SKIP_TPWS=$$$${SKIP_TPWS:-1}' $(1)/opt/zapret/blockcheck.sh grep -q '^SKIP_TPWS=' $(1)$(ZAPRET_DIR)/blockcheck.sh || sed -i '/^NFT_TABLE=blockcheck$$$$/a SKIP_TPWS=$$$${SKIP_TPWS:-1}' $(1)$(ZAPRET_DIR)/blockcheck.sh
endef endef
define Package/$(PKG_NAME)/preinst define Package/$(PKG_NAME)/preinst

View File

@@ -75,7 +75,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 <HOSTLIST> --filter-tcp=443 <HOSTLIST>
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -104,7 +104,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 <HOSTLIST> --filter-tcp=443 <HOSTLIST>
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -137,7 +137,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 <HOSTLIST> --filter-tcp=443 <HOSTLIST>
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -170,7 +170,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 --filter-tcp=443
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -211,7 +211,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 --filter-tcp=443
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -252,7 +252,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443,2053,2083,2087,2096,8443' set $cfgname.config.NFQWS_PORTS_TCP='80,443,2053,2083,2087,2096,8443'
set $cfgname.config.NFQWS_PORTS_UDP='443,19294-19344,50000-50100' set $cfgname.config.NFQWS_PORTS_UDP='443,19294-19344,50000-50100'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 --filter-tcp=443
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -297,7 +297,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443,2053,2083,2087,2096,8443' set $cfgname.config.NFQWS_PORTS_TCP='80,443,2053,2083,2087,2096,8443'
set $cfgname.config.NFQWS_PORTS_UDP='443,19294-19344,50000-50100' set $cfgname.config.NFQWS_PORTS_UDP='443,19294-19344,50000-50100'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 --filter-tcp=443
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -348,7 +348,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 --filter-tcp=443
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
@@ -384,7 +384,7 @@ function set_cfg_nfqws_strat
set $cfgname.config.NFQWS_PORTS_TCP='80,443' set $cfgname.config.NFQWS_PORTS_TCP='80,443'
set $cfgname.config.NFQWS_PORTS_UDP='443' set $cfgname.config.NFQWS_PORTS_UDP='443'
set $cfgname.config.NFQWS_OPT=" set $cfgname.config.NFQWS_OPT="
# Strategy $strat --comment=Strategy__$strat
--filter-tcp=443 --filter-tcp=443
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt

View File

@@ -4,16 +4,25 @@
ZAP_TMP_DIR=/tmp/zapret_dwc ZAP_TMP_DIR=/tmp/zapret_dwc
opt_dig= opt_dig=
opt_recom=
opt_tmp_dir=
opt_test= opt_test=
while getopts "d:t" opt; do while getopts "d:RT:t" opt; do
case $opt in case $opt in
d) opt_dig="$OPTARG";; d) opt_dig="$OPTARG";;
R) opt_recom="true";; # Recommendations
T) opt_tmp_dir="$OPTARG";;
t) opt_test="true";; t) opt_test="true";;
esac esac
done done
rm -rf $ZAP_TMP_DIR [ "$opt_tmp_dir" != "" ] && ZAP_TMP_DIR="$opt_tmp_dir"
TARGET_LIST_FILE="$ZAP_TMP_DIR/targets"
[ -f "$TARGET_LIST_FILE" ] && rm -rf "$ZAP_TMP_DIR"
[ -f "$TARGET_LIST_FILE" ] && exit 3
CURL_TIMEOUT=5 CURL_TIMEOUT=5
CURL_RANGETO=65535 CURL_RANGETO=65535
@@ -40,9 +49,19 @@ if [ "$opt_dig" != "" ]; then
echo "ERROR: package \"bind-dig\" not installed!" echo "ERROR: package \"bind-dig\" not installed!"
return 12 return 12
fi fi
[ "$opt_dig" = "@" ] && opt_dig='8.8.8.8' OPT_DIG_DNS="@$opt_dig"
[ "$opt_dig" = "8" ] && opt_dig='8.8.8.8' [ "$opt_dig" = "@" ] && OPT_DIG_DNS=''
[ "$opt_dig" = "1" ] && opt_dig='1.1.1.1' [ "$opt_dig" = "8" ] && OPT_DIG_DNS='@8.8.8.8'
[ "$opt_dig" = "1" ] && OPT_DIG_DNS='@1.1.1.1'
[ "$opt_dig" = "9" ] && OPT_DIG_DNS='@9.9.9.9'
fi
if [ -f /etc/openwrt_release ]; then
CA_CERTS=/etc/ssl/certs/ca-certificates.crt
if [ ! -f $CA_CERTS ]; then
echo "ERROR: package \"ca-bundle\" not installed!"
return 15
fi
fi fi
#echo 'Original sources: https://github.com/hyperion-cs/dpi-checkers' #echo 'Original sources: https://github.com/hyperion-cs/dpi-checkers'
@@ -83,7 +102,6 @@ function trim
mkdir -p "$ZAP_TMP_DIR" mkdir -p "$ZAP_TMP_DIR"
TARGET_LIST_FILE="$ZAP_TMP_DIR/targets"
: > "$TARGET_LIST_FILE" : > "$TARGET_LIST_FILE"
IDX=0 IDX=0
while IFS= read -r line; do while IFS= read -r line; do
@@ -123,9 +141,9 @@ while IFS='|' read -r ID TAG COUNTRY PROVIDER TIMES URL; do
DST_IP= DST_IP=
RESOLVE_OPT= RESOLVE_OPT=
if [ "$opt_dig" != "" ]; then 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 ) DST_IP=$( dig +time=2 +retry=1 $OPT_DIG_DNS +short "$DOMAIN" 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -n1 )
else else
CURL_TIMEOUTS="--connect-timeout 5 --max-time 6 --speed-time 5 --speed-limit 1" CURL_TIMEOUTS="--connect-timeout 2 --max-time 3 --speed-time 3 --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" )
@@ -147,43 +165,76 @@ while IFS='|' read -r ID TAG COUNTRY PROVIDER TIMES URL; do
-A "$CURL_USERAGENT" \ -A "$CURL_USERAGENT" \
-D "$FNAME.hdr" \ -D "$FNAME.hdr" \
-o "$FNAME.body" -o "$FNAME.body"
) > "$FNAME.txt" 2>&1 & ) > "$FNAME.log" 2>&1 &
done < "$TARGET_LIST_FILE" done < "$TARGET_LIST_FILE"
wait wait
printf '%s\n' "$ZAP_TMP_DIR"/*.txt | sort | while IFS= read -r file; do FAIL_URL_LIST="$ZAP_TMP_DIR/FAIL_URL_LIST.txt"
rm -f "$FAIL_URL_LIST"
printf '%s\n' "$ZAP_TMP_DIR"/*.log | sort | while IFS= read -r file; do
[ -f "$file" ] || continue [ -f "$file" ] || continue
FNAME="${file##*/}" FILENAME="${file##*/}"
FNAME="${FNAME%.txt}" FILENAME="${FILENAME%.log}"
ID=$( echo "$FNAME" | cut -d= -f1) ID=$( echo "$FILENAME" | cut -d= -f1)
TAG=$( echo "$FNAME" | cut -d= -f2) TAG=$( echo "$FILENAME" | cut -d= -f2)
PROVIDER=$(echo "$FNAME" | cut -d= -f3 ) PROVIDER=$(echo "$FILENAME" | cut -d= -f3 )
FNAME="$ZAP_TMP_DIR/$FNAME" FNAME="$ZAP_TMP_DIR/$FILENAME"
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" IPADDR="x.x.x.x"
[ -s "$FNAME.ip" ] && IPADDR=$( cat "$FNAME.ip" ) [ -s "$FNAME.ip" ] && IPADDR=$( cat "$FNAME.ip" )
res=0
status= status=
if [ ! -f "$FNAME.hdr" ]; then if [ ! -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"
elif [ ! -f "$FNAME.body" ]; then elif [ ! -f "$FNAME.body" ]; then
status="ERROR: cannot get body" status="Possibly detected*"
elif [ ! -s "$FNAME.body" ]; then elif [ ! -s "$FNAME.body" ]; then
status="Possibly detected" status="Possibly detected"
else else
if [ "$BODY_SIZE" -le $CURL_RANGETO ]; then if [ "$BODY_SIZE" -le $CURL_RANGETO ]; then
status="Failed to complete detection (recv $BODY_SIZE bytes)" status="Failed (recv $BODY_SIZE bytes)"
res=5
else else
status="[ OK ]" status="[ OK ]"
res=100
fi
fi
if [ $res -lt 100 ] && [ -f "$FNAME.hdr" ] && [ $BODY_SIZE -eq 0 ]; then
if grep -q 'x-amzn-waf-action: challenge' "$FNAME.hdr"; then
status="WARN: tested site required JS-challenge"
res=999
fi fi
fi fi
printf '%12s / %-15s / %-13s: %s \n' "$TAG" "$IPADDR" "$PROVIDER" "$status" printf '%12s / %-15s / %-13s: %s \n' "$TAG" "$IPADDR" "$PROVIDER" "$status"
echo "$BODY_SIZE" > "$FNAME.size" echo "$BODY_SIZE" > "$FNAME.size"
if [ $res -lt 100 ]; then
URL=$( cat "$FNAME.url" )
echo "$FILENAME : $URL" >> "$FAIL_URL_LIST"
fi
done done
rm -f "$ZAP_TMP_DIR"/*.body >/dev/null 2>&1 rm -f "$ZAP_TMP_DIR"/*.body >/dev/null 2>&1
[ "$opt_recom" != "true" ] && return 0
[ ! -f "$FAIL_URL_LIST" ] && return 0
echo "==================================================="
echo "Recommendations:"
echo "Try adding the specified domains to the \"zapret-hosts-user.txt\" file:"
while IFS=' : ' read -r FILENAME URL; do
[ -z "$FILENAME" ] && continue
URL_NO_PROTO="${URL#*://}"
DOMAIN="${URL_NO_PROTO%%/*}"
URLPATH="/${URL_NO_PROTO#*/}"
[ "$URLPATH" = "/$URL_NO_PROTO" ] && URLPATH="/"
echo "$DOMAIN"
done < "$FAIL_URL_LIST"
return 0 return 0

View File

@@ -75,9 +75,13 @@ ZAP_PKG_URL=
if command -v apk >/dev/null; then if command -v apk >/dev/null; then
PKG_MGR=apk PKG_MGR=apk
ZAP_PKG_EXT=apk ZAP_PKG_EXT=apk
PKG_CHECK="apk info -e "
PKG_REMOVE="apk del --force "
elif command -v opkg >/dev/null; then elif command -v opkg >/dev/null; then
PKG_MGR=opkg PKG_MGR=opkg
ZAP_PKG_EXT=ipk ZAP_PKG_EXT=ipk
PKG_CHECK="opkg status "
PKG_REMOVE="opkg remove --force-remove "
else else
echo "ERROR: No package manager found" echo "ERROR: No package manager found"
return 1 return 1
@@ -525,6 +529,14 @@ if [ "$opt_update" != "" ]; then
if [ "$opt_forced" = true ]; then if [ "$opt_forced" = true ]; then
pkg_mgr_update pkg_mgr_update
fi fi
if ${PKG_CHECK} ${ZAPRET_CFG_NAME}-mdig >/dev/null 2>&1; then
echo "Uninstall mdig..."
${PKG_REMOVE} ${ZAPRET_CFG_NAME}-mdig
fi
if ${PKG_CHECK} ${ZAPRET_CFG_NAME}-ip2net >/dev/null 2>&1; then
echo "Uninstall ip2net..."
${PKG_REMOVE} ${ZAPRET_CFG_NAME}-ip2net
fi
echo "Install downloaded packages..." echo "Install downloaded packages..."
if [ "$PKG_MGR" != "apk" ]; then if [ "$PKG_MGR" != "apk" ]; then
opkg install --force-reinstall "$ZAP_PKG_BASE_FN" opkg install --force-reinstall "$ZAP_PKG_BASE_FN"