Merge branch 'oaf-5.1.0'
This commit is contained in:
commit
a29d8e6f15
@ -8,14 +8,11 @@ function index()
|
||||
end
|
||||
|
||||
local page
|
||||
--hide save button
|
||||
page = entry({"admin", "network", "appfilter"}, arcombine(cbi("appfilter/appfilter"), cbi("appfilter/dev_status", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true})), _("appfilter"), 100)
|
||||
page = entry({"admin", "network", "appfilter"}, arcombine(cbi("appfilter/appfilter"), cbi("appfilter/dev_status", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true})), _("App Filter"), 100)
|
||||
|
||||
page.leaf = true
|
||||
page.subindex = true
|
||||
|
||||
--page.dependent = true
|
||||
|
||||
page = entry({"admin", "network", "user_status"}, call("user_status"), nil)
|
||||
page.leaf = true
|
||||
|
||||
@ -114,8 +111,6 @@ function user_status()
|
||||
hostname=get_hostname_by_mac(user_array[i].mac),
|
||||
appid=visit_array[j].appid,
|
||||
appname=get_app_name_by_id(visit_array[j].appid),
|
||||
--total_num=visit_array[j].total_num,
|
||||
--drop_num=visit_array[j].drop_num,
|
||||
total_num=0,
|
||||
drop_num=0,
|
||||
latest_action=visit_array[j].latest_action,
|
||||
|
@ -14,56 +14,43 @@ local SYS = require "luci.sys"
|
||||
local m, s
|
||||
|
||||
m = Map("appfilter",
|
||||
translate("appfilter"),
|
||||
translate("App Filter"),
|
||||
translate(""))
|
||||
|
||||
s = m:section(TypedSection, "global", translate("Basic Settings"))
|
||||
s:option(Flag, "enable", translate("Enable App Filter"),translate(""))
|
||||
um = s:option(DummyValue, "")
|
||||
um.template="cbi/oaf_dvalue"
|
||||
local fullcone=SYS.exec("uci get firewall.@defaults[0].fullcone");
|
||||
local bbr=SYS.exec("uci get flowoffload.@flow[0].bbr");
|
||||
local flow_offloading=SYS.exec("uci get flowoffload.@flow[0].flow_offloading");
|
||||
if string.match(fullcone, "1") or string.match(bbr, "1") or string.match(flow_offloading, "1") then
|
||||
um.value="运行环境检测失败,请先关闭ACC加速模块!"
|
||||
end
|
||||
s.anonymous = true
|
||||
|
||||
local rule_count=0
|
||||
local version=""
|
||||
if nixio.fs.access("/etc/appfilter/feature.cfg") then
|
||||
rule_count=tonumber(SYS.exec("cat /etc/appfilter/feature.cfg | wc -l"))
|
||||
version=SYS.exec("cat /etc/appfilter/feature.cfg |grep \"#version\" | awk '{print $2}'")
|
||||
if nixio.fs.access("/tmp/feature.cfg") then
|
||||
rule_count=tonumber(SYS.exec("cat /tmp/feature.cfg | wc -l"))
|
||||
version=SYS.exec("cat /tmp/feature.cfg |grep \"#version\" | awk '{print $2}'")
|
||||
end
|
||||
local display_str="<strong>当前版本: </strong>"..version.."<br><strong>特征码个数:</strong> "..rule_count.."<br><strong> 下载地址:</strong><a href=\"https://destan19.github.io\">https://destan19.github.io</a>"
|
||||
s = m:section(TypedSection, "feature", translate("特征库更新"), display_str )
|
||||
|
||||
|
||||
local display_str="<strong>"..translate("Current Version")..": </strong>"..version.."<br><strong>"..translate("App Feature Num")..":</strong> "..rule_count
|
||||
s = m:section(TypedSection, "feature", translate("Update feature"), display_str )
|
||||
|
||||
fu = s:option(FileUpload, "")
|
||||
fu.template = "cbi/oaf_upload"
|
||||
s.anonymous = true
|
||||
|
||||
um = s:option(DummyValue, "rule_data")
|
||||
um.template="cbi/oaf_dvalue"
|
||||
|
||||
s=m:section(TypedSection,"time",translate("时间控制")) s.anonymous = true
|
||||
hv = s:option(Value, "start_time", translate("开始时间")) hv.default="00:00"
|
||||
s=m:section(TypedSection,"time",translate("Time Setting")) s.anonymous = true
|
||||
hv = s:option(Value, "start_time", translate("Start Time")) hv.default="00:00"
|
||||
hv.optional=false
|
||||
hv = s:option(Value, "end_time", translate("结束时间")) hv.default="23:59"
|
||||
hv = s:option(Value, "end_time", translate("End Time")) hv.default="23:59"
|
||||
hv.optional=false days = s:option(MultiValue, "days", "", translate(""))
|
||||
days.widget="checkbox" days.size=10
|
||||
days:value("0", "周日");
|
||||
days:value("1", "周一");
|
||||
days:value("2", "周二");
|
||||
days:value("3", "周三");
|
||||
days:value("4", "周四");
|
||||
days:value("5", "周五");
|
||||
days:value("6", "周六");
|
||||
|
||||
--um.value =rule_count .. " " .. translate("Records").. " "..version
|
||||
|
||||
|
||||
|
||||
|
||||
days:value("0", translate("Sun"));
|
||||
days:value("1", translate("Mon"));
|
||||
days:value("2", translate("Tue"));
|
||||
days:value("3", translate("Wed"));
|
||||
days:value("4", translate("Thur"));
|
||||
days:value("5", translate("Fri"));
|
||||
days:value("6", translate("Sat"));
|
||||
|
||||
s = m:section(TypedSection, "appfilter", translate("App Filter Rules"))
|
||||
s.anonymous = true
|
||||
@ -80,13 +67,9 @@ if class_fd then
|
||||
end
|
||||
|
||||
class = path:match("([^/]+)%.class$")
|
||||
-- add a tab
|
||||
s:tab(class, translate(class))
|
||||
-- multi value option
|
||||
apps = s:taboption(class, MultiValue, class.."apps", translate(""))
|
||||
apps.rmempty=true
|
||||
--apps.delimiter=";"
|
||||
-- select
|
||||
apps.widget="checkbox"
|
||||
apps.size=10
|
||||
|
||||
@ -121,9 +104,6 @@ if class_fd then
|
||||
class_fd:close()
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function get_hostname_by_mac(dst_mac)
|
||||
leasefile="/tmp/dhcp.leases"
|
||||
local fd = io.open(leasefile, "r")
|
||||
@ -143,6 +123,7 @@ function get_hostname_by_mac(dst_mac)
|
||||
fd:close()
|
||||
return nil
|
||||
end
|
||||
|
||||
function get_cmd_result(command)
|
||||
local fd
|
||||
local result
|
||||
@ -213,14 +194,22 @@ http.setfilehandler(
|
||||
local line=fd2:read("*l");
|
||||
fd2:close()
|
||||
local ret=string.match(line, "#version")
|
||||
local lang=m.uci:get_all("luci.main.lang")
|
||||
local feature_file=""
|
||||
if "" == lang or "auto" == lang then
|
||||
feature_file="/etc/appfilter/feature.cfg"
|
||||
else
|
||||
feature_file="/etc/appfilter/feature_"..lang..".cfg"
|
||||
end
|
||||
if ret ~= nil then
|
||||
local cmd="cp /tmp/upload/"..meta.file.." /etc/appfilter/feature.cfg";
|
||||
local cmd="cp /tmp/upload/"..meta.file.." "..feature_file;
|
||||
os.execute(cmd);
|
||||
os.execute("chmod 666 "..feature_file);
|
||||
os.execute("rm /tmp/appfilter -fr");
|
||||
luci.sys.exec("/etc/init.d/appfilter restart &");
|
||||
um.value = translate("更新成功,请刷新页面!")
|
||||
um.value = translate("Update the feature file successfully, please refresh the page")
|
||||
else
|
||||
um.value = translate("更新失败,格式错误!")
|
||||
um.value = translate("Failed to update feature file, format error")
|
||||
end
|
||||
os.execute("rm /tmp/upload/* -fr");
|
||||
end
|
||||
@ -236,6 +225,4 @@ if luci.http.formvalue("upload") then
|
||||
elseif luci.http.formvalue("download") then
|
||||
Download()
|
||||
end
|
||||
|
||||
|
||||
return m
|
||||
|
@ -13,7 +13,7 @@ local jsc = require "luci.jsonc"
|
||||
local m, s
|
||||
arg[1] = arg[1] or ""
|
||||
m = Map("appfilter",
|
||||
translate("上网统计("..arg[1]..")"),
|
||||
translate("Data Statistics").."("..arg[1]..")",
|
||||
translate(""))
|
||||
|
||||
local v
|
||||
|
@ -51,11 +51,11 @@ table.imagetable td {
|
||||
var total_time_str;
|
||||
|
||||
if (hour > 0)
|
||||
total_time_str=hour + "小时" + min + "分"
|
||||
total_time_str=hour + "<%:h%>" + min + "<%:m%>"
|
||||
else{
|
||||
if (min == 0 && seconds2 != 0)
|
||||
min = 1;
|
||||
total_time_str=min + "分"
|
||||
total_time_str=min + "<%:m%>"
|
||||
}
|
||||
return total_time_str;
|
||||
}
|
||||
@ -82,7 +82,7 @@ table.imagetable td {
|
||||
option = {
|
||||
title: [
|
||||
{
|
||||
text: 'APP时间统计',
|
||||
text: "<%:App Time Statistics%>",
|
||||
textStyle: {
|
||||
fontSize: 16,
|
||||
color: "black"
|
||||
@ -110,8 +110,8 @@ table.imagetable td {
|
||||
var total_time = get_display_time(parms.data.value);
|
||||
var str= parms.seriesName+"</br>"+
|
||||
parms.marker+""+parms.data.legendname+"</br>"+
|
||||
"时间:"+ total_time+"</br>"+
|
||||
"占比:"+ parms.percent+"%";
|
||||
"<%:Visit Time%>: "+ total_time+"</br>"+
|
||||
"<%:Percentage%>: "+ parms.percent+"%";
|
||||
return str ;
|
||||
}
|
||||
},
|
||||
@ -128,11 +128,11 @@ table.imagetable td {
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "访问时间",
|
||||
name: "<%:Visit Time%>",
|
||||
type:'pie',
|
||||
center: ['35%', '50%'],
|
||||
radius: ['40%', '65%'],
|
||||
clockwise: false, //饼图的扇区是否是顺时针排布
|
||||
clockwise: false,
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
normal: {
|
||||
@ -164,8 +164,6 @@ table.imagetable td {
|
||||
var m2R2Data=new Array()
|
||||
var total_time=0
|
||||
for(var i = 0; i < data.length; i++){
|
||||
console.log("begin display222.");
|
||||
|
||||
var dev_obj = data[i];
|
||||
if (dev_obj.visit_time == 0)
|
||||
continue;
|
||||
@ -186,7 +184,7 @@ table.imagetable td {
|
||||
option = {
|
||||
title: [
|
||||
{
|
||||
text: 'APP分类时间统计',
|
||||
text: "<%:App classification time statistics%>",
|
||||
textStyle: {
|
||||
fontSize: 16,
|
||||
color: "black"
|
||||
@ -213,9 +211,8 @@ table.imagetable td {
|
||||
formatter:function (parms){
|
||||
var total_time = get_display_time(parms.data.value);
|
||||
var str= parms.seriesName+"</br>"+
|
||||
parms.marker+""+parms.data.legendname+"</br>"+
|
||||
"时间:"+ total_time +"</br>"+
|
||||
"占比:"+ parms.percent+"%";
|
||||
parms.marker+""+parms.data.legendname+"</br>"+"<%:Visit Time%>: "+ total_time +"</br>" +
|
||||
"<%:Percentage%>: "+ parms.percent+"%";
|
||||
return str ;
|
||||
}
|
||||
},
|
||||
@ -232,11 +229,11 @@ table.imagetable td {
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name:'访问时间',
|
||||
name:"<%:Visit Time%>",
|
||||
type:'pie',
|
||||
center: ['35%', '50%'],
|
||||
radius: ['40%', '65%'],
|
||||
clockwise: false, //饼图的扇区是否是顺时针排布
|
||||
clockwise: false,
|
||||
avoidLabelOverlap: false,
|
||||
label: {
|
||||
normal: {
|
||||
@ -289,12 +286,12 @@ table.imagetable td {
|
||||
{
|
||||
var action_status=""
|
||||
if(st[i].latest_action == 1)
|
||||
action_status="已过滤"
|
||||
action_status="<%:Filtered%>"
|
||||
else
|
||||
action_status="未过滤"
|
||||
action_status="<%:Unfiltered%>"
|
||||
var hostname=""
|
||||
if(st[i].hostname == "" || st[i].hostname == "*"){
|
||||
hostname="?";
|
||||
hostname="--";
|
||||
}
|
||||
else{
|
||||
hostname=st[i].hostname;
|
||||
@ -313,11 +310,11 @@ table.imagetable td {
|
||||
total_time_str="-"
|
||||
else {
|
||||
if (hour > 0)
|
||||
total_time_str=hour + "小时" + min + "分"
|
||||
total_time_str=hour + "<%:h%>" + min + "<%:m%>"
|
||||
else{
|
||||
if (min == 0)
|
||||
min = 1;
|
||||
total_time_str=min + "分"
|
||||
total_time_str=min + "<%:m%>"
|
||||
}
|
||||
}
|
||||
|
||||
@ -331,6 +328,7 @@ table.imagetable td {
|
||||
|
||||
//]]></script>
|
||||
|
||||
|
||||
<fieldset class="cbi-section">
|
||||
<div id="display">
|
||||
<div id="main" style="width: 500px;height:300px;"></div>
|
||||
@ -338,12 +336,12 @@ table.imagetable td {
|
||||
</div>
|
||||
<table class="imagetable" id="user_status_table">
|
||||
<tr>
|
||||
<th ><%:App%></th>
|
||||
<th ><%:主机名%></th>
|
||||
<th ><%:mac地址%></th>
|
||||
<th><%:开始时间%></th>
|
||||
<th><%:访问时长%></th>
|
||||
<th><%:过滤状态%></th>
|
||||
<th ><%:App Name%></th>
|
||||
<th ><%:Hostname%></th>
|
||||
<th ><%:Mac%></th>
|
||||
<th><%:Start Time%></th>
|
||||
<th><%:Visit Time%></th>
|
||||
<th><%:Filter Status%></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8"><em><br /><%:Collecting data...%></em></td>
|
||||
|
@ -42,7 +42,7 @@ table.imagetable td {
|
||||
{
|
||||
var hostname=""
|
||||
if(devlist[i].hostname == "" || devlist[i].hostname == "*"){
|
||||
hostname="?";
|
||||
hostname="--";
|
||||
}
|
||||
else{
|
||||
hostname=devlist[i].hostname;
|
||||
@ -65,9 +65,9 @@ table.imagetable td {
|
||||
}
|
||||
tr.insertCell(-1).innerHTML = app_list_str;
|
||||
if (devlist[i].online == 1)
|
||||
tr.insertCell(-1).innerHTML = "在线";
|
||||
tr.insertCell(-1).innerHTML = "<%:Online%>";
|
||||
else
|
||||
tr.insertCell(-1).innerHTML = "离线";
|
||||
tr.insertCell(-1).innerHTML = "<%:Offline%>";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -77,15 +77,15 @@ table.imagetable td {
|
||||
|
||||
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:终端列表%></legend>
|
||||
<legend><%:Client List%></legend>
|
||||
<table class="imagetable" id="user_status_table">
|
||||
<tr>
|
||||
<th ><%:编号%></th>
|
||||
<th ><%:主机名%></th>
|
||||
<th ><%:mac地址%></th>
|
||||
<th ><%:ip地址%></th>
|
||||
<th><%:常用APP(TOP5)%></th>
|
||||
<th><%:在线状态%></th>
|
||||
<th ><%:Id%></th>
|
||||
<th ><%:Hostname%></th>
|
||||
<th ><%:Mac%></th>
|
||||
<th ><%:Ip%></th>
|
||||
<th><%:Common App(TOP5)%></th>
|
||||
<th><%:Online Status%></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8"><em><br /><%:Collecting data...%></em></td>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<%+cbi/valueheader%>
|
||||
<label class="cbi-value" style="display:inline-block; width: 130px" for="ulfile"><%:选择本地特征库文件:%></label>
|
||||
<label class="cbi-value" style="display:inline-block; width: 130px" for="ulfile"><%:Select feature file:%></label>
|
||||
<input class="cbi-input-file" style="width: 500px" type="file" id="ulfile" name="ulfile" />
|
||||
<input type="submit" class="cbi-button cbi-input-apply" name="upload" value="<%:Upload%>" />
|
||||
<%+cbi/valuefooter%>
|
||||
|
@ -5,31 +5,34 @@ msgstr "常用网站"
|
||||
msgid "appfilter"
|
||||
msgstr "应用过滤"
|
||||
|
||||
msgid "App Filter"
|
||||
msgstr "应用过滤"
|
||||
|
||||
msgid "game"
|
||||
msgstr "游戏"
|
||||
|
||||
msgid "web"
|
||||
msgid "web"
|
||||
msgstr "网页"
|
||||
|
||||
msgid "video"
|
||||
msgstr "视频"
|
||||
|
||||
msgid "chat"
|
||||
msgstr "聊天"
|
||||
|
||||
msgid "download"
|
||||
msgstr "下载"
|
||||
|
||||
msgid "p2p"
|
||||
msgstr "p2p"
|
||||
|
||||
msgid "music"
|
||||
msgstr "音乐"
|
||||
|
||||
msgid "shopping"
|
||||
msgstr "购物"
|
||||
|
||||
msgid "working"
|
||||
|
||||
msgid "video"
|
||||
msgstr "视频"
|
||||
|
||||
msgid "chat"
|
||||
msgstr "聊天"
|
||||
|
||||
msgid "download"
|
||||
msgstr "下载"
|
||||
|
||||
msgid "p2p"
|
||||
msgstr "p2p"
|
||||
|
||||
msgid "music"
|
||||
msgstr "音乐"
|
||||
|
||||
msgid "shopping"
|
||||
msgstr "购物"
|
||||
|
||||
msgid "working"
|
||||
msgstr "办公"
|
||||
|
||||
msgid "employee"
|
||||
@ -47,6 +50,110 @@ msgstr "至少选择一个用户,否则对所有用户生效"
|
||||
msgid "Select users"
|
||||
msgstr "选择用户"
|
||||
|
||||
msgid "Id"
|
||||
msgstr "编号"
|
||||
|
||||
msgid "Hostname"
|
||||
msgstr "主机名"
|
||||
|
||||
msgid "Common App(TOP5)"
|
||||
msgstr "常用APP(TOP5)"
|
||||
|
||||
msgid "Online Status"
|
||||
msgstr "在线状态"
|
||||
|
||||
msgid "Client List"
|
||||
msgstr "终端列表"
|
||||
|
||||
msgid "Online"
|
||||
msgstr "在线"
|
||||
|
||||
msgid "Offline"
|
||||
msgstr "离线"
|
||||
|
||||
msgid "App Time Statistics"
|
||||
msgstr "App 时间统计"
|
||||
|
||||
msgid "Filter Status"
|
||||
msgstr "过滤状态"
|
||||
|
||||
msgid "Data Statistics"
|
||||
msgstr "数据统计"
|
||||
|
||||
|
||||
|
||||
msgid "Current Version"
|
||||
msgstr "当前版本"
|
||||
|
||||
msgid "App Feature Num"
|
||||
msgstr "特征码个数"
|
||||
|
||||
msgid "Update feature"
|
||||
msgstr "特征库更新"
|
||||
|
||||
msgid "Time Setting"
|
||||
msgstr "时间控制"
|
||||
|
||||
msgid "Sun"
|
||||
msgstr "周日"
|
||||
|
||||
msgid "Mon"
|
||||
msgstr "周一"
|
||||
|
||||
msgid "Tue"
|
||||
msgstr "周二"
|
||||
|
||||
msgid "Wed"
|
||||
msgstr "周三"
|
||||
|
||||
msgid "Thur"
|
||||
msgstr "周四"
|
||||
|
||||
msgid "Fri"
|
||||
msgstr "周五"
|
||||
|
||||
msgid "Sat"
|
||||
msgstr "周六"
|
||||
|
||||
msgid "Update the feature file successfully, please refresh the page"
|
||||
msgstr "更新特征库成功,请刷新页面!"
|
||||
|
||||
msgid "Failed to update feature file, format error"
|
||||
msgstr "更新特征库失败,格式错误!"
|
||||
|
||||
msgid "Select feature file:"
|
||||
msgstr "选择本地特征库文件:"
|
||||
|
||||
msgid "Start Time"
|
||||
msgstr "开始时间"
|
||||
|
||||
msgid "End Time"
|
||||
msgstr "结束时间"
|
||||
|
||||
msgid "App Name"
|
||||
msgstr "App名称"
|
||||
|
||||
msgid "Visit Time"
|
||||
msgstr "访问时间"
|
||||
|
||||
msgid "App classification time statistics"
|
||||
msgstr "App分类时间统计"
|
||||
|
||||
msgid "Percentage"
|
||||
msgstr "占比"
|
||||
|
||||
msgid "Filtered"
|
||||
msgstr "已过滤"
|
||||
|
||||
msgid "Unfiltered"
|
||||
msgstr "未过滤"
|
||||
|
||||
msgid "h"
|
||||
msgstr "小时"
|
||||
|
||||
msgid "m"
|
||||
msgstr "分"
|
||||
|
||||
msgid "Enable App Filter"
|
||||
msgstr "开启应用过滤"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
#define APP_FILTER_H
|
||||
|
||||
#define AF_VERSION "5.0.1"
|
||||
#define AF_FEATURE_CONFIG_FILE "/etc/appfilter/feature.cfg"
|
||||
#define AF_FEATURE_CONFIG_FILE "/tmp/feature.cfg"
|
||||
|
||||
#define MAX_PARSE_PKT_NUM 16
|
||||
#define MIN_HTTP_DATA_LEN 16
|
||||
@ -92,7 +92,7 @@ typedef struct https_proto{
|
||||
}https_proto_t;
|
||||
|
||||
typedef struct flow_info{
|
||||
struct nf_conn *ct; // Á¬½Ó¸ú×ÙÖ¸Õë
|
||||
struct nf_conn *ct; // <EFBFBD><EFBFBD><EFBFBD>Ӹ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
u_int32_t src;
|
||||
u_int32_t dst;
|
||||
int l4_protocol;
|
||||
|
@ -46,8 +46,8 @@ define Package/appfilter/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin $(1)/etc/init.d
|
||||
$(INSTALL_DIR) $(1)/etc/appfilter
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(CP) ./files/feature.cfg $(1)/etc/appfilter/
|
||||
$(CP) ./files/app_class.txt $(1)/etc/appfilter/
|
||||
$(CP) ./files/*.cfg $(1)/etc/appfilter/
|
||||
$(CP) ./files/*.txt $(1)/etc/appfilter/
|
||||
$(INSTALL_BIN) ./files/appfilter.init $(1)/etc/init.d/appfilter
|
||||
$(INSTALL_BIN) ./files/oaf_rule $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/gen_class.sh $(1)/usr/bin
|
||||
|
8
open-app-filter/files/app_class_en.txt
Executable file
8
open-app-filter/files/app_class_en.txt
Executable file
@ -0,0 +1,8 @@
|
||||
1 chat
|
||||
2 game
|
||||
3 video
|
||||
4 shopping
|
||||
5 music
|
||||
6 recruitment
|
||||
7 download
|
||||
8 website
|
@ -8,3 +8,4 @@ config time 'time'
|
||||
option end_time '23:59'
|
||||
option days '0 1 2 3 4 5 6'
|
||||
option start_time '00:00'
|
||||
config user user
|
@ -5,7 +5,8 @@
|
||||
START=96
|
||||
USE_PROCD=1
|
||||
OAFD_BIN="/usr/bin/oafd"
|
||||
|
||||
FEATURE_FILE="/tmp/feature.cfg"
|
||||
CLASS_FILE="/tmp/app_class.txt"
|
||||
service_triggers()
|
||||
{
|
||||
procd_add_reload_trigger "appfilter"
|
||||
@ -17,7 +18,26 @@ stop_service(){
|
||||
}
|
||||
|
||||
start_service(){
|
||||
gen_class.sh /etc/appfilter/feature.cfg
|
||||
lang=`uci get luci.main.lang`
|
||||
test -f $FEATURE_FILE && rm $FEATURE_FILE
|
||||
test -f $CLASS_FILE && rm $CLASS_FILE
|
||||
if [ x"" == x"$lang" -o x"auto" == x"$lang" ];then
|
||||
ln -s /etc/appfilter/feature.cfg $FEATURE_FILE
|
||||
ln -s /etc/appfilter/app_class.txt $CLASS_FILE
|
||||
else
|
||||
if [ -f "/etc/appfilter/feature_$lang.cfg" ];then
|
||||
ln -s /etc/appfilter/feature_$lang.cfg $FEATURE_FILE
|
||||
else
|
||||
ln -s /etc/appfilter/feature.cfg $FEATURE_FILE
|
||||
fi
|
||||
|
||||
if [ -f "/etc/appfilter/app_class_$lang.txt" ];then
|
||||
ln -s /etc/appfilter/app_class_$lang.txt $CLASS_FILE
|
||||
else
|
||||
ln -s /etc/appfilter/app_class.txt $CLASS_FILE
|
||||
fi
|
||||
fi
|
||||
gen_class.sh /tmp/feature.cfg
|
||||
insmod oaf
|
||||
/usr/bin/oaf_rule reload
|
||||
procd_open_instance
|
||||
|
0
open-app-filter/files/appfilter.lua
Normal file → Executable file
0
open-app-filter/files/appfilter.lua
Normal file → Executable file
51
open-app-filter/files/feature_en.cfg
Executable file
51
open-app-filter/files/feature_en.cfg
Executable file
@ -0,0 +1,51 @@
|
||||
#version v21.9.1
|
||||
#id name:[proto;sport;dport;host url;request;dict]
|
||||
#class chat
|
||||
1001 Facebook:[tcp;;;facebook.com;;]
|
||||
1002 Whatsapp:[tcp;;;whatsapp;;]
|
||||
1003 Twitter:[tcp;;;twitter.com;;]
|
||||
1004 Instagram:[tcp;;;instagram.com;;]
|
||||
1005 VK:[tcp;;;vk.com;;]
|
||||
1006 Line:[tcp;;;line;;]
|
||||
|
||||
#class video
|
||||
3001 YouTube:[tcp;;;youtube;;]
|
||||
3002 NetFlix:[tcp;;;netflix;;]
|
||||
3003 Vimeo:[tcp;;;vimeo;;]
|
||||
3004 DailyMotion:[tcp;;;dailymotion;;]
|
||||
3005 Hulu:[tcp;;;hulu;;]
|
||||
3006 Vube:[tcp;;;vube;;]
|
||||
3007 Twitch:[tcp;;;twitch;;]
|
||||
3008 LiveLeak:[tcp;;;itemfix;;]
|
||||
3009 LiveLeak:[tcp;;;itemfix;;]
|
||||
3010 Xvideos:[tcp;;;xvideos.com;;]
|
||||
3011 Pornhub:[tcp;;;pornhub.com;;]
|
||||
|
||||
#class shopping
|
||||
4001 Amazon:[tcp;;;amazon.com;;]
|
||||
4002 eBay:[tcp;;;ebay.com;;]
|
||||
4003 Etsy:[tcp;;;etsy.com;;]
|
||||
4004 Wish:[tcp;;;wish.com;;]
|
||||
4005 Alibaba:[tcp;;;alibaba;;]
|
||||
4006 Aliexpress:[tcp;;;aliexpress.com;;]
|
||||
4007 Walmart:[tcp;;;walmart.com;;]
|
||||
4008 Sears:[tcp;;;sears.com;;]
|
||||
4009 Kohls:[tcp;;;kohls.com;;]
|
||||
4010 Costco:[tcp;;;costco.com;;]
|
||||
4011 Asos:[tcp;;;asos.com;;]
|
||||
4012 Cuyana:[tcp;;;cuyana.com;;]
|
||||
|
||||
#class download
|
||||
7001 Google Play:[tcp;;;play.google.com;;]
|
||||
7002 AppStore:[tcp;;80;iosapps.itunes.apple.com;;]
|
||||
|
||||
#class website
|
||||
8001 Google:[tcp;;;www.google.com;;]
|
||||
8002 Wiki:[tcp;;;www.wikipedia.com;;]
|
||||
8003 Yahoo:[tcp;;;www.yahoo.com;;]
|
||||
8004 Apple:[tcp;;;www.apple.com;;]
|
||||
8010 Reddit:[tcp;;;www.reddit.com;;]
|
||||
8011 Outlook:[tcp;;;www.outlook.live.com;;]
|
||||
8012 Naver:[tcp;;;www.naver.com;;]
|
||||
8013 Fandom:[tcp;;;www.fandom.com;;]
|
||||
8015 Globo:[tcp;;;www.globo.com;;]
|
@ -59,12 +59,12 @@ load_mac_list()
|
||||
json_add_int "op" 4
|
||||
json_add_object "data"
|
||||
json_add_array "mac_list"
|
||||
config_get appid_list "user" "users"
|
||||
echo "appid list=$appid_list"
|
||||
for appid in $appid_list:
|
||||
config_get mac_list "user" "users"
|
||||
echo "mac list=$mac_list"
|
||||
for mac in $mac_list:
|
||||
do
|
||||
echo "appid=$appid"
|
||||
json_add_string "" $appid
|
||||
echo "mac=$mac"
|
||||
json_add_string "" $mac
|
||||
done
|
||||
json_str=`json_dump`
|
||||
config_apply "$json_str"
|
||||
|
@ -76,7 +76,7 @@ void init_app_name_table(void)
|
||||
int count = 0;
|
||||
char line_buf[2048] = {0};
|
||||
|
||||
FILE *fp = fopen("/etc/appfilter/feature.cfg", "r");
|
||||
FILE *fp = fopen("/tmp/feature.cfg", "r");
|
||||
if (!fp)
|
||||
{
|
||||
printf("open file failed\n");
|
||||
@ -110,7 +110,7 @@ void init_app_class_name_table(void)
|
||||
char line_buf[2048] = {0};
|
||||
int class_id;
|
||||
char class_name[64] = {0};
|
||||
FILE *fp = fopen("/etc/appfilter/app_class.txt", "r");
|
||||
FILE *fp = fopen("/tmp/app_class.txt", "r");
|
||||
if (!fp)
|
||||
{
|
||||
printf("open file failed\n");
|
||||
|
Loading…
Reference in New Issue
Block a user