🎄 Sync 2025-12-08 00:10:24

This commit is contained in:
actions-user
2025-12-08 00:10:24 +08:00
parent 5f354d3d53
commit 8a631641ce
22 changed files with 4784 additions and 1223 deletions

View File

@@ -10,7 +10,7 @@ LUCI_DEPENDS:=+luci-base +luci-lib-jsonc +curl +bandix
PKG_MAINTAINER:=timsaya
PKG_VERSION:=0.10.3
PKG_VERSION:=0.11.0
PKG_RELEASE:=1
include $(TOPDIR)/feeds/luci/luci.mk

View File

@@ -1021,3 +1021,57 @@ msgstr "Iniciando instalación... La página se actualizará automáticamente en
msgid "Please clear your browser cache manually after updating."
msgstr "Por favor, borre manualmente la caché del navegador después de actualizar."
msgid "Traffic Statistics"
msgstr "Estadísticas de Tráfico"
msgid "Traffic Statistics (WAN Only)"
msgstr "Estadísticas de Tráfico (Solo WAN)"
msgid "Device Usage Ranking"
msgstr "Clasificación de Uso de Dispositivos"
msgid "(Data has 1 hour delay)"
msgstr "(Los datos tienen 1 hora de retraso)"
msgid "Start Date"
msgstr "Fecha de Inicio"
msgid "End Date"
msgstr "Fecha de Fin"
msgid "Reset"
msgstr "Restablecer"
msgid "Today"
msgstr "Hoy"
msgid "This Week"
msgstr "Esta Semana"
msgid "Last Week"
msgstr "Semana Pasada"
msgid "This Month"
msgstr "Este Mes"
msgid "Last Month"
msgstr "Mes Pasado"
msgid "Last 90 Days"
msgstr "Últimos 90 Días"
msgid "Last Year"
msgstr "Último Año"
msgid "Traffic Timeline"
msgstr "Línea de Tiempo de Tráfico"
msgid "Aggregation:"
msgstr "Agregación:"
msgid "Hourly"
msgstr "Por Hora"
msgid "Device:"
msgstr "Dispositivo:"

View File

@@ -1020,4 +1020,58 @@ msgid "Starting installation... The page will refresh automatically in 5 seconds
msgstr "Démarrage de l'installation... La page sera actualisée automatiquement dans 5 secondes."
msgid "Please clear your browser cache manually after updating."
msgstr "Veuillez vider manuellement le cache du navigateur après la mise à jour."
msgstr "Veuillez vider manuellement le cache du navigateur après la mise à jour."
msgid "Traffic Statistics"
msgstr "Statistiques de Trafic"
msgid "Traffic Statistics (WAN Only)"
msgstr "Statistiques de Trafic (WAN uniquement)"
msgid "Device Usage Ranking"
msgstr "Classement d'Utilisation des Appareils"
msgid "(Data has 1 hour delay)"
msgstr "(Les données ont 1 heure de retard)"
msgid "Start Date"
msgstr "Date de Début"
msgid "End Date"
msgstr "Date de Fin"
msgid "Reset"
msgstr "Réinitialiser"
msgid "Today"
msgstr "Aujourd'hui"
msgid "This Week"
msgstr "Cette Semaine"
msgid "Last Week"
msgstr "Semaine Dernière"
msgid "This Month"
msgstr "Ce Mois"
msgid "Last Month"
msgstr "Mois Dernier"
msgid "Last 90 Days"
msgstr "90 Derniers Jours"
msgid "Last Year"
msgstr "Dernière Année"
msgid "Traffic Timeline"
msgstr "Chronologie du Trafic"
msgid "Aggregation:"
msgstr "Agrégation :"
msgid "Hourly"
msgstr "Par Heure"
msgid "Device:"
msgstr "Appareil :"

View File

@@ -1021,3 +1021,57 @@ msgstr "Memulai instalasi... Halaman akan dimuat ulang secara otomatis dalam 5 d
msgid "Please clear your browser cache manually after updating."
msgstr "Harap hapus cache browser secara manual setelah memperbarui."
msgid "Traffic Statistics"
msgstr "Statistik Lalu Lintas"
msgid "Traffic Statistics (WAN Only)"
msgstr "Statistik Lalu Lintas (Hanya WAN)"
msgid "Device Usage Ranking"
msgstr "Peringkat Penggunaan Perangkat"
msgid "(Data has 1 hour delay)"
msgstr "(Data memiliki penundaan 1 jam)"
msgid "Start Date"
msgstr "Tanggal Mulai"
msgid "End Date"
msgstr "Tanggal Akhir"
msgid "Reset"
msgstr "Setel Ulang"
msgid "Today"
msgstr "Hari Ini"
msgid "This Week"
msgstr "Minggu Ini"
msgid "Last Week"
msgstr "Minggu Lalu"
msgid "This Month"
msgstr "Bulan Ini"
msgid "Last Month"
msgstr "Bulan Lalu"
msgid "Last 90 Days"
msgstr "90 Hari Terakhir"
msgid "Last Year"
msgstr "Tahun Lalu"
msgid "Traffic Timeline"
msgstr "Timeline Lalu Lintas"
msgid "Aggregation:"
msgstr "Agregasi:"
msgid "Hourly"
msgstr "Per Jam"
msgid "Device:"
msgstr "Perangkat:"

View File

@@ -1021,3 +1021,57 @@ msgstr "インストールを開始しています... ページは5秒後に自
msgid "Please clear your browser cache manually after updating."
msgstr "更新後、ブラウザのキャッシュを手動でクリアしてください。"
msgid "Traffic Statistics"
msgstr "トラフィック統計"
msgid "Traffic Statistics (WAN Only)"
msgstr "トラフィック統計WANのみ"
msgid "Device Usage Ranking"
msgstr "デバイス使用量ランキング"
msgid "(Data has 1 hour delay)"
msgstr "データは1時間遅延"
msgid "Start Date"
msgstr "開始日"
msgid "End Date"
msgstr "終了日"
msgid "Reset"
msgstr "リセット"
msgid "Today"
msgstr "今日"
msgid "This Week"
msgstr "今週"
msgid "Last Week"
msgstr "先週"
msgid "This Month"
msgstr "今月"
msgid "Last Month"
msgstr "先月"
msgid "Last 90 Days"
msgstr "過去90日"
msgid "Last Year"
msgstr "過去1年"
msgid "Traffic Timeline"
msgstr "トラフィックタイムライン"
msgid "Aggregation:"
msgstr "集計:"
msgid "Hourly"
msgstr "時間単位"
msgid "Device:"
msgstr "デバイス:"

View File

@@ -1022,3 +1022,57 @@ msgstr "Rozpoczynanie instalacji... Strona odświeży się automatycznie za 5 se
msgid "Please clear your browser cache manually after updating."
msgstr "Po aktualizacji należy ręcznie wyczyścić pamięć podręczną przeglądarki."
msgid "Traffic Statistics"
msgstr "Statystyki ruchu"
msgid "Traffic Statistics (WAN Only)"
msgstr "Statystyki ruchu (tylko WAN)"
msgid "Device Usage Ranking"
msgstr "Ranking Użycia Urządzeń"
msgid "(Data has 1 hour delay)"
msgstr "(Dane mają 1 godzinę opóźnienia)"
msgid "Start Date"
msgstr "Data Początkowa"
msgid "End Date"
msgstr "Data Końcowa"
msgid "Reset"
msgstr "Resetuj"
msgid "Today"
msgstr "Dzisiaj"
msgid "This Week"
msgstr "Ten Tydzień"
msgid "Last Week"
msgstr "Zeszły Tydzień"
msgid "This Month"
msgstr "Ten Miesiąc"
msgid "Last Month"
msgstr "Zeszły Miesiąc"
msgid "Last 90 Days"
msgstr "Ostatnie 90 Dni"
msgid "Last Year"
msgstr "Ostatni Rok"
msgid "Traffic Timeline"
msgstr "Oś Czasu Ruchu"
msgid "Aggregation:"
msgstr "Agregacja:"
msgid "Hourly"
msgstr "Co Godzinę"
msgid "Device:"
msgstr "Urządzenie:"

View File

@@ -1020,4 +1020,58 @@ msgid "Starting installation... The page will refresh automatically in 5 seconds
msgstr "Начало установки... Страница автоматически обновится через 5 секунд."
msgid "Please clear your browser cache manually after updating."
msgstr "Пожалуйста, вручную очистите кеш браузера после обновления."
msgstr "Пожалуйста, вручную очистите кеш браузера после обновления."
msgid "Traffic Statistics"
msgstr "Статистика трафика"
msgid "Traffic Statistics (WAN Only)"
msgstr "Статистика трафика (только WAN)"
msgid "Device Usage Ranking"
msgstr "Рейтинг использования устройств"
msgid "(Data has 1 hour delay)"
msgstr "(Данные имеют задержку 1 час)"
msgid "Start Date"
msgstr "Дата начала"
msgid "End Date"
msgstr "Дата окончания"
msgid "Reset"
msgstr "Сбросить"
msgid "Today"
msgstr "Сегодня"
msgid "This Week"
msgstr "На этой неделе"
msgid "Last Week"
msgstr "На прошлой неделе"
msgid "This Month"
msgstr "В этом месяце"
msgid "Last Month"
msgstr "В прошлом месяце"
msgid "Last 90 Days"
msgstr "Последние 90 дней"
msgid "Last Year"
msgstr "За последний год"
msgid "Traffic Timeline"
msgstr "Временная шкала трафика"
msgid "Aggregation:"
msgstr "Агрегация:"
msgid "Hourly"
msgstr "По часам"
msgid "Device:"
msgstr "Устройство:"

View File

@@ -1021,3 +1021,57 @@ msgstr "กำลังเริ่มการติดตั้ง... หน
msgid "Please clear your browser cache manually after updating."
msgstr "กรุณาล้างแคชเบราว์เซอร์ด้วยตนเองหลังจากอัปเดต"
msgid "Traffic Statistics"
msgstr "สถิติการรับส่งข้อมูล"
msgid "Traffic Statistics (WAN Only)"
msgstr "สถิติการรับส่งข้อมูล (เฉพาะ WAN)"
msgid "Device Usage Ranking"
msgstr "อันดับการใช้งานอุปกรณ์"
msgid "(Data has 1 hour delay)"
msgstr "(ข้อมูลล่าช้า 1 ชั่วโมง)"
msgid "Start Date"
msgstr "วันที่เริ่มต้น"
msgid "End Date"
msgstr "วันที่สิ้นสุด"
msgid "Reset"
msgstr "รีเซ็ต"
msgid "Today"
msgstr "วันนี้"
msgid "This Week"
msgstr "สัปดาห์นี้"
msgid "Last Week"
msgstr "สัปดาห์ที่แล้ว"
msgid "This Month"
msgstr "เดือนนี้"
msgid "Last Month"
msgstr "เดือนที่แล้ว"
msgid "Last 90 Days"
msgstr "90 วันล่าสุด"
msgid "Last Year"
msgstr "ปีที่แล้ว"
msgid "Traffic Timeline"
msgstr "ไทม์ไลน์การรับส่งข้อมูล"
msgid "Aggregation:"
msgstr "การรวม:"
msgid "Hourly"
msgstr "รายชั่วโมง"
msgid "Device:"
msgstr "อุปกรณ์:"

View File

@@ -1026,4 +1026,58 @@ msgid "Update available"
msgstr "有更新"
msgid "Update available, click to go to settings"
msgstr "有更新,点击前往设置"
msgstr "有更新,点击前往设置"
msgid "Traffic Statistics"
msgstr "流量统计"
msgid "Traffic Statistics (WAN Only)"
msgstr "流量统计仅WAN"
msgid "Device Usage Ranking"
msgstr "设备用量排行"
msgid "(Data has 1 hour delay)"
msgstr "数据有1小时延迟"
msgid "Start Date"
msgstr "开始日期"
msgid "End Date"
msgstr "结束日期"
msgid "Reset"
msgstr "重置"
msgid "Today"
msgstr "今天"
msgid "This Week"
msgstr "本周"
msgid "Last Week"
msgstr "上周"
msgid "This Month"
msgstr "本月"
msgid "Last Month"
msgstr "上月"
msgid "Last 90 Days"
msgstr "最近90天"
msgid "Last Year"
msgstr "最近一年"
msgid "Traffic Timeline"
msgstr "流量时间线"
msgid "Aggregation:"
msgstr "聚合方式:"
msgid "Hourly"
msgstr "按小时"
msgid "Device:"
msgstr "设备:"

View File

@@ -1020,4 +1020,58 @@ msgid "Starting installation... The page will refresh automatically in 5 seconds
msgstr "開始安裝... 頁面將在5秒後自動重新整理。"
msgid "Please clear your browser cache manually after updating."
msgstr "更新後請手動清空瀏覽器快取。"
msgstr "更新後請手動清空瀏覽器快取。"
msgid "Traffic Statistics"
msgstr "流量統計"
msgid "Traffic Statistics (WAN Only)"
msgstr "流量統計僅WAN"
msgid "Device Usage Ranking"
msgstr "設備用量排行"
msgid "(Data has 1 hour delay)"
msgstr "資料有1小時延遲"
msgid "Start Date"
msgstr "開始日期"
msgid "End Date"
msgstr "結束日期"
msgid "Reset"
msgstr "重置"
msgid "Today"
msgstr "今天"
msgid "This Week"
msgstr "本週"
msgid "Last Week"
msgstr "上週"
msgid "This Month"
msgstr "本月"
msgid "Last Month"
msgstr "上月"
msgid "Last 90 Days"
msgstr "最近90天"
msgid "Last Year"
msgstr "最近一年"
msgid "Traffic Timeline"
msgstr "流量時間線"
msgid "Aggregation:"
msgstr "聚合方式:"
msgid "Hourly"
msgstr "按小時"
msgid "Device:"
msgstr "設備:"

View File

@@ -16,6 +16,8 @@ readonly BANDIX_CONNECTION_API="$BANDIX_API_BASE/api/connection/devices"
readonly BANDIX_DNS_QUERIES_API="$BANDIX_API_BASE/api/dns/queries"
readonly BANDIX_DNS_STATS_API="$BANDIX_API_BASE/api/dns/stats"
readonly BANDIX_SCHEDULE_LIMITS_API="$BANDIX_API_BASE/api/traffic/limits/schedule"
readonly BANDIX_TRAFFIC_USAGE_RANKING_API="$BANDIX_API_BASE/api/traffic/usage/ranking"
readonly BANDIX_TRAFFIC_USAGE_INCREMENTS_API="$BANDIX_API_BASE/api/traffic/usage/increments"
# 通用函数创建简单的JSON响应
make_value() {
@@ -331,6 +333,98 @@ get_dns_stats() {
echo "$response"
}
# 获取设备用量排行
get_traffic_usage_ranking() {
local start_ms="$1"
local end_ms="$2"
# 构建查询参数(只添加非空且有效的参数)
local query_params=""
# 检查 start_ms 是否有效(非空且不是 "null" 或 "undefined"
if [ -n "$start_ms" ] && [ "$start_ms" != "null" ] && [ "$start_ms" != "undefined" ]; then
query_params="${query_params}start_ms=$start_ms&"
fi
# 检查 end_ms 是否有效
if [ -n "$end_ms" ] && [ "$end_ms" != "null" ] && [ "$end_ms" != "undefined" ]; then
query_params="${query_params}end_ms=$end_ms&"
fi
# 移除末尾的 &
query_params=$(echo "$query_params" | sed 's/&$//')
local url="$BANDIX_TRAFFIC_USAGE_RANKING_API"
[ -n "$query_params" ] && url="${url}?${query_params}"
# 从 Bandix API 获取设备用量排行数据
local response=$(curl -s --connect-timeout 2 --max-time 10 -X GET "$url" 2>/dev/null)
# 检查API调用是否成功
if [ $? -ne 0 ] || [ -z "$response" ]; then
make_error "Failed to connect to Bandix service"
return
fi
# 提取 data 部分并返回
local data_part=$(echo "$response" | jsonfilter -e '$.data' 2>/dev/null)
if [ -n "$data_part" ]; then
echo "$data_part"
else
# 如果提取失败,返回空结果
echo '{"start_ms":0,"end_ms":0,"total_rx_bytes":0,"total_tx_bytes":0,"total_bytes":0,"device_count":0,"rankings":[]}'
fi
}
# 获取时间序列增量数据
get_traffic_usage_increments() {
local start_ms="$1"
local end_ms="$2"
local aggregation="$3"
local mac="$4"
# 构建查询参数(只添加非空且有效的参数)
local query_params=""
# 检查 start_ms 是否有效(非空且不是 "null" 或 "undefined"
if [ -n "$start_ms" ] && [ "$start_ms" != "null" ] && [ "$start_ms" != "undefined" ]; then
query_params="${query_params}start_ms=$start_ms&"
fi
# 检查 end_ms 是否有效
if [ -n "$end_ms" ] && [ "$end_ms" != "null" ] && [ "$end_ms" != "undefined" ]; then
query_params="${query_params}end_ms=$end_ms&"
fi
# 检查 aggregation 是否有效
if [ -n "$aggregation" ] && [ "$aggregation" != "null" ] && [ "$aggregation" != "undefined" ]; then
query_params="${query_params}aggregation=$aggregation&"
fi
# 检查 mac 是否有效
if [ -n "$mac" ] && [ "$mac" != "null" ] && [ "$mac" != "undefined" ]; then
query_params="${query_params}mac=$(printf '%s' "$mac" | sed 's/ /%20/g')&"
fi
# 移除末尾的 &
query_params=$(echo "$query_params" | sed 's/&$//')
local url="$BANDIX_TRAFFIC_USAGE_INCREMENTS_API"
[ -n "$query_params" ] && url="${url}?${query_params}"
# 从 Bandix API 获取时间序列增量数据
local response=$(curl -s --connect-timeout 2 --max-time 10 -X GET "$url" 2>/dev/null)
# 检查API调用是否成功
if [ $? -ne 0 ] || [ -z "$response" ]; then
make_error "Failed to connect to Bandix service"
return
fi
# 提取 data 部分并返回
local data_part=$(echo "$response" | jsonfilter -e '$.data' 2>/dev/null)
if [ -n "$data_part" ]; then
echo "$data_part"
else
# 如果提取失败,返回空结果
echo '{"start_ms":0,"end_ms":0,"aggregation":"hourly","mac":"all","increments":[],"total_rx_bytes":0,"total_tx_bytes":0,"total_bytes":0}'
fi
}
# 获取定时限速规则
get_schedule_limits() {
# 从 Bandix API 获取定时限速规则
@@ -964,11 +1058,23 @@ case "$1" in
json_add_int "page_size"
json_close_object
json_add_object "getDnsStats"
json_close_object
json_add_object "getDnsStats"
json_close_object
json_add_object "getScheduleLimits"
json_close_object
json_add_object "getTrafficUsageRanking"
json_add_int "start_ms"
json_add_int "end_ms"
json_close_object
json_add_object "getTrafficUsageIncrements"
json_add_int "start_ms"
json_add_int "end_ms"
json_add_string "aggregation"
json_add_string "mac"
json_close_object
json_add_object "getScheduleLimits"
json_close_object
json_add_object "setScheduleLimit"
json_add_string "mac"
@@ -1153,6 +1259,50 @@ case "$1" in
# logger "luci.bandix: getDnsStats called"
get_dns_stats
;;
getTrafficUsageRanking)
start_ms=""
end_ms=""
input=""
if read -t 1 -r input; then
:
fi
if [ -n "$input" ]; then
start_ms="$(echo "$input" | jsonfilter -e '$[0]' 2>/dev/null)"
[ -z "$start_ms" ] && start_ms="$(echo "$input" | jsonfilter -e '$.start_ms' 2>/dev/null)"
end_ms="$(echo "$input" | jsonfilter -e '$[1]' 2>/dev/null)"
[ -z "$end_ms" ] && end_ms="$(echo "$input" | jsonfilter -e '$.end_ms' 2>/dev/null)"
else
[ -n "$3" ] && start_ms="$3"
[ -n "$4" ] && end_ms="$4"
fi
get_traffic_usage_ranking "$start_ms" "$end_ms"
;;
getTrafficUsageIncrements)
start_ms=""
end_ms=""
aggregation=""
mac=""
input=""
if read -t 1 -r input; then
:
fi
if [ -n "$input" ]; then
start_ms="$(echo "$input" | jsonfilter -e '$[0]' 2>/dev/null)"
[ -z "$start_ms" ] && start_ms="$(echo "$input" | jsonfilter -e '$.start_ms' 2>/dev/null)"
end_ms="$(echo "$input" | jsonfilter -e '$[1]' 2>/dev/null)"
[ -z "$end_ms" ] && end_ms="$(echo "$input" | jsonfilter -e '$.end_ms' 2>/dev/null)"
aggregation="$(echo "$input" | jsonfilter -e '$[2]' 2>/dev/null)"
[ -z "$aggregation" ] && aggregation="$(echo "$input" | jsonfilter -e '$.aggregation' 2>/dev/null)"
mac="$(echo "$input" | jsonfilter -e '$[3]' 2>/dev/null)"
[ -z "$mac" ] && mac="$(echo "$input" | jsonfilter -e '$.mac' 2>/dev/null)"
else
[ -n "$3" ] && start_ms="$3"
[ -n "$4" ] && end_ms="$4"
[ -n "$5" ] && aggregation="$5"
[ -n "$6" ] && mac="$6"
fi
get_traffic_usage_increments "$start_ms" "$end_ms" "$aggregation" "$mac"
;;
getScheduleLimits)
# logger "luci.bandix: getScheduleLimits called"
get_schedule_limits

View File

@@ -21,7 +21,9 @@
"getVersion",
"getSystemArch",
"checkUpdate",
"installUpdate"
"installUpdate",
"getTrafficUsageRanking",
"getTrafficUsageIncrements"
]
},
"uci": [
@@ -48,7 +50,9 @@
"getVersion",
"getSystemArch",
"checkUpdate",
"installUpdate"
"installUpdate",
"getTrafficUsageRanking",
"getTrafficUsageIncrements"
]
},
"uci": [

View File

@@ -138,7 +138,7 @@ o:depends("shunt_dns_mode", "2")
o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4:53)")
o.datatype = "ip4addrport"
o = s:option(ListValue, "shunt_mosdns_dnsserver", translate("Anti-pollution DNS Server"))
o = s:option(Value, "shunt_mosdns_dnsserver", translate("Anti-pollution DNS Server"))
o:value("tcp://8.8.4.4:53,tcp://8.8.8.8:53", translate("Google Public DNS"))
o:value("tcp://208.67.222.222:53,tcp://208.67.220.220:53", translate("OpenDNS"))
o:value("tcp://209.244.0.3:53,tcp://209.244.0.4:53", translate("Level 3 Public DNS-1 (209.244.0.3-4)"))
@@ -146,7 +146,7 @@ o:value("tcp://4.2.2.1:53,tcp://4.2.2.2:53", translate("Level 3 Public DNS-2 (4.
o:value("tcp://4.2.2.3:53,tcp://4.2.2.4:53", translate("Level 3 Public DNS-3 (4.2.2.3-4)"))
o:value("tcp://1.1.1.1:53,tcp://1.0.0.1:53", translate("Cloudflare DNS"))
o:depends("shunt_dns_mode", "3")
o.description = translate("Custom DNS Server for MosDNS")
o.description = translate("Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT (tcp://8.8.8.8 or tls://dns.google:853)")
o = s:option(Flag, "shunt_mosdns_ipv6", translate("Disable IPv6 In MosDNS Query Mode (Shunt Mode)"))
o:depends("shunt_dns_mode", "3")

View File

@@ -161,7 +161,7 @@ o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4
o.datatype = "ip4addrport"
o.default = "8.8.4.4:53"
o = s:option(ListValue, "tunnel_forward_mosdns", translate("Anti-pollution DNS Server"))
o = s:option(Value, "tunnel_forward_mosdns", translate("Anti-pollution DNS Server"))
o:value("tcp://8.8.4.4:53,tcp://8.8.8.8:53", translate("Google Public DNS"))
o:value("tcp://208.67.222.222:53,tcp://208.67.220.220:53", translate("OpenDNS"))
o:value("tcp://209.244.0.3:53,tcp://209.244.0.4:53", translate("Level 3 Public DNS-1 (209.244.0.3-4)"))
@@ -169,7 +169,7 @@ o:value("tcp://4.2.2.1:53,tcp://4.2.2.2:53", translate("Level 3 Public DNS-2 (4.
o:value("tcp://4.2.2.3:53,tcp://4.2.2.4:53", translate("Level 3 Public DNS-3 (4.2.2.3-4)"))
o:value("tcp://1.1.1.1:53,tcp://1.0.0.1:53", translate("Cloudflare DNS"))
o:depends("pdnsd_enable", "4")
o.description = translate("Custom DNS Server for MosDNS")
o.description = translate("Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT (tcp://8.8.8.8 or tls://dns.google:853)")
o = s:option(Flag, "mosdns_ipv6", translate("Disable IPv6 in MOSDNS query mode"))
o:depends("pdnsd_enable", "4")

View File

@@ -73,6 +73,10 @@ if Process_list:find("tcp.udp.ssr.retcp") then
reudp_run = 1
end
if Process_list:find("nft.ssr.retcp") then
redir_run = 1
end
if Process_list:find("local.ssr.retcp") then
redir_run = 1
sock5_run = 1

View File

@@ -416,8 +416,8 @@ msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:149
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua:172
msgid "Custom DNS Server for MosDNS"
msgstr "MosDNS 自定义 DNS 服务器"
msgid "Custom DNS Server format as tcp://IP:PORT or tls://DOMAIN:PORT (tcp://8.8.8.8 or tls://dns.google:853)"
msgstr "格式为tcp://IP:Port或tls://域名:Port (tcp://8.8.8.8或tls://dns.google:853)"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:138
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:220

View File

@@ -211,8 +211,10 @@ start_dns() {
local run_mode="$(uci_get_by_type global run_mode)"
if [ "$ssrplus_dns" != "0" ]; then
if [ -n "$dnsserver" ]; then
add_dns_into_ipset $run_mode $dnsserver
if command -v iptables-legacy >/dev/null 2>&1; then
if [ -n "$dnsserver" ]; then
add_dns_into_ipset $run_mode $dnsserver
fi
fi
case "$ssrplus_dns" in
1)
@@ -236,12 +238,14 @@ start_dns() {
output=$(for i in $(echo $mosdns_dnsserver | sed "s/,/ /g"); do
dnsserver=${i%:*}
dnsserver=${i##*/}
add_dns_into_ipset $run_mode $dnsserver
if command -v iptables-legacy >/dev/null 2>&1; then
add_dns_into_ipset $run_mode $dnsserver
fi
echo " - addr: $i"
echo " enable_pipeline: true"
done)
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$dns_port/g" > $TMP_PATH/mosdns-config.yaml
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$dns_port/g" | sed "s/\(concurrent:\).*/\1 $(echo "$mosdns_dnsserver" | sed 's/,/ /g' | wc -w)/g"> $TMP_PATH/mosdns-config.yaml
if [ "$mosdns_ipv6" == "0" ]; then
sed -i "s/DNS_MODE/main_sequence_with_IPv6/g" $TMP_PATH/mosdns-config.yaml
else
@@ -648,7 +652,7 @@ shunt_dns_command() {
echo " socks5: \"127.0.0.1:$tmp_port\""
echo " enable_pipeline: true"
done)
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$tmp_shunt_dns_port/g" > $TMP_PATH/mosdns-config-shunt.yaml
awk -v line=14 -v text="$output" 'NR == line+1 {print text} 1' /etc/ssrplus/mosdns-config.yaml | sed "s/DNS_PORT/$tmp_shunt_dns_port/g" | sed "s/\(concurrent:\).*/\1 $(echo "$mosdns_dnsserver" | sed 's/,/ /g' | wc -w)/g" > $TMP_PATH/mosdns-config-shunt.yaml
if [ "$shunt_mosdns_ipv6" == "0" ]; then
sed -i "s/DNS_MODE/main_sequence_with_IPv6/g" $TMP_PATH/mosdns-config-shunt.yaml
@@ -1172,7 +1176,17 @@ load_config() {
tcp_config_file=$TMP_PATH/tcp-only-ssr-retcp.json
case "$UDP_RELAY_SERVER" in
nil)
mode="tcp"
if command -v nft >/dev/null 2>&1; then
# nftables / fw4
mode="tcp,udp"
ARG_UDP=""
udp_config_file=""
UDP_RELAY_SERVER="nil"
tcp_config_file=$TMP_PATH/nft-ssr-retcp.json
else
# iptables / fw3
mode="tcp"
fi
;;
$GLOBAL_SERVER | same)
mode="tcp,udp"
@@ -1185,7 +1199,13 @@ load_config() {
udp_config_file=$TMP_PATH/udp-only-ssr-reudp.json
ARG_UDP="-U"
start_udp
mode="tcp"
if command -v nft >/dev/null 2>&1; then
# nftables / fw4
mode="tcp,udp"
else
# iptables / fw3
mode="tcp"
fi
;;
esac
case "$LOCAL_SERVER" in
@@ -1419,6 +1439,11 @@ start_rules() {
2) echo "-O" ;;
esac
}
if command -v nft >/dev/null 2>&1; then
ARG_A="-A"
else
ARG_A=""
fi
/usr/share/shadowsocksr/gfw2ipset.sh
/usr/bin/ssr-rules \
-s "$server" \
@@ -1438,7 +1463,8 @@ start_rules() {
-N "$shunt_ip" \
-M "$(uci_get_by_type global netflix_proxy 0)" \
-I "/etc/ssrplus/netflixip.list" \
$(get_arg_out) $(gfwmode) $ARG_UDP
$(get_arg_out) $(gfwmode) $ARG_UDP $ARG_A
return $?
}
@@ -1486,6 +1512,13 @@ boot() {
stop() {
unlock
set_lock
if command -v nft >/dev/null 2>&1; then
/usr/bin/ssr-rules -K
#local CLEANUP_PERSISTENCE="$(uci_get_by_type global global_server nil)"
#if [ "$CLEANUP_PERSISTENCE" == "nil" ]; then
# /usr/bin/ssr-rules -X
#fi
fi
/usr/bin/ssr-rules -f
local srulecount=0
if command -v nft >/dev/null 2>&1; then
@@ -1527,6 +1560,7 @@ stop() {
killall -q -9 kcptun-client
fi
$PS -w | grep -v "grep" | grep ssr-monitor | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
$PS -w | grep -v "grep" | grep ssr-rules | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
$PS -w | grep -v "grep" | grep "sleep 0000" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 &
( \
# Graceful kill first, so programs have the chance to stop its subprocesses

File diff suppressed because it is too large Load Diff

View File

@@ -213,7 +213,9 @@ local function update(url, file, type, file2)
if type == "gfw_data" or type == "ad_data" then
luci.sys.call("/usr/share/shadowsocksr/gfw2ipset.sh")
else
luci.sys.call("/usr/share/shadowsocksr/chinaipset.sh " .. TMP_PATH .. "/china_ssr.txt")
if luci.sys.call("command -v ipset >/dev/null 2>&1") == 0 then
luci.sys.call("/usr/share/shadowsocksr/chinaipset.sh " .. TMP_PATH .. "/china_ssr.txt")
end
end
if args then
log(0, tonumber(icount) / Num)

View File

@@ -25,7 +25,7 @@
<html lang="{{ dispatcher.lang }}">
<head>
<meta charset="utf-8">
<title>{{ striptags(`${boardinfo.hostname ?? '?'}${node ? ` - ${node.title}` : ''}`) }} - LuCI</title>
<title>{{ striptags(`${dispatched ? `${dispatched.title} - ` : ''}${boardinfo.hostname ?? '?'}`) }}</title>
<script>
const setTheme = (theme) => {
const current = ['light', 'dark', 'device'].includes(theme) ? theme : 'device';

View File

@@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=bandix
PKG_VERSION:=0.10.3
PKG_RELEASE:=2
PKG_VERSION:=0.11.0
PKG_RELEASE:=1
PKG_LICENSE:=Apache-2.0
PKG_MAINTAINER:=timsaya
@@ -13,7 +13,7 @@ include $(INCLUDE_DIR)/package.mk
include $(TOPDIR)/feeds/packages/lang/rust/rust-values.mk
# 二进制文件的文件名和URL
RUST_BANDIX_VERSION:=0.10.3
RUST_BANDIX_VERSION:=0.11.0
RUST_BINARY_FILENAME:=bandix-$(RUST_BANDIX_VERSION)-$(RUSTC_TARGET_ARCH).tar.gz