mirror of
https://github.com/bol-van/zapret.git
synced 2026-09-18 14:31:59 +09:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f46e91342 | |||
| d6f929ee5c | |||
| 6bdec3f87c | |||
| 1a6a2b702e | |||
| e95a06c7ee | |||
| afce40981c | |||
| 33720dee60 | |||
| 994e9c3488 | |||
| d4cfb6800f | |||
| a36e6ee60e | |||
| 813fe416f8 | |||
| 8e766744b6 | |||
| 0bc0997191 | |||
| b056ba95a1 | |||
| bae45abfbf |
@@ -1776,6 +1776,11 @@ check_domain_http_tcp()
|
|||||||
|
|
||||||
[ "$SKIP_IPBLOCK" = 1 ] || check_dpi_ip_block $1 $4
|
[ "$SKIP_IPBLOCK" = 1 ] || check_dpi_ip_block $1 $4
|
||||||
|
|
||||||
|
[ "$SKIP_TPWS" = 1 ] || {
|
||||||
|
echo
|
||||||
|
tpws_check_domain_http_bypass $1 $3 $4
|
||||||
|
}
|
||||||
|
|
||||||
[ "$SKIP_PKTWS" = 1 ] || {
|
[ "$SKIP_PKTWS" = 1 ] || {
|
||||||
echo
|
echo
|
||||||
echo preparing $PKTWSD redirection
|
echo preparing $PKTWSD redirection
|
||||||
|
|||||||
@@ -576,3 +576,13 @@ blockcheck: CURL_HTTPS_GET=1 suppresses -I curl option for https (HEAD -> GET)
|
|||||||
73.4
|
73.4
|
||||||
|
|
||||||
blockcheck: fix broken dns cache
|
blockcheck: fix broken dns cache
|
||||||
|
|
||||||
|
73.5
|
||||||
|
|
||||||
|
nfqws: fix broken l7proto profile rediscovery
|
||||||
|
nfqws: backport from nfqws2 nl80211 ssid discovery fix for newer kernels
|
||||||
|
|
||||||
|
73.6
|
||||||
|
|
||||||
|
ipset: remove zapret-info based scripts because it's gone
|
||||||
|
blockcheck: fix tpws test regression
|
||||||
|
|||||||
+1
-3
@@ -1,5 +1,3 @@
|
|||||||
# zapret v72.2
|
|
||||||
|
|
||||||
# SCAMMER WARNING
|
# SCAMMER WARNING
|
||||||
|
|
||||||
This software is free and open source under [MIT license](./LICENSE.txt).
|
This software is free and open source under [MIT license](./LICENSE.txt).
|
||||||
@@ -275,7 +273,7 @@ Fakes are separate generated by nfqws packets carrying false information for DPI
|
|||||||
`nfqws` cannot redistribute data between original TCP segments. The error displayed is 'message too long'.
|
`nfqws` cannot redistribute data between original TCP segments. The error displayed is 'message too long'.
|
||||||
* **badsum** doesn't work if your device is behind NAT which does not pass invalid packets.
|
* **badsum** doesn't work if your device is behind NAT which does not pass invalid packets.
|
||||||
The most common Linux NAT router configuration does not pass them. Most home routers are Linux based.
|
The most common Linux NAT router configuration does not pass them. Most home routers are Linux based.
|
||||||
The default sysctl configuration `net.netfilter.nf_conntrack_checksum=1` causes contrack to verify tcp and udp checksums
|
The default sysctl configuration `net.netfilter.nf_conntrack_checksum=1` causes conntrack to verify tcp and udp checksums
|
||||||
and set INVALID state for packets with invalid checksum.
|
and set INVALID state for packets with invalid checksum.
|
||||||
Typically, iptables rules include a rule for dropping packets with INVALID state in the FORWARD chain.
|
Typically, iptables rules include a rule for dropping packets with INVALID state in the FORWARD chain.
|
||||||
The combination of these factors does not allow badsum packets to pass through the router.
|
The combination of these factors does not allow badsum packets to pass through the router.
|
||||||
|
|||||||
+1
-10
@@ -1,5 +1,3 @@
|
|||||||
# zapret v72.3
|
|
||||||
|
|
||||||
# ВНИМАНИЕ, остерегайтесь мошенников
|
# ВНИМАНИЕ, остерегайтесь мошенников
|
||||||
|
|
||||||
zapret является свободным и open source.
|
zapret является свободным и open source.
|
||||||
@@ -390,7 +388,7 @@ hex строка начинается с "0x". Имя файла можно пи
|
|||||||
|
|
||||||
Режимы дурения могут сочетаться в любых комбинациях. `--dpi-desync-fooling` берет множество значений через запятую.
|
Режимы дурения могут сочетаться в любых комбинациях. `--dpi-desync-fooling` берет множество значений через запятую.
|
||||||
|
|
||||||
Возможно задание множества фейков через повторение парамеров `--dpi-desync-fake-???`, кроме `--dpi-desync-fake-syndata`.
|
Возможно задание множества фейков через повторение параметров `--dpi-desync-fake-???`, кроме `--dpi-desync-fake-syndata`.
|
||||||
Фейки будут отосланы в указанном порядке. `--dpi-desync-repeats` повторяет каждый отосланный фейк.
|
Фейки будут отосланы в указанном порядке. `--dpi-desync-repeats` повторяет каждый отосланный фейк.
|
||||||
Итоговый порядок будет такой : `fake1 fake1 fake1 fake2 fake2 fake2 fake3 fake3 fake3 .....`
|
Итоговый порядок будет такой : `fake1 fake1 fake1 fake2 fake2 fake2 fake3 fake3 fake3 .....`
|
||||||
|
|
||||||
@@ -901,13 +899,6 @@ L7 протокол становится известен обычно посл
|
|||||||
При выборе профиля имеет значение куда идет конкретный обрабатываемый пакет. На какой интерфейс. Или с какого интерфейса пакет пришел, если он считается входящим.
|
При выборе профиля имеет значение куда идет конкретный обрабатываемый пакет. На какой интерфейс. Или с какого интерфейса пакет пришел, если он считается входящим.
|
||||||
Поэтому даже если у вас часть трафика идет на одну сеть, часть на другую, а часть вообще не идет по wifi, то все это можно настроить.
|
Поэтому даже если у вас часть трафика идет на одну сеть, часть на другую, а часть вообще не идет по wifi, то все это можно настроить.
|
||||||
|
|
||||||
Информация о подключенных сетях берется способом, используемым командой `iw dev <ifname> info` (nl80211).
|
|
||||||
К сожалению, на ядрах с 5.19 до самых последних (6.14 не работает) этот способ сломан.
|
|
||||||
В этом случае используется способ iwgetid (wireless extensions).
|
|
||||||
wireless extensions считаются deprecated и на новых ядрах реализованы как прослойка совместимости.
|
|
||||||
Некоторые ядра могут быть собраны без wireless extensions.
|
|
||||||
Перед использованием `--filter-ssid` удостоверьтесь, что любая из этих команд возвращает SSID.
|
|
||||||
|
|
||||||
Сканируются все wifi интерфейсы, составляется список interface->SSID. Он обновляется по мере поступления
|
Сканируются все wifi интерфейсы, составляется список interface->SSID. Он обновляется по мере поступления
|
||||||
пакетов, но не чаще 1 раза в секунду.
|
пакетов, но не чаще 1 раза в секунду.
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -183,7 +183,9 @@ https://hackandpwn.com/windows-7-esu-patching/
|
|||||||
http://www.bifido.net/tweaks-and-scripts/8-extended-security-updates-installer.html
|
http://www.bifido.net/tweaks-and-scripts/8-extended-security-updates-installer.html
|
||||||
и обновить систему
|
и обновить систему
|
||||||
|
|
||||||
3) Использовать UpdatePack7R2 от simplix : https://blog.simplix.info
|
3) Использовать готовый патчер-взламыватель ESU - "BypassESU". Его надо искать по названию.
|
||||||
|
|
||||||
|
4) Использовать UpdatePack7R2 от simplix : https://blog.simplix.info
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Но с этим паком есть проблема. Автор из Украины, он очень обиделся на русских.
|
> Но с этим паком есть проблема. Автор из Украины, он очень обиделся на русских.
|
||||||
> Если в панели управления стоит регион RU или BY, появляется неприятный диалог.
|
> Если в панели управления стоит регион RU или BY, появляется неприятный диалог.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# this custom script runs desync to DHT packets with udp payload length 101..399 , without ipset/hostlist filtering
|
# this custom script runs desync to DHT packets with udp payload length >=5 , without ipset/hostlist filtering
|
||||||
# NOTE: @ih requires nft 1.0.1+ and updated kernel version. it's confirmed to work on 5.15 (openwrt 23) and not work on 5.10 (openwrt 22)
|
# NOTE: @ih requires nft 1.0.1+ and updated kernel version. it's confirmed to work on 5.15 (openwrt 23) and not work on 5.10 (openwrt 22)
|
||||||
|
|
||||||
# can override in config :
|
# can override in config :
|
||||||
@@ -16,23 +16,23 @@ zapret_custom_daemons()
|
|||||||
}
|
}
|
||||||
zapret_custom_firewall()
|
zapret_custom_firewall()
|
||||||
{
|
{
|
||||||
# $1 - 1 - run, 0 - stop
|
# $1 - 1 - run, 0 - stop
|
||||||
|
|
||||||
local f uf4 uf6
|
local f uf4 uf6
|
||||||
local first_packet_only="$ipt_connbytes 1:1"
|
local first_packet_only="$ipt_connbytes 1:1"
|
||||||
|
|
||||||
f='-p udp -m length --length 109:407 -m u32 --u32'
|
f='-p udp -m u32 --u32'
|
||||||
uf4='0>>22&0x3C@8>>16=0x6431'
|
uf4='0>>22&0x3C@4>>16=13:0xFFFF&&0>>22&0x3C@8>>16=0x6431:0x6432'
|
||||||
uf6='48>>16=0x6431'
|
uf6='44>>16=13:0xFFFF&&48>>16=0x6431:0x6432'
|
||||||
fw_nfqws_post $1 "$f $uf4 $first_packet_only" "$f $uf6 $first_packet_only" $QNUM_DHT4ALL
|
fw_nfqws_post $1 "$f $uf4 $first_packet_only" "$f $uf6 $first_packet_only" $QNUM_DHT4ALL
|
||||||
}
|
}
|
||||||
zapret_custom_firewall_nft()
|
zapret_custom_firewall_nft()
|
||||||
{
|
{
|
||||||
# stop logic is not required
|
# stop logic is not required
|
||||||
|
|
||||||
local f
|
local f
|
||||||
local first_packet_only="$nft_connbytes 1"
|
local first_packet_only="$nft_connbytes 1"
|
||||||
|
|
||||||
f="meta length 109-407 meta l4proto udp @ih,0,16 0x6431"
|
f="udp length ge 13 meta l4proto udp @ih,0,16 0x6431-0x6432"
|
||||||
nft_fw_nfqws_post "$f $first_packet_only" "$f $first_packet_only" $QNUM_DHT4ALL
|
nft_fw_nfqws_post "$f $first_packet_only" "$f $first_packet_only" $QNUM_DHT4ALL
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -268,10 +268,10 @@ select_getlist()
|
|||||||
echo
|
echo
|
||||||
if ask_yes_no $D "do you want to auto download ip/host list"; then
|
if ask_yes_no $D "do you want to auto download ip/host list"; then
|
||||||
if [ "$MODE_FILTER" = "hostlist" -o "$MODE_FILTER" = "autohostlist" ] ; then
|
if [ "$MODE_FILTER" = "hostlist" -o "$MODE_FILTER" = "autohostlist" ] ; then
|
||||||
GETLISTS="get_refilter_domains.sh get_antizapret_domains.sh get_reestr_resolvable_domains.sh get_reestr_hostlist.sh"
|
GETLISTS="get_refilter_domains.sh get_antizapret_domains.sh get_reestr_resolvable_domains.sh"
|
||||||
GETLIST_DEF="get_antizapret_domains.sh"
|
GETLIST_DEF="get_antizapret_domains.sh"
|
||||||
else
|
else
|
||||||
GETLISTS="get_user.sh get_refilter_ipsum.sh get_antifilter_ip.sh get_antifilter_ipsmart.sh get_antifilter_ipsum.sh get_antifilter_ipresolve.sh get_antifilter_allyouneed.sh get_reestr_resolve.sh get_reestr_preresolved.sh get_reestr_preresolved_smart.sh"
|
GETLISTS="get_user.sh get_refilter_ipsum.sh get_antifilter_ip.sh get_antifilter_ipsmart.sh get_antifilter_ipsum.sh get_antifilter_ipresolve.sh get_antifilter_allyouneed.sh get_reestr_preresolved.sh get_reestr_preresolved_smart.sh"
|
||||||
GETLIST_DEF="get_antifilter_allyouneed.sh"
|
GETLIST_DEF="get_antifilter_allyouneed.sh"
|
||||||
fi
|
fi
|
||||||
ask_list GETLIST "$GETLISTS" "$GETLIST_DEF" && write_config_var GETLIST
|
ask_list GETLIST "$GETLISTS" "$GETLIST_DEF" && write_config_var GETLIST
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
IPSET_DIR="$(dirname "$0")"
|
|
||||||
IPSET_DIR="$(cd "$IPSET_DIR"; pwd)"
|
|
||||||
|
|
||||||
. "$IPSET_DIR/def.sh"
|
|
||||||
|
|
||||||
ZREESTR="$TMPDIR/zapret.txt.gz"
|
|
||||||
IPB="$TMPDIR/ipb.txt"
|
|
||||||
ZURL_REESTR=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv.gz
|
|
||||||
|
|
||||||
dl_checked()
|
|
||||||
{
|
|
||||||
# $1 - url
|
|
||||||
# $2 - file
|
|
||||||
# $3 - minsize
|
|
||||||
# $4 - maxsize
|
|
||||||
# $5 - maxtime
|
|
||||||
curl -k --fail --max-time $5 --connect-timeout 10 --retry 4 --max-filesize $4 -o "$2" "$1" ||
|
|
||||||
{
|
|
||||||
echo list download failed : $1
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
dlsize=$(LC_ALL=C LANG=C wc -c "$2" | xargs | cut -f 1 -d ' ')
|
|
||||||
if test $dlsize -lt $3; then
|
|
||||||
echo list is too small : $dlsize bytes. can be bad.
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
reestr_list()
|
|
||||||
{
|
|
||||||
LC_ALL=C LANG=C gunzip -c "$ZREESTR" | cut -s -f2 -d';' | LC_ALL=C LANG=C nice -n 5 sed -Ee 's/^\*\.(.+)$/\1/' -ne 's/^[a-z0-9A-Z._-]+$/&/p' | $AWK '{ print tolower($0) }'
|
|
||||||
}
|
|
||||||
reestr_extract_ip()
|
|
||||||
{
|
|
||||||
LC_ALL=C LANG=C gunzip -c | nice -n 5 $AWK -F ';' '($1 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}/) && (($2 == "" && $3 == "") || ($1 == $2)) {gsub(/ \| /, RS); print $1}' | LC_ALL=C LANG=C $AWK '{split($1, a, /\|/); for (i in a) {print a[i]}}'
|
|
||||||
}
|
|
||||||
|
|
||||||
ipban_fin()
|
|
||||||
{
|
|
||||||
getipban
|
|
||||||
"$IPSET_DIR/create_ipset.sh"
|
|
||||||
}
|
|
||||||
|
|
||||||
dl_checked "$ZURL_REESTR" "$ZREESTR" 204800 251658240 600 || {
|
|
||||||
ipban_fin
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
reestr_list | sort -u | zz "$ZHOSTLIST"
|
|
||||||
|
|
||||||
reestr_extract_ip <"$ZREESTR" >"$IPB"
|
|
||||||
|
|
||||||
rm -f "$ZREESTR"
|
|
||||||
[ "$DISABLE_IPV4" != "1" ] && $AWK '/^([0-9]{1,3}\.){3}[0-9]{1,3}($|(\/[0-9]{2}$))/' "$IPB" | cut_local | ip2net4 | zz "$ZIPLIST_IPBAN"
|
|
||||||
[ "$DISABLE_IPV6" != "1" ] && $AWK '/^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}($|(\/[0-9]{2,3}$))/' "$IPB" | cut_local6 | ip2net6 | zz "$ZIPLIST_IPBAN6"
|
|
||||||
rm -f "$IPB"
|
|
||||||
|
|
||||||
hup_zapret_daemons
|
|
||||||
|
|
||||||
ipban_fin
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -10,8 +10,8 @@ TMPLIST="$TMPDIR/list.txt"
|
|||||||
BASEURL="https://raw.githubusercontent.com/bol-van/rulist/main"
|
BASEURL="https://raw.githubusercontent.com/bol-van/rulist/main"
|
||||||
URL4="$BASEURL/reestr_resolved4.txt"
|
URL4="$BASEURL/reestr_resolved4.txt"
|
||||||
URL6="$BASEURL/reestr_resolved6.txt"
|
URL6="$BASEURL/reestr_resolved6.txt"
|
||||||
IPB4="$BASEURL/reestr_ipban4.txt"
|
#IPB4="$BASEURL/reestr_ipban4.txt"
|
||||||
IPB6="$BASEURL/reestr_ipban6.txt"
|
#IPB6="$BASEURL/reestr_ipban6.txt"
|
||||||
|
|
||||||
dl()
|
dl()
|
||||||
{
|
{
|
||||||
@@ -35,12 +35,12 @@ dl()
|
|||||||
|
|
||||||
getuser && {
|
getuser && {
|
||||||
[ "$DISABLE_IPV4" != "1" ] && {
|
[ "$DISABLE_IPV4" != "1" ] && {
|
||||||
dl "$URL4" "$ZIPLIST" 32768 4194304
|
dl "$URL4" "$ZIPLIST" 4096 4194304
|
||||||
dl "$IPB4" "$ZIPLIST_IPBAN" 8192 1048576
|
# dl "$IPB4" "$ZIPLIST_IPBAN" 8192 1048576
|
||||||
}
|
}
|
||||||
[ "$DISABLE_IPV6" != "1" ] && {
|
[ "$DISABLE_IPV6" != "1" ] && {
|
||||||
dl "$URL6" "$ZIPLIST6" 8192 4194304
|
dl "$URL6" "$ZIPLIST6" 2048 4194304
|
||||||
dl "$IPB6" "$ZIPLIST_IPBAN6" 128 1048576
|
# dl "$IPB6" "$ZIPLIST_IPBAN6" 128 1048576
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ TMPLIST="$TMPDIR/list.txt"
|
|||||||
BASEURL="https://raw.githubusercontent.com/bol-van/rulist/main"
|
BASEURL="https://raw.githubusercontent.com/bol-van/rulist/main"
|
||||||
URL4="$BASEURL/reestr_smart4.txt"
|
URL4="$BASEURL/reestr_smart4.txt"
|
||||||
URL6="$BASEURL/reestr_smart6.txt"
|
URL6="$BASEURL/reestr_smart6.txt"
|
||||||
IPB4="$BASEURL/reestr_ipban4.txt"
|
#IPB4="$BASEURL/reestr_ipban4.txt"
|
||||||
IPB6="$BASEURL/reestr_ipban6.txt"
|
#IPB6="$BASEURL/reestr_ipban6.txt"
|
||||||
|
|
||||||
dl()
|
dl()
|
||||||
{
|
{
|
||||||
@@ -35,12 +35,12 @@ dl()
|
|||||||
|
|
||||||
getuser && {
|
getuser && {
|
||||||
[ "$DISABLE_IPV4" != "1" ] && {
|
[ "$DISABLE_IPV4" != "1" ] && {
|
||||||
dl "$URL4" "$ZIPLIST" 32768 4194304
|
dl "$URL4" "$ZIPLIST" 4096 4194304
|
||||||
dl "$IPB4" "$ZIPLIST_IPBAN" 8192 1048576
|
# dl "$IPB4" "$ZIPLIST_IPBAN" 8192 1048576
|
||||||
}
|
}
|
||||||
[ "$DISABLE_IPV6" != "1" ] && {
|
[ "$DISABLE_IPV6" != "1" ] && {
|
||||||
dl "$URL6" "$ZIPLIST6" 8192 4194304
|
dl "$URL6" "$ZIPLIST6" 2048 4194304
|
||||||
dl "$IPB6" "$ZIPLIST_IPBAN6" 128 1048576
|
# dl "$IPB6" "$ZIPLIST_IPBAN6" 128 1048576
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ TMPLIST="$TMPDIR/list_nethub.txt"
|
|||||||
|
|
||||||
BASEURL="https://raw.githubusercontent.com/bol-van/rulist/main"
|
BASEURL="https://raw.githubusercontent.com/bol-van/rulist/main"
|
||||||
URL="$BASEURL/reestr_hostname_resolvable.txt"
|
URL="$BASEURL/reestr_hostname_resolvable.txt"
|
||||||
IPB4="$BASEURL/reestr_ipban4.txt"
|
#IPB4="$BASEURL/reestr_ipban4.txt"
|
||||||
IPB6="$BASEURL/reestr_ipban6.txt"
|
#IPB6="$BASEURL/reestr_ipban6.txt"
|
||||||
|
|
||||||
dl()
|
dl()
|
||||||
{
|
{
|
||||||
@@ -36,8 +36,8 @@ dl "$URL" "$ZHOSTLIST" 65536 67108864
|
|||||||
|
|
||||||
hup_zapret_daemons
|
hup_zapret_daemons
|
||||||
|
|
||||||
[ "$DISABLE_IPV4" != "1" ] && dl "$IPB4" "$ZIPLIST_IPBAN" 8192 1048576
|
#[ "$DISABLE_IPV4" != "1" ] && dl "$IPB4" "$ZIPLIST_IPBAN" 8192 1048576
|
||||||
[ "$DISABLE_IPV6" != "1" ] && dl "$IPB6" "$ZIPLIST_IPBAN6" 128 1048576
|
#[ "$DISABLE_IPV6" != "1" ] && dl "$IPB6" "$ZIPLIST_IPBAN6" 128 1048576
|
||||||
|
|
||||||
getipban
|
getipban
|
||||||
"$IPSET_DIR/create_ipset.sh"
|
"$IPSET_DIR/create_ipset.sh"
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
IPSET_DIR="$(dirname "$0")"
|
|
||||||
IPSET_DIR="$(cd "$IPSET_DIR"; pwd)"
|
|
||||||
|
|
||||||
. "$IPSET_DIR/def.sh"
|
|
||||||
|
|
||||||
ZREESTR="$TMPDIR/zapret.txt.gz"
|
|
||||||
ZDIG="$TMPDIR/zapret-dig.txt"
|
|
||||||
IPB="$TMPDIR/ipb.txt"
|
|
||||||
ZIPLISTTMP="$TMPDIR/zapret-ip.txt"
|
|
||||||
#ZURL=https://reestr.rublacklist.net/api/current
|
|
||||||
ZURL_REESTR=https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv.gz
|
|
||||||
|
|
||||||
dl_checked()
|
|
||||||
{
|
|
||||||
# $1 - url
|
|
||||||
# $2 - file
|
|
||||||
# $3 - minsize
|
|
||||||
# $4 - maxsize
|
|
||||||
# $5 - maxtime
|
|
||||||
curl -k --fail --max-time $5 --connect-timeout 10 --retry 4 --max-filesize $4 -o "$2" "$1" ||
|
|
||||||
{
|
|
||||||
echo list download failed : $1
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
dlsize=$(LC_ALL=C LANG=C wc -c "$2" | xargs | cut -f 1 -d ' ')
|
|
||||||
if test $dlsize -lt $3; then
|
|
||||||
echo list is too small : $dlsize bytes. can be bad.
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
reestr_list()
|
|
||||||
{
|
|
||||||
LC_ALL=C LANG=C gunzip -c "$ZREESTR" | cut -s -f2 -d';' | LC_ALL=C LANG=C nice -n 5 sed -Ee 's/^\*\.(.+)$/\1/' -ne 's/^[a-z0-9A-Z._-]+$/&/p' | $AWK '{ print tolower($0) }'
|
|
||||||
}
|
|
||||||
reestr_extract_ip()
|
|
||||||
{
|
|
||||||
LC_ALL=C LANG=C gunzip -c | nice -n 5 $AWK -F ';' '($1 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}/) && (($2 == "" && $3 == "") || ($1 == $2)) {gsub(/ \| /, RS); print $1}' | LC_ALL=C LANG=C $AWK '{split($1, a, /\|/); for (i in a) {print a[i]}}'
|
|
||||||
}
|
|
||||||
|
|
||||||
getuser && {
|
|
||||||
# both disabled
|
|
||||||
[ "$DISABLE_IPV4" = "1" ] && [ "$DISABLE_IPV6" = "1" ] && exit 0
|
|
||||||
|
|
||||||
dl_checked "$ZURL_REESTR" "$ZREESTR" 204800 251658240 600 || exit 2
|
|
||||||
|
|
||||||
echo preparing ipban list ..
|
|
||||||
|
|
||||||
reestr_extract_ip <"$ZREESTR" >"$IPB"
|
|
||||||
[ "$DISABLE_IPV4" != "1" ] && $AWK '/^([0-9]{1,3}\.){3}[0-9]{1,3}($|(\/[0-9]{2}$))/' "$IPB" | cut_local | ip2net4 | zz "$ZIPLIST_IPBAN"
|
|
||||||
[ "$DISABLE_IPV6" != "1" ] && $AWK '/^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}($|(\/[0-9]{2,3}$))/' "$IPB" | cut_local6 | ip2net6 | zz "$ZIPLIST_IPBAN6"
|
|
||||||
rm -f "$IPB"
|
|
||||||
|
|
||||||
echo preparing dig list ..
|
|
||||||
reestr_list | sort -u >"$ZDIG"
|
|
||||||
|
|
||||||
rm -f "$ZREESTR"
|
|
||||||
|
|
||||||
echo digging started. this can take long ...
|
|
||||||
|
|
||||||
[ "$DISABLE_IPV4" != "1" ] && {
|
|
||||||
filedigger "$ZDIG" 4 | cut_local >"$ZIPLISTTMP" || {
|
|
||||||
rm -f "$ZDIG"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
ip2net4 <"$ZIPLISTTMP" | zz "$ZIPLIST"
|
|
||||||
rm -f "$ZIPLISTTMP"
|
|
||||||
}
|
|
||||||
[ "$DISABLE_IPV6" != "1" ] && {
|
|
||||||
filedigger "$ZDIG" 6 | cut_local6 >"$ZIPLISTTMP" || {
|
|
||||||
rm -f "$ZDIG"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
ip2net6 <"$ZIPLISTTMP" | zz "$ZIPLIST6"
|
|
||||||
rm -f "$ZIPLISTTMP"
|
|
||||||
}
|
|
||||||
rm -f "$ZDIG"
|
|
||||||
}
|
|
||||||
|
|
||||||
"$IPSET_DIR/create_ipset.sh"
|
|
||||||
+119
-35
@@ -1870,9 +1870,9 @@ bool rawsend_queue(struct rawpacket_tailhead *q)
|
|||||||
|
|
||||||
// linux-specific wlan retrieval implementation
|
// linux-specific wlan retrieval implementation
|
||||||
|
|
||||||
typedef void netlink_prepare_nlh_cb_t(struct nlmsghdr *nlh);
|
typedef void netlink_prepare_nlh_cb_t(struct nlmsghdr *nlh, void *param);
|
||||||
|
|
||||||
static bool netlink_genl_simple_transact(struct mnl_socket* nl, uint16_t type, uint16_t flags, uint8_t cmd, uint8_t version, netlink_prepare_nlh_cb_t cb_prepare_nlh, mnl_cb_t cb_data, void *data)
|
static bool netlink_genl_simple_transact(struct mnl_socket* nl, uint16_t type, uint16_t flags, uint8_t cmd, uint8_t version, netlink_prepare_nlh_cb_t cb_prepare_nlh, void *prepare_data, mnl_cb_t cb_data, void *data)
|
||||||
{
|
{
|
||||||
char buf[MNL_SOCKET_BUFFER_SIZE];
|
char buf[MNL_SOCKET_BUFFER_SIZE];
|
||||||
struct nlmsghdr *nlh;
|
struct nlmsghdr *nlh;
|
||||||
@@ -1887,7 +1887,7 @@ static bool netlink_genl_simple_transact(struct mnl_socket* nl, uint16_t type, u
|
|||||||
genl->cmd = cmd;
|
genl->cmd = cmd;
|
||||||
genl->version = version;
|
genl->version = version;
|
||||||
|
|
||||||
if (cb_prepare_nlh) cb_prepare_nlh(nlh);
|
if (cb_prepare_nlh) cb_prepare_nlh(nlh, prepare_data);
|
||||||
|
|
||||||
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0)
|
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0)
|
||||||
{
|
{
|
||||||
@@ -1911,7 +1911,7 @@ static bool netlink_genl_simple_transact(struct mnl_socket* nl, uint16_t type, u
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wlan_id_prepare(struct nlmsghdr *nlh)
|
static void wlan_id_prepare(struct nlmsghdr *nlh, void *param)
|
||||||
{
|
{
|
||||||
mnl_attr_put_strz(nlh, CTRL_ATTR_FAMILY_NAME, "nl80211");
|
mnl_attr_put_strz(nlh, CTRL_ATTR_FAMILY_NAME, "nl80211");
|
||||||
}
|
}
|
||||||
@@ -1943,7 +1943,7 @@ static int wlan_id_cb(const struct nlmsghdr *nlh, void *data)
|
|||||||
static uint16_t wlan_get_family_id(struct mnl_socket* nl)
|
static uint16_t wlan_get_family_id(struct mnl_socket* nl)
|
||||||
{
|
{
|
||||||
uint16_t id;
|
uint16_t id;
|
||||||
return netlink_genl_simple_transact(nl, GENL_ID_CTRL, NLM_F_REQUEST | NLM_F_ACK, CTRL_CMD_GETFAMILY, 1, wlan_id_prepare, wlan_id_cb, &id) ? id : 0;
|
return netlink_genl_simple_transact(nl, GENL_ID_CTRL, NLM_F_REQUEST | NLM_F_ACK, CTRL_CMD_GETFAMILY, 1, wlan_id_prepare, NULL, wlan_id_cb, &id) ? id : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wlan_info_attr_cb(const struct nlattr *attr, void *data)
|
static int wlan_info_attr_cb(const struct nlattr *attr, void *data)
|
||||||
@@ -1978,42 +1978,130 @@ static int wlan_info_attr_cb(const struct nlattr *attr, void *data)
|
|||||||
}
|
}
|
||||||
return MNL_CB_OK;
|
return MNL_CB_OK;
|
||||||
}
|
}
|
||||||
|
struct wlan_info_req
|
||||||
|
{
|
||||||
|
struct wlan_interface_collection *wc;
|
||||||
|
bool bReqSSID;
|
||||||
|
};
|
||||||
static int wlan_info_cb(const struct nlmsghdr *nlh, void *data)
|
static int wlan_info_cb(const struct nlmsghdr *nlh, void *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct wlan_info_req *wr = (struct wlan_info_req*)data;
|
||||||
|
if (wr->wc->count>=WLAN_INTERFACE_MAX) return MNL_CB_OK;
|
||||||
|
memset(wr->wc->wlan + wr->wc->count,0,sizeof(struct wlan_interface));
|
||||||
|
ret = mnl_attr_parse(nlh, sizeof(struct genlmsghdr), wlan_info_attr_cb, wr->wc->wlan + wr->wc->count);
|
||||||
|
if (ret>=0 && (!wr->bReqSSID || *wr->wc->wlan[wr->wc->count].ssid) && *wr->wc->wlan[wr->wc->count].ifname && wr->wc->wlan[wr->wc->count].ifindex)
|
||||||
|
wr->wc->count++;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
static bool wlan_info(struct mnl_socket* nl, uint16_t wlan_family_id, struct wlan_interface_collection* w, bool bReqSSID)
|
||||||
|
{
|
||||||
|
struct wlan_info_req req = { .bReqSSID = bReqSSID, .wc = w };
|
||||||
|
return netlink_genl_simple_transact(nl, wlan_family_id, NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP, NL80211_CMD_GET_INTERFACE, 0, NULL, NULL, wlan_info_cb, &req);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void scan_prepare(struct nlmsghdr *nlh, void *param)
|
||||||
|
{
|
||||||
|
mnl_attr_put_u32(nlh, NL80211_ATTR_IFINDEX, *(int*)param);
|
||||||
|
}
|
||||||
|
static uint8_t *find_ie(uint8_t *buf, size_t len, uint8_t ie)
|
||||||
|
{
|
||||||
|
while (len>=2)
|
||||||
|
{
|
||||||
|
if (len<(2+buf[1])) break;
|
||||||
|
if (buf[0]==ie) return buf;
|
||||||
|
buf+=buf[1]+2;
|
||||||
|
len-=buf[1]+2;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
static int scan_info_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
{
|
||||||
|
struct wlan_interface *wlan = (struct wlan_interface *)data;
|
||||||
|
const struct nlattr *nested;
|
||||||
|
uint8_t *payload, *ie;
|
||||||
|
uint16_t payload_len;
|
||||||
|
bool ok;
|
||||||
|
|
||||||
|
switch(mnl_attr_get_type(attr))
|
||||||
|
{
|
||||||
|
case NL80211_ATTR_IFINDEX:
|
||||||
|
if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
|
||||||
|
{
|
||||||
|
DLOG_PERROR("mnl_attr_validate");
|
||||||
|
return MNL_CB_ERROR;
|
||||||
|
}
|
||||||
|
wlan->ifindex = mnl_attr_get_u32(attr);
|
||||||
|
if (!if_indextoname(wlan->ifindex, wlan->ifname))
|
||||||
|
DLOG_PERROR("if_indextoname");
|
||||||
|
break;
|
||||||
|
case NL80211_ATTR_BSS:
|
||||||
|
if (mnl_attr_validate(attr, MNL_TYPE_NESTED) < 0)
|
||||||
|
{
|
||||||
|
DLOG_PERROR("mnl_attr_validate");
|
||||||
|
return MNL_CB_ERROR;
|
||||||
|
}
|
||||||
|
ok = false;
|
||||||
|
mnl_attr_for_each_nested(nested, attr)
|
||||||
|
{
|
||||||
|
if (mnl_attr_get_type(nested)==NL80211_BSS_STATUS)
|
||||||
|
{
|
||||||
|
uint32_t status = mnl_attr_get_u32(nested);
|
||||||
|
if (status==NL80211_BSS_STATUS_ASSOCIATED || status==NL80211_BSS_STATUS_AUTHENTICATED || status==NL80211_BSS_STATUS_IBSS_JOINED)
|
||||||
|
{
|
||||||
|
ok=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ok) break;
|
||||||
|
mnl_attr_for_each_nested(nested, attr)
|
||||||
|
{
|
||||||
|
switch(mnl_attr_get_type(nested))
|
||||||
|
{
|
||||||
|
case NL80211_BSS_INFORMATION_ELEMENTS:
|
||||||
|
payload_len = mnl_attr_get_payload_len(nested);
|
||||||
|
payload = mnl_attr_get_payload(nested);
|
||||||
|
ie = find_ie(payload,payload_len,0);
|
||||||
|
if (ie)
|
||||||
|
{
|
||||||
|
uint8_t l = ie[1];
|
||||||
|
if (l>=(sizeof(wlan->ssid))) l=sizeof(wlan->ssid)-1;
|
||||||
|
memcpy(wlan->ssid,ie+2,l);
|
||||||
|
wlan->ssid[l]=0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MNL_CB_OK;
|
||||||
|
}
|
||||||
|
static int scan_info_cb(const struct nlmsghdr *nlh, void *data)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct wlan_interface_collection *wc = (struct wlan_interface_collection*)data;
|
struct wlan_interface_collection *wc = (struct wlan_interface_collection*)data;
|
||||||
if (wc->count>=WLAN_INTERFACE_MAX) return MNL_CB_OK;
|
if (wc->count>=WLAN_INTERFACE_MAX) return MNL_CB_OK;
|
||||||
memset(wc->wlan+wc->count,0,sizeof(wc->wlan[0]));
|
memset(wc->wlan+wc->count,0,sizeof(wc->wlan[0]));
|
||||||
ret = mnl_attr_parse(nlh, sizeof(struct genlmsghdr), wlan_info_attr_cb, wc->wlan+wc->count);
|
ret = mnl_attr_parse(nlh, sizeof(struct genlmsghdr), scan_info_attr_cb, wc->wlan+wc->count);
|
||||||
if (ret>=0 && *wc->wlan[wc->count].ifname && wc->wlan[wc->count].ifindex)
|
if (ret>=0 && *wc->wlan[wc->count].ssid && *wc->wlan[wc->count].ifname && wc->wlan[wc->count].ifindex)
|
||||||
{
|
wc->count++;
|
||||||
if (*wc->wlan[wc->count].ssid)
|
|
||||||
wc->count++;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// sometimes nl80211 does not return SSID but wireless ext does
|
|
||||||
int wext_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
if (wext_fd!=-1)
|
|
||||||
{
|
|
||||||
struct iwreq req;
|
|
||||||
snprintf(req.ifr_ifrn.ifrn_name,sizeof(req.ifr_ifrn.ifrn_name),"%s",wc->wlan[wc->count].ifname);
|
|
||||||
req.u.essid.pointer = wc->wlan[wc->count].ssid;
|
|
||||||
req.u.essid.length = sizeof(wc->wlan[wc->count].ssid);
|
|
||||||
req.u.essid.flags = 0;
|
|
||||||
if (ioctl(wext_fd, SIOCGIWESSID, &req)!=-1)
|
|
||||||
if (*wc->wlan[wc->count].ssid)
|
|
||||||
wc->count++;
|
|
||||||
close(wext_fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
static bool wlan_info(struct mnl_socket* nl, uint16_t wlan_family_id, struct wlan_interface_collection* w)
|
static bool scan_info(struct mnl_socket* nl, uint16_t wlan_family_id, struct wlan_interface_collection* w)
|
||||||
{
|
{
|
||||||
return netlink_genl_simple_transact(nl, wlan_family_id, NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP, NL80211_CMD_GET_INTERFACE, 0, NULL, wlan_info_cb, w);
|
struct wlan_interface_collection wc_all = { .count = 0 };
|
||||||
|
// wlan_info does not return ssid since kernel 5.19
|
||||||
|
// it's used to enumerate all wifi interfaces then call scan_info on each
|
||||||
|
if (!wlan_info(nl, wlan_family_id, &wc_all, false)) return false;
|
||||||
|
for(int i=0;i<wc_all.count;i++)
|
||||||
|
if (!netlink_genl_simple_transact(nl, wlan_family_id, NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP, NL80211_CMD_GET_SCAN, 0, scan_prepare, (void*)&wc_all.wlan[i].ifindex, scan_info_cb, w))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool wlan_init80211(struct mnl_socket** nl)
|
static bool wlan_init80211(struct mnl_socket** nl)
|
||||||
{
|
{
|
||||||
if (!(*nl = mnl_socket_open(NETLINK_GENERIC)))
|
if (!(*nl = mnl_socket_open(NETLINK_GENERIC)))
|
||||||
@@ -2047,7 +2135,7 @@ static bool wlan_info_rate_limited(struct mnl_socket* nl, uint16_t wlan_family_i
|
|||||||
// do not purge too often to save resources
|
// do not purge too often to save resources
|
||||||
if (wlan_info_last != now)
|
if (wlan_info_last != now)
|
||||||
{
|
{
|
||||||
bres = wlan_info(nl,wlan_family_id,w);
|
bres = scan_info(nl,wlan_family_id,w);
|
||||||
wlan_info_last = now;
|
wlan_info_last = now;
|
||||||
}
|
}
|
||||||
return bres;
|
return bres;
|
||||||
@@ -2073,10 +2161,6 @@ bool wlan_info_init(void)
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool wlan_info_get(void)
|
|
||||||
{
|
|
||||||
return wlan_info(nl_wifi, id_nl80211, &wlans);
|
|
||||||
}
|
|
||||||
bool wlan_info_get_rate_limited(void)
|
bool wlan_info_get_rate_limited(void)
|
||||||
{
|
{
|
||||||
return wlan_info_rate_limited(nl_wifi, id_nl80211, &wlans);
|
return wlan_info_rate_limited(nl_wifi, id_nl80211, &wlans);
|
||||||
|
|||||||
@@ -298,7 +298,6 @@ extern struct wlan_interface_collection wlans;
|
|||||||
|
|
||||||
void wlan_info_deinit(void);
|
void wlan_info_deinit(void);
|
||||||
bool wlan_info_init(void);
|
bool wlan_info_init(void);
|
||||||
bool wlan_info_get(void);
|
|
||||||
bool wlan_info_get_rate_limited(void);
|
bool wlan_info_get_rate_limited(void);
|
||||||
const char *wlan_ssid_search_ifname(const char *ifname);
|
const char *wlan_ssid_search_ifname(const char *ifname);
|
||||||
const char *wlan_ssid_search_ifidx(int ifidx);
|
const char *wlan_ssid_search_ifidx(int ifidx);
|
||||||
|
|||||||
+4
-4
@@ -1624,8 +1624,8 @@ static uint8_t dpi_desync_tcp_packet_play(bool replay, size_t reasm_offset, uint
|
|||||||
bool bDiscoveredL7;
|
bool bDiscoveredL7;
|
||||||
if (ctrack_replay)
|
if (ctrack_replay)
|
||||||
{
|
{
|
||||||
bDiscoveredL7 = !ctrack_replay->l7proto_discovered && ctrack_replay->l7proto != UNKNOWN;
|
if ((bDiscoveredL7 = !ctrack_replay->l7proto_discovered && ctrack_replay->l7proto != UNKNOWN))
|
||||||
ctrack_replay->l7proto_discovered = true;
|
ctrack_replay->l7proto_discovered = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
bDiscoveredL7 = !ctrack_replay && l7proto != UNKNOWN;
|
bDiscoveredL7 = !ctrack_replay && l7proto != UNKNOWN;
|
||||||
@@ -3095,8 +3095,8 @@ static uint8_t dpi_desync_udp_packet_play(bool replay, size_t reasm_offset, uint
|
|||||||
bool bDiscoveredL7;
|
bool bDiscoveredL7;
|
||||||
if (ctrack_replay)
|
if (ctrack_replay)
|
||||||
{
|
{
|
||||||
bDiscoveredL7 = !ctrack_replay->l7proto_discovered && ctrack_replay->l7proto != UNKNOWN;
|
if ((bDiscoveredL7 = !ctrack_replay->l7proto_discovered && ctrack_replay->l7proto != UNKNOWN))
|
||||||
ctrack_replay->l7proto_discovered = true;
|
ctrack_replay->l7proto_discovered = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
bDiscoveredL7 = !ctrack_replay && l7proto != UNKNOWN;
|
bDiscoveredL7 = !ctrack_replay && l7proto != UNKNOWN;
|
||||||
|
|||||||
@@ -2384,6 +2384,7 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, "cannot create %s\n", params.debug_logfile);
|
fprintf(stderr, "cannot create %s\n", params.debug_logfile);
|
||||||
exit_clean(1);
|
exit_clean(1);
|
||||||
}
|
}
|
||||||
|
fclose(F);
|
||||||
params.debug = true;
|
params.debug = true;
|
||||||
params.debug_target = LOG_TARGET_FILE;
|
params.debug_target = LOG_TARGET_FILE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user