diff --git a/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua b/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua index b32cd0480..cfeb37823 100644 --- a/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua +++ b/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua @@ -46,7 +46,7 @@ remote_dns:value("tls://94.140.14.140", "94.140.14.140 (AdGuard)") remote_dns:value("tls://94.140.14.141", "94.140.14.141 (AdGuard)") remote_dns:depends( "configfile", "./def_config.yaml") remote_dns = s:option(Value, "remote_dns2", " ") -remote_dns.default = "tls://1.0.0.1" +remote_dns.default = "tls://208.67.220.220" remote_dns:value("tls://8.8.8.8", "8.8.8.8 (Google DNS)") remote_dns:value("tls://8.8.4.4", "8.8.4.4 (Google DNS)") remote_dns:value("tls://1.1.1.1", "1.1.1.1 (CloudFlare DNS)") diff --git a/luci-app-mosdns/root/etc/config/mosdns b/luci-app-mosdns/root/etc/config/mosdns index f21d735e7..53b197244 100644 --- a/luci-app-mosdns/root/etc/config/mosdns +++ b/luci-app-mosdns/root/etc/config/mosdns @@ -13,5 +13,5 @@ config mosdns 'mosdns' option loglv 'info' option logfile '/tmp/mosdns.txt' option remote_dns1 'tls://8.8.4.4' - option remote_dns2 'tls://1.0.0.1' + option remote_dns2 'tls://208.67.220.220' option listen_port '5335' diff --git a/luci-app-mosdns/root/etc/mosdns/def_config_orig.yaml b/luci-app-mosdns/root/etc/mosdns/def_config_orig.yaml index 0f3c651c2..3278ba618 100644 --- a/luci-app-mosdns/root/etc/mosdns/def_config_orig.yaml +++ b/luci-app-mosdns/root/etc/mosdns/def_config_orig.yaml @@ -110,23 +110,19 @@ plugins: - matches: has_resp exec: accept - # fallback 用本地服务器 sequence - # 返回不包含本地 ip 则 reject - tag: query_is_local_ip type: sequence args: - exec: $local_sequence - - matches: resp_ip $geoip_cn - exec: accept - - exec: reject + - matches: "!resp_ip $geoip_cn" + exec: drop_resp # fallback 用远程服务器 sequence - tag: query_is_remote type: sequence args: - exec: $remote_sequence - - exec: accept # fallback 用远程服务器 sequence - tag: fallback diff --git a/luci-app-mosdns/root/etc/mosdns/rule/geosite_cn.txt b/luci-app-mosdns/root/etc/mosdns/rule/geosite_cn.txt index d63221672..1fa4a75d4 100644 --- a/luci-app-mosdns/root/etc/mosdns/rule/geosite_cn.txt +++ b/luci-app-mosdns/root/etc/mosdns/rule/geosite_cn.txt @@ -1180,7 +1180,6 @@ 139wanke.com 139y.com 139zhuti.com -13cg.com 13cr.com 13ejob.com 13gm.com @@ -1925,7 +1924,6 @@ 20z.com 21-rent.com 21-sun.com -210166.com 210997.com 210z.com 2113.net @@ -2578,12 +2576,9 @@ 3323399.com 332831.com 333-555.com -3331909.com -3332025.com 3332219.com 3332235.com 3332358.com -3332600.com 333333.com 3335665.com 33360.com @@ -4841,6 +4836,7 @@ 5earena.com 5earenacdn.com 5eplay.com +5eplaycdn.com 5etv.com 5ewin.com 5fen.com @@ -5724,7 +5720,6 @@ 7hon.com 7huang.org 7i2.com -7icp.com 7ipr.com 7jia.com 7jia2.com @@ -6842,7 +6837,6 @@ 98t.net 98weixin.com 98znz.com -99-ss.com 99.com 99083.com 99114.com @@ -13939,7 +13933,6 @@ chinaaet.com chinaagrisci.com chinaagv.com chinaairer.com -chinaalex.com chinaamc.com chinaamuse.com chinaanonymous.com @@ -15415,7 +15408,6 @@ cn360cn.com cn365c.com cn365d.com cn365e.com -cn3k5.com cn3wm.com cn486.com cn4e.com @@ -17466,7 +17458,6 @@ dangbei.net dangbeiprojector.com dangcdn.com dangdang.com -dangfudh.xyz dangguai.com danghongyun.com danghuan.com @@ -19501,7 +19492,6 @@ duobiji.com duocaitou.com duochang.cc duodaa.com -duodada.com duodanke.com duodaoertong.com duodian.com @@ -21823,7 +21813,6 @@ fengeek.com fengeini.com fengex.com fengfeng.cc -fenggeba.com fenghenever.com fenghong.tech fenghuaju.cc @@ -23622,6 +23611,7 @@ ggac.net ggcida.com ggcj.com ggcykf.com +ggdata.com ggemo.com ggerg.com ggeye.com @@ -28319,7 +28309,6 @@ huomao.com huomaqun.com huoming.com huopinyuan.com -huoqiuapp.com huosdk.com huoshan.cc huoshan.club @@ -28337,7 +28326,6 @@ huotan.com huowan.com huoxing24.com huoxingba.com -huoxingtan66.com huoxingzi.com huoxun.com huoyan.com @@ -28617,6 +28605,7 @@ hzamcare.com hzapuqi.com hzbenet.com hzbh.com +hzbianqing.com hzbike.com hzbook.com hzbxm.com @@ -28665,7 +28654,6 @@ hzjmjl.com hzjqhy.com hzjs56.com hzjunglepay.com -hzjunxing.com hzkayo.com hzkshx.com hzkuangxiangzi.com @@ -30341,7 +30329,6 @@ iraoping.com ircmnr.com ireader.com ireadercity.com -ireaderm.net ireadweek.com ireadyit.com irealbest.com @@ -31363,7 +31350,6 @@ jhrdqx.com jhsbggw.com jhscm.com jhscrm.com -jhsctv.com jhsfojiao.com jhsjtxx.com jhssapp.com @@ -32206,7 +32192,6 @@ jiuzhang.com jiuzheng.com jiuzhilan.com jiuzhinews.com -jiuzhu999.com jiuzungame.com jiwa123.com jiwanjiwan.com @@ -32770,7 +32755,6 @@ jshrconsult.com jshsoft.com jshuachen.com jshy.com -jsielxo.com jsifaja.com jsimg.cc jsinfo.net @@ -33522,6 +33506,7 @@ kamenwang.com kamidm.com kamidox.com kamopos.com +kan.cc kan0512.com kan300.com kanbaobei.com @@ -35860,6 +35845,7 @@ lib520.com liba.com libaclub.com libai.com +libaidns.com libaopay.com libinx.com libisky.com @@ -40055,7 +40041,6 @@ mywood.cc myworld6.com myxypt.com myyishu.com -myyj.net myyoudao.com myypark.com myyx618.com @@ -40599,7 +40584,6 @@ nfschina.com nfwin.com nfyk.com nfzhouyi.com -nfzmbrand.com ng-alain.com nga.wiki ngabbs.com @@ -44527,7 +44511,6 @@ qq933.com qqaiqin.com qqaku.com qqan.com -qqapk.com qqba.com qqbiaoqing.com qqbiaoqing8.com @@ -44822,6 +44805,7 @@ quegame.com quegoo.com quegui.run queji.tw +queniuaa.com queniubg.com queniubm.com queniucf.com @@ -44833,6 +44817,7 @@ queniuhy.com queniuiq.com queniukr.com queniukw.com +queniupl.com queniuqy.com queniurc.com queniusa.com @@ -46567,7 +46552,6 @@ sd5g.com sdailong.com sdbao.com sdbeta.com -sdbykqn.com sdbys.com sdca119.com sdchem.net @@ -50934,7 +50918,6 @@ tb888.net tbadc.com tbankw.com tbcache.com -tbdazhe.com tbh5.com tbhcc.com tbhelper.com @@ -55167,7 +55150,6 @@ webpackjs.com webpiaoliang.com webportal.cc webpowerchina.com -webppd.com webqxs.com webrtc.win webs.so @@ -56376,7 +56358,6 @@ wm18.com wmc-bj.net wmcloud.com wmcn.com -wmedias.com wmiao.com wming.com wmiyx.com @@ -56739,6 +56720,7 @@ wqop2018.com wqqwmw.com wqrlink.tech wqxuetang.com +wqycq.com wqyunpan.com wqzx.net wrating.com @@ -57219,7 +57201,6 @@ wxt2020.com wxthe.com wxtj10086.com wxtpb.com -wxuse.com wxw120.com wxwzt.com wxy1314.com @@ -58326,6 +58307,7 @@ xifu120.com xifumi.com xifuquan.com xigeweb.com +xigou100.com xigua110.com xiguabook.com xiguaimg.com @@ -60090,7 +60072,6 @@ yatiwang.com yatsenglobal.com yatsoft.com yawancaiwu.com -yawenb.com yaxi.net yaxige.com yaxinde.com @@ -60686,6 +60667,7 @@ yimin.biz yimin168.com yimincaifu.com yiminchaoshi.com +yimingkeji.net yimingzhi.net yimininfo.com yiminjiayuan.com @@ -61409,6 +61391,7 @@ youchejiuxing.com youchent.com youcheyihou.com youchuhuodong.com +youcloud.com youda8.com youdaili.net youdaiw.com @@ -61547,7 +61530,6 @@ yousenjiaoyu.com youshang.com youshanmeishi.com yousheng.shop -yousheng8.com youshenhudong.com yousheyoujia.com youshifu.com @@ -61692,7 +61674,6 @@ youzibuy.com youzijie.com youziku.com youzikuaibao.com -youziqk.com youzu.com yovisun.com yovocloud.com @@ -64736,6 +64717,7 @@ znyp.com znyseo.com znyshurufa.com znznet.net +zo-station.com zoassetmanagement.com zocai.com zodiac.wang @@ -64835,7 +64817,6 @@ zpidc.com zpjiashuo.com zplayworld.com zpm.so -zppop.com zppxba.com zptong.com zptq.com diff --git a/luci-app-mosdns/root/etc/mosdns/rule/geosite_no_cn.txt b/luci-app-mosdns/root/etc/mosdns/rule/geosite_no_cn.txt index deaf99231..e335a9f73 100644 --- a/luci-app-mosdns/root/etc/mosdns/rule/geosite_no_cn.txt +++ b/luci-app-mosdns/root/etc/mosdns/rule/geosite_no_cn.txt @@ -3006,6 +3006,7 @@ aeasyshop.com aebn.com aebn.net aeg +aei.org aenhancers.com aeon-pool.com aerogardcn.com @@ -30273,7 +30274,6 @@ www.adultcamweb.com www.advertisergleam.com www.advertstream.com www.advisen.com -www.aei.org www.aerilon.com www.aeromatasia.com www.aevpn.com diff --git a/luci-app-mosdns/root/etc/mosdns/rule/serverlist.txt b/luci-app-mosdns/root/etc/mosdns/rule/serverlist.txt index caa512f19..8e8f20a34 100644 --- a/luci-app-mosdns/root/etc/mosdns/rule/serverlist.txt +++ b/luci-app-mosdns/root/etc/mosdns/rule/serverlist.txt @@ -4,14 +4,22 @@ 0.r.msn.com 0.up.qingdaonews.com 000dn.com +001.0x1f4b0.com 0013.cc 001adafg.xyz 001union.com +002.0x1f4b0.com 0024aaaa.com 0024aadd.com +003.0x1f4b0.com 003store.com +004.0x1f4b0.com 004809f9da.com 004fsdljasd.xyz +005.0x1f4b0.com +006.0x1f4b0.com +007.0x1f4b0.com +008.0x1f4b0.com 0082tv.net 00aaa2d81c1d174.com 00d1n000002btifuae.net.zooplus.com @@ -195,6 +203,7 @@ 0vkkf.cn 0w1rqq69fi0e.com 0x01n2ptpuz3.com +0x1f4b0.com 0x5.me 0xxd.com 1-administrators-mail.confluence.net.zooplus.de @@ -483,6 +492,7 @@ 14a5cd0cd8.com 14badb5195.com 14cpoff22.de +14e07e98b0.com 14i8trbbx4.com 15.taboola.com 150.net.zooplus.fr @@ -625,6 +635,7 @@ 1empiredirect.com 1ex4oemg99mv.com 1f3k.com +1f6f6bfb05.com 1f95b058c0.com 1fd92n6t8.de 1freecounter.com @@ -1018,6 +1029,7 @@ 2mfx.cn 2mg.jim86d.cn 2mg898.jim86d.cn +2mke5l187.de 2mlh2fw7z62i.com 2mo3neop.de 2o7.net @@ -1079,6 +1091,7 @@ 30ampj.com 30b9e3a7d7e2b.com 30edu.com.cn +30f5554dd4.com 30pk41r1i.de 31.media.tumblr.com 310ca263.space @@ -1466,6 +1479,7 @@ 4p85.cn 4prgkoj870j9.com 4rabettraff.com +4rgm6z478o.cn 4rw6x0b.cn 4sexmail.com 4stats.de @@ -2202,7 +2216,6 @@ 7ssw.cn 7t56.com 7t955.com -7two0.rocks 7v46.icu 7wen.cn 7x-star.info @@ -2569,6 +2582,7 @@ 9bph.top 9c3ac3307a.com 9c40a04e9732e6a6.com +9c4fa152a6.com 9c56fb6868.com 9cbj41a5.de 9cd76b4462bb.com @@ -4124,6 +4138,7 @@ abkoxlikbzs.com ablatesgascon.cam ableaborah.com ablebodiedfibre.com +ablen11.tk ablenctionalle.info ablesasmetotr.monster ablida.net @@ -4471,10 +4486,12 @@ accgatewayvisionmail.net.europe-aws-oid.net.service.net.zooplus.es accgitlabvision-mail-svc-mail.net.zooplus.nl acches.com accidentalinfringementfat.com +accidentallyrussian.com accio.ai acclaimcraftsman.com accmgr.com accoladethoroughly.com +accommodatingremindauntie.com accompanimentcouldsurprisingly.com accompanycollapse.com accomplishedgradual.com @@ -5192,6 +5209,8 @@ adcrax.com adcreative.naver.com adcron.com adcrowd.com +adcs-ap.myappsget.com +adcs-ue.myappsget.com add.sina.com.cn addabai.com addata.ku6.com @@ -6745,6 +6764,7 @@ adx.ads.heytapmobi.com adx.ads.oppomobile.com adx.adxglobal.com adx.agrantsem.com +adx.apiok.net adx.appsdk.com.cn adx.chip.de adx.com.ru @@ -6855,6 +6875,7 @@ aeroded.com aeroplaneversion.com aeros01.tk aeros02.tk +aeros09.tk aeros11.tk aeros12.tk aeroselabite.space @@ -7242,6 +7263,7 @@ ahwangtao.com ahwczn.cn ahwiaw.xyz ahwrin88tl.com +ahxbpm.com ahxhny.cn ahylong.cn ahyrgkfmdoxivec.top @@ -7346,6 +7368,7 @@ airpr.com airproxyboat.in airproxyproxy.pw airproxytpb.re +airproxyunblocked.org airpush.com airsaurd.com airserve.net @@ -7557,6 +7580,7 @@ alicdnv2.sitemonitor.cn.miaozhen.com alidongxi.com alieneepunta.com alienhub.xyz +aliensold.com alifafdlnjeruif.com alifixed.cn alightbornbell.com @@ -7846,6 +7870,7 @@ amirteeg.com amjoltiktor.com amjtizfeqwz.com ammankeyan.com +ammunitionconsiderinstitution.com amnet.tw amnoctowlan.club amoad.com @@ -8825,6 +8850,7 @@ api.mobojoy.baidu.com api.mobula.sdk.duapps.com api.moogos.com api.mp.uc.cn +api.myadsget.com api.newad.ifeng.com api.newbelden.com api.newsfeed.intl.miui.com @@ -8876,6 +8902,7 @@ api.xiaohuxi.cn api.xk.miui.com api.y.igexin.com api.yidaomobi.com +api.youngle.tech api.youtu.qq.com api.youxiaoad.com api.yuedu.iqiyi.com @@ -8962,6 +8989,7 @@ app.9yyg.cn app.acm.dzwww.com app.allproof.net app.aplus.pptv.com +app.appsflyer.com app.arizonawildcats.com app.avada.io app.bceagles.com @@ -9209,6 +9237,7 @@ aqiwxzv.cn aqjdigkqvmakz.com aqkkoalfpz.com aqnpbpa.cn +aqpmzoomqab.com aqpogwawr.com aqsj.xyz aqtcw.cn @@ -9810,6 +9839,7 @@ aubpfvvsiyf.xyz auchoons.net auckledfathere.xyz aucqdk.autodoc.es +auction-load.unityads.unity3d.com auctionnudge.com aud.bild.de audaciousdefault.com @@ -9867,7 +9897,6 @@ augroash.com augu3yhd485st.com august15download.com augusticky.com -augvtjtnsfnxg.ru aujooxoo.com aujxjunasp.com aukalerim.com @@ -9883,6 +9912,7 @@ aumarketing.sedgwick.com aumaupoy.net aumeryyaruran.live aumpoabi.com +aumseewu.xyz aumsookr.com aungoutsy.com aungumse.com @@ -10119,6 +10149,7 @@ ax.ifeng.com ax21pics.org axaixhputktc.com axbxgg.com +axcdt.cn axcdy.cn axeldivision.com axelsermit.com @@ -10173,6 +10204,7 @@ ayuki.ink ayunzhizuo.ltd ayvcjvdfk.xyz ayverwe.cn +aywikhsw.xyz az693360.vo.msecnd.net azabu-u.ac.jp azadify.com @@ -10299,7 +10331,6 @@ b1.b2b168.net b1.baomihua.com b1.c1km4.com b1.engdvd.com -b1.puxuewang.cn b1.qqjay.com b1.xiao84.com b11stop.com @@ -10808,6 +10839,7 @@ bauvaikul.com bauweethie.com bauwezou.net bavvgo.zingat.com +bavwwovatawh.com bavxxf.xyz baw5tracker.com bawdybalance.com @@ -11115,6 +11147,7 @@ beastsclassbiscuit.com beat.yourtv.jp beatbase.live beatifulapplabland.com +beatricecathy.com beauhoneycomb.com beaumont.actonservice.com beautifulhobbies.com @@ -11211,7 +11244,6 @@ begintrain.com begonegowked.com begrimdos.com begun.ru -begunprescription.com beha.ksmobile.com behalfplead.com beharmalted.info @@ -12754,6 +12786,7 @@ buildsintellecttweak.com buildtrafficx.com builtchangeable.com buipovexhav.com +bujiangjiu123.com bukash2jf8jfpw09.com buksaiss.net bulankk.com @@ -13321,7 +13354,6 @@ caing.adsame.com caipowho.net cairalei.com caiteesh.net -caithamo.net caixin.adsame.com caixinimg.adsame.com caiyeml.pw @@ -13657,6 +13689,7 @@ cbs.wondershare.com cbsusiqkwqxbrmv.com cbtmyonynqhrcdp.xyz cbtrk.net +cbtwhsfkc.com cc-api-data.adobe.io cc-dt.com cc.0133hao.net @@ -13781,6 +13814,7 @@ cdn.aiclicash.com cdn.aiclk.com cdn.app.kachapt.cn cdn.app.liuxingyul.cn +cdn.appnext.com cdn.arcstudiopro.com cdn.at.atwola.com cdn.atdmt.com @@ -15026,6 +15060,7 @@ clientlog.music.163.com clientlog3.music.163.com clientservice.alphasimplex.com clientservices.googleapis.com +cliggi.download clikxoiqvdlec.xyz climesmazdoor.com clinical.questdiagnostics.com @@ -15816,6 +15851,7 @@ config.parsely.com config.push.sogou.com config.unityads.unitychina.cn configurationluxuriantinclination.com +configv2.unityads.unity3d.com confinehindrancethree.com confirmational.com confirmit.com @@ -17250,6 +17286,7 @@ d.admx.baixing.com d.adroll.com d.agkn.com d.applovin.com +d.applvn.com d.beigedi.com d.biboi.cn d.clkservice.youdao.com @@ -17492,6 +17529,7 @@ d1ybdlg8aoufn.cloudfront.net d1ytalcrl612d7.cloudfront.net d1yu67rmchodpo.cloudfront.net d1z9vm58yath60.cloudfront.net +d1zjpzpoh45wtm.cloudfront.net d1zjr9cc2zx7cg.cloudfront.net d1zrs4deyai5xm.cloudfront.net d1zw85ny9dtn37.cloudfront.net @@ -18112,6 +18150,7 @@ darkestfertil.com darking01.tk darking02.tk darking03.tk +darking04.tk darking08.tk darking09.tk darkoccasion.pro @@ -18819,8 +18858,10 @@ departurealtar.com departureconspicuous.com depeas.com depekt.com +dependablestaredpollution.com dephasevittate.com depictimproperdenunciation.com +depids.com depirsmandk5.com deplayer.net deploreimpendingnasty.com @@ -19060,6 +19101,7 @@ dhrhzii89gpwo.cloudfront.net dhsjpz.bugaboo.com dhthrewdownth.xyz dhtv6.xyz +dhuimjkivb.com dhundora.com dhvary.com dhyallache.space @@ -19382,6 +19424,7 @@ disabled.owa-paywall.net.zooplus.fr disabled.owa.betaarketing.net.zooplus.fr disabled.owa.prod.net.zooplus.fr disabled.owademo.net.zooplus.fr +disagreeadjourn.com disagreenutsflare.com disappearanceinspiredscan.com disappearancetickfilth.com @@ -19419,6 +19462,7 @@ discreetfield.com discriminationprovide.com discussmercurydifferently.com discuteeves.com +discuz.gtimg.cn disembarkadmonishment.com disembarkappendix.com disembroildisembroilassuredwitchcraft.com @@ -19565,6 +19609,7 @@ dklkxb.xyz dkm6b5q0h53z4.cloudfront.net dko.vente-unique.nl dkohudoflh.com +dkotrack.com dkqapp.cn dkrbus.com dkre4lyk6a9bt.cloudfront.net @@ -19791,6 +19836,7 @@ do-not-tracker.org do.lymstsc.com do09.net do6256x8ae75.cloudfront.net +do69ifsly4.me do69ll745l27z.cloudfront.net doabqu.s3.com.tw doaipomer.com @@ -19828,6 +19874,7 @@ dogjb.com doglobal.com doglobal.net dogolurkr.com +dogqxbbrlavdnwt.com dogshipuniate.live dogsshoes.com dogwrite.com @@ -19908,6 +19955,7 @@ donkeymob.com donreach.com donstick.com dontbeevils.de +donthedoorwi.com donttbeevils.de doobaupu.xyz doobinooby.com @@ -20377,6 +20425,7 @@ ductclickjl.com ductquest.com ductrealistic.com ducubchooa.com +dudair.com dudaixou.com dudm.qingsj.cn dudslubesviol.com @@ -20573,6 +20622,7 @@ dynamic-dns.net dynamic.aol.com dynamic.zol.com.cn dynamicadx.com +dynamicapl.com dynamicdn.com dynamicoxygen.com dynamitedata.com @@ -21341,6 +21391,7 @@ earnbearerelectricity.com earnbigo.com earncoins.club earnify.com +earnobnoxious.com earpailton.com earplugmolka.com earthquakeend.com @@ -21348,6 +21399,7 @@ earthquakescarf.com earthycopy.com earuplulfy.xyz easeavaila.buzz +easegoes.com easelgivedolly.com eashassucces.com easou.com @@ -21694,6 +21746,7 @@ eduzzjy.com edvforeveretest.com edvfwlacluo.com edwad.co +edwate.com edzyhx.cn ee.0pi84.cn ee.1s8pj.cn @@ -21819,6 +21872,7 @@ ef.futuroscope.com ef.futuroscope.mobi ef.opendsp.tanx.com ef.tanx.com +ef2aecba6f.com ef9377.com ef9i0f3oev47.com efangcdn.com @@ -21954,7 +22008,6 @@ ejyymghi.com ejzr.golden1.sogou.com ek8.voyage-prive.com ekareqif.xyz -ekbuoopatc.com ekcsqzo.cn ekdbfu.cn ekfe.idanmei.cn @@ -22316,6 +22369,7 @@ enecto.com eneffe.com enemieshemisphere.com enennsa.gushiwen.cn +enerativearea.org energeticexample.com energeticholder.com energeticladybug.com @@ -22389,7 +22443,9 @@ enochiccroatan.guru enodiarahnthedon.com enohb.com enohcw.flyin.com +enormous-use.pro enormousearth.com +enoskees.space enoughts.info enquisite.com enquoted.com @@ -22466,7 +22522,6 @@ eonwayaha.com eoopersed.one eooperseducat.xyz eooslfyhziubo.com -eoovrksqh.com eopa5tepa.icu eoqygep.cn eoredi.com @@ -22501,6 +22556,7 @@ epm.mailperformance.com epmf4.cn epnredirect.ru epnt.ebay.com +epochexr.website epp.2polj.top epresententifi.com eprjyvjhmtpbo.xyz @@ -22575,6 +22631,7 @@ err.ifengcloud.ifeng.com erraticreaction.com erringcrambly.com errlog.umeng.com +errnewlog.umeng.com error-collector.ted.com error.videonow.ru errors.snackly.co @@ -22582,6 +22639,7 @@ errorssmoked.com ers.baidu.com ersallower.com ersfohiplaceof.xyz +ersislaqands.com erstartirrel.buzz ert5.rmcsport.tv ertdsi.cc @@ -22860,6 +22918,7 @@ events-logs.doctolib.com events-prod.autolist.com events-service.coinbase.com events-tracker.deliveroo.net +events.ads.vungle.com events.air.tv events.apester.com events.api.godaddy.com @@ -22884,6 +22943,7 @@ events.matterport.com events.medio.com events.mercadolibre.com events.mikescerealshack.co +events.mz.unity3d.com events.newsroom.bi events.ocdn.eu events.onet.pl @@ -22927,6 +22987,7 @@ evilsbedont.de eviltracker.net evisitanalyst.com evitingawabi.com +evkikdzbdg.com evnt.iol.it evokeowedangers.com evolvemediallc.com @@ -23138,6 +23199,7 @@ eymiwj.promotor.ro eymiwj.prosport.ro eyoupie.cn eyouv.cn +eyqqgnrkxqpkp.com eyrasmamluks.space eysgrje.cn eywvko.shaddy.jp @@ -23161,7 +23223,9 @@ ezngisyw.xyz ezobam.jdsports.nl ezodn.com ezojs.com +ezqmrd9tl9.cn ezstat.ru +ezwxia.xyz ezyenrwcmo.com ezytrack.com f-counter.jp @@ -23354,6 +23418,7 @@ falseframe.com falsemulticultural.com falsenalice.com falsewrist.com +falsifybrightly.com falsifylilac.com falsifythomas.com falytjfsydnxstr.xyz @@ -23664,6 +23729,7 @@ feeloshu.com feelsjet.com feeohmchi.com feesee.com +feesocrald.com feevabeglee.com feewoajy.net feewuvoo.net @@ -24082,6 +24148,7 @@ flightzy.date flightzy.win flimsycircle.com flimsythought.com +flintedkickers.com flinthastened.com flipool.com flippantbliss.com @@ -24464,11 +24531,13 @@ freebitco.in freebloghitcounter.com freebuy.top freecodecs.us.intellitxt.com +freecontent.bid freecontent.com freecontent.date freecontent.net freecontent.party freecontent.science +freecontent.st freecontent.stream freecontent.win freecounter.it @@ -24606,6 +24675,7 @@ fsbozl.dillards.com fsd2.digital fsegfy.lepoint.fr fsgsfaf6.com +fsihfhjt.com fsitel.com fsjsp.com fskj100.cn @@ -24710,6 +24780,7 @@ fundamentalenvironmental.com fundardsesaz.club fundingchoicesmessages.google.com fundraising.centuryresources.com +fungianjaggier.digital fungus.online funkerpep.com funklicks.com @@ -25280,6 +25351,7 @@ geistm.com gejulm1314.com gejzgq.gehaltsvergleich.com gekko.spiceworks.com +geknzqfx.com geldantgrins.com gelnhamfo.xyz gemfaxaha.com @@ -25296,6 +25368,7 @@ gencid.com genecute.com generalebad.xyz generalizationtrifling.com +generalizeruffleembroidery.com generaltracking.de generashionvd.com generationscloveinappropriate.com @@ -25868,6 +25941,7 @@ gloovids.com glores2.lanzoui.com glores2.taisantech.com glorialoft.com +gloriespiuri.com gloriousbeef.com gloriouscracker.com gloriousexternal.com @@ -25906,6 +25980,7 @@ gm.uc003.com gm99.com gma.alicdn.com gma1.com +gmaakjrmpc.com gmads.net gmdfhscbu.com gme-trking.com @@ -26206,6 +26281,7 @@ gotwakinrollet.xyz gou.wps.cn gou1zhe.com goukan.xyz +goundouskirty.com goupeecy.com gouqi.asia gourmetads.com @@ -26605,6 +26681,7 @@ gunpartners.com guntang.me gunzblazingpromo.com guoad.com +guoandong.ltd guodulvyou.xyz guohead.com guojinfeng123.top @@ -26910,6 +26987,7 @@ halogennetwork.com haloscan.com haltingbadge.com haltinggold.com +hambul.com hamletuponcontribute.com hammerhearing.com hampersolarwings.com @@ -27500,6 +27578,7 @@ hiddenseet.com hide.ovh hideheartburndelightful.com hidjoi.perfumesclub.com +hiebemfiolxen.com hiemalsalpids.com hieramuriel.com hif.to @@ -27570,6 +27649,7 @@ hiperstat.com hipersushiads.com hippchapter.com hiprofitnetworks.com +hiqfeqnay.com hiqidi.com hiqrnyn.cn hira-meki.jp @@ -27759,6 +27839,7 @@ hk50606.cn hk6kn.cn hk9600.com hkbmsb.fun +hkbzl.hk hkedve.cn hkfuy.com hkhpnqciykaf.www.gamecamp.gg @@ -27898,6 +27979,7 @@ hoggeepilies.digital hognaivee.com hogqmd.com hogtiesnosh.guru +hohese.com hohpdld.cn hoisin.coocaatv.com hoisquit.buzz @@ -27979,6 +28061,7 @@ hoplaugh.com hoplink.ksosoft.com hoptopboy.com hopuchcomp.xyz +hopuchcompa.com horacemann.actonservice.com hordesproport.digital hordeumtooken.com @@ -28047,6 +28130,7 @@ hotbanner.site hotchat-im.iqiyi.com hotchedbearhug.com hotclips.online +hotclips.space hotcounter.de hotel-marketing.hrs.com hotelbowfeast.com @@ -28227,6 +28311,7 @@ htthereflewove.xyz httpdns.bcelive.com httpdns.browser.miui.com httpdns.push.oppomobile.com +httpkafka.unityads.unity3d.com httpool.com httpp.gdn httpring.qq.com @@ -28470,6 +28555,7 @@ hyfntrak.com hyfx.me hygieneretorted.com hygqtz.cn +hyhfimgg.com hyhfsj.com hyjdz.cn hyjss.tkshyp.com @@ -29783,6 +29869,7 @@ inrd.ru inrdeals.com inrhyhorntor.com inrotomr.com +ins.connatix.com insamemograbi.space insanitynapoleon.com inscan.cn @@ -29891,6 +29978,7 @@ integration.sharethrough.com integrityprinciplesthorough.com intelensafrete.stream intelimet.com +intellecthosting.net intelli-direct.com intelliad.de intellibanners.com @@ -30146,6 +30234,7 @@ ipyud.cn iq.sixaxisllc.com iqdata.ai iqfp1.com +iqhvhdryglkmw.com iqiyi.irs01.com iqiyi.kim iqiyi.m.cn.miaozhen.com @@ -30365,6 +30454,7 @@ iusnajah.cn iutr.uozwys.top iuuff.com iuwzdf.com +iuxaqsjmkeojx.com iuyuwh.cn ivanvillager.com ivcbrasil.org.br @@ -30693,6 +30783,7 @@ jdnlynb.cn jdoqocy.com jdw.zjuwjdc.com je8fn.com +jealousyimpostersophia.com jeannemildconfusion.com jeanrace.com jebb8hurt.com @@ -31049,6 +31140,7 @@ jnkangnuo.com jnkmwr.xyz jnm.o41qed.cn jnmami.cn +jnn-pa.googleapis.com jnqiangzhi.xyz jnrtavp2x66u.com jnsz.net.cn @@ -31196,6 +31288,7 @@ jrhbhz.com jrj.adsame.com jrlt.beacon.qq.com jrnrpma.cn +jroqvbvw.info jrpkizae.com jrpt.jrptweb.org jrrxbz.net @@ -31400,6 +31493,7 @@ jshosting.date jshosting.download jshosting.loan jshosting.party +jshosting.racing jshosting.review jshosting.stream jshosting.trade @@ -31534,6 +31628,7 @@ jun01.oss-cn-beijing.aliyuncs.com juncil.com jundiedsesamin.com junfull.com +juniorsalloquy.guru junipe3rus4virginiana.com juniper.starleaf.com junkeach.com @@ -31737,6 +31832,7 @@ kabobitacism.com kabokc.webuy.com kadam.ru kaden.netoff.co.jp +kadwnhhistoli.xyz kagdf.com kagiti.club kagrooxa.net @@ -32473,6 +32569,7 @@ kukrosti.com kuku99.com kukury2hf8nd09.com kuleqasfors.one +kuljvvoeuespp.com kumed.hrm.healthgrades.com kumeng.cc kumihua.com @@ -33061,6 +33158,7 @@ legitimate.wang legolas-media.com legou361.com legozu.com +legrah.com legrea.com lehebraverooper.xyz lehechapunevent.com @@ -33596,6 +33694,7 @@ listinsteats.cn listlog.baofeng.net listrakbi.com lists.ccmbg.com +lit.connatix.com lite-cdn.com literalcorpulent.com literally-analytics.appspot.com @@ -35759,6 +35858,7 @@ magictreehouse.cn magicwindow.cn magiq.com magnetairport.com +magnetbay.eu magnetic.t.domdex.com magnetisemedia.com magnetmail1.net @@ -35928,6 +36028,7 @@ marapcana.online marathongenerositypremiere.com marazma.com marbil24.co.za +marchgrinwimp.com marchingsmug.com marcianice.com marcom.biodex.com @@ -36531,6 +36632,7 @@ mbctxigml.com mbd.weathercn.com mbdlog.iqiyi.com mbepa.xyz +mbgbomrshrecpwj.xyz mbhs.hrm.healthgrades.com mbid.marfeelrev.com mbledeparatea.com @@ -36838,6 +36940,7 @@ mekati.xyz mekiroki.com mekiroki.org mekstolande.com +melancholygreedyhonour.com melbil.net meleguetre.com meleranhe.com @@ -37156,6 +37259,7 @@ metrics.goldcoastbulletin.com.au metrics.gq.com.au metrics.greendot.com metrics.greenflag.com +metrics.gs-chat.com metrics.hackerrank.com metrics.harley-davidson.com metrics.hatarako.net @@ -37523,6 +37627,7 @@ microscopeattorney.com mid.houyi.baofeng.net midas-i.com midas-network.com +midas-tracker.hellay.net midas.chase.com midas.rong360.com midasatlas.com @@ -37604,6 +37709,7 @@ mindtake.com mine.terorie.com mine.torrent.pw minecrunch.co +minekitten.io minemytraffic.com minently.com miner-deu-1.inf.nimiq.network @@ -38055,6 +38161,7 @@ mochibot.com mockedslavify.website mockingfish.com mocmubse.net +modeidsoanadthenb.xyz modelsgonebad.com moderg.com modern-passenger.pro @@ -38408,6 +38515,8 @@ mrzikj.com ms-trackingapi.phenompeople.com ms.actingidekex.cn ms.analytics.live.com +ms.applovin.com +ms.applvn.com ms.awqsaged.cn ms.bdimg.com ms.cmcm.com @@ -38589,7 +38698,6 @@ munchkin.marketo.com munchkin.marketo.net mundanenail.com mundanepollution.com -munero.me mungfali.com municalcurit.xyz munnin.hicsuntdra.co @@ -38705,7 +38813,6 @@ mxuds.xyz mxuiso.com mxvp-ad-config-prod-1.zenmxapps.com mxvp-feature-toggle-prod-1.zenmxapps.com -mxwjfvlspn.com my-hanson.com my-ranking.de my-stats.info @@ -39007,6 +39114,7 @@ narenrosrow.com narkalignevil.com narrowad.org nasalburglarthomas.com +nasaldares.com nasi.etherscan.com nasrolaugers.com nastydollars.com @@ -39226,6 +39334,7 @@ net-filter.com net-tracker.notolytix.com net.adpush.cn net.haier.com +net.rayjump.com net00.biz net1.netski.com netaffiliation.com @@ -39348,6 +39457,7 @@ news-muheji.com news-venere.com news.51y5.net news.58.com +news.766ba.net news.azcapitoltimes.com news.bpsecinc.com news.bridgetowermedia.com @@ -39612,6 +39722,7 @@ ninkorant.online ninoglostoay.com nipe4head.com nipmucktwicer.com +nipoughtnt.guru nippona7n2theum.com nipwaghue.com nirentang.com @@ -39797,6 +39908,7 @@ nonerr.com nonestolesantes.com nonewnews.name nonfattoplike.com +nonfatwhorage.life nonfictionrobustchastise.com nongchanlianhe.top nongfumg.com @@ -39916,6 +40028,7 @@ nowspots.com nowtrk.com noxagile.duapp.com noxiousrecklesssuspected.com +nozokuba.pro nozzorli.com npario-inc.net npcad.com @@ -40541,6 +40654,7 @@ oimg.m.calltheclose.cnbc.com oimg.nbcuni.com ointmentaloofpincers.com oioiio.top +oiqdjksgpo.com oisafnik.space oita4bali.com oiughv.dotti.com.au @@ -40586,6 +40700,7 @@ okmjd.com okmwfq.xyz oknmalpxnjhe.xyz oko.net +okoc.top okod.top okokw.com okoy.top @@ -40940,6 +41055,7 @@ oodroglu.net oodsauns.net oodtyigsmkhdq.xyz ooeogk.xyz +ooftauph.com oogala.com ooglootch.com oogneenu.net @@ -41012,6 +41128,7 @@ openingpairpaternal.com openinstall.io openjmacs.m.taobao.com openlog.in +openlyprematurerates.com openmsf.3g.qq.com openrcv.baidu.com opensharecount.com @@ -41252,6 +41369,7 @@ osp45qr.site ospicalad.buzz ospreymedialp.com ospzbro.cn +osrbjatbrb.com osrrltw.cn oss-asq-static.11222.cn ossacmaw.com @@ -43025,6 +43143,7 @@ pkudawbkcl.com pl.1feed.app pl.astro-akatemia.fi pl.astro.fi +pl.connatix.com pl.cp12.wasu.tv pl.cp31.ott.cibntv.net pl.ethan.link @@ -43193,6 +43312,7 @@ play.besstahete.info play.es play.estream.to play.estream.xyz +play.feesocrald.com play.flowplayer.space play.gramombird.com play.istlandoll.com @@ -43212,6 +43332,7 @@ play.tainiesonline.pw play.tercabilis.info play.video2.stream.vidzi.tv play.vidzi.tv +play.www.intellecthosting.net play1.flashx.pw play2.flashx.pw play4.flashx.pw @@ -43661,6 +43782,7 @@ potentingaknt.club pothouse.cn potionutilize.com potnormal.com +potomactatted.life potorootests.com potsaglu.net potwm.com @@ -43732,6 +43854,7 @@ ppunion.com ppurifier.game.xiaomi.com ppvabs.pplive.com ppwrc.xyz +ppxkknbkpekjbvb.com ppyibei.com pq.stat.ku6.com pqbj.jianjiaovip.vip @@ -44405,6 +44528,7 @@ publir.com publish-int.se publish-pic-cpu.baidu.com publish0x.com +publisher-config.unityads.unity3d.com publisher.monster.com publisheradnetwork.com publishercounting.com @@ -45018,10 +45142,10 @@ qgermm.xyz qgevavwyafjf.com qgfolcfi.com qgfwets.cn -qggypucwewn.com qgjapp.com qgnlbjkxrzb.com qgnqsebea.com +qgoqkcpw.xyz qguwoq.cn qgxbluhsgad.com qhdbfjx.com @@ -45145,6 +45269,7 @@ qksrv.biz qksrv.cc qksrv.net qksz.net +qkvsccqcjp.com qkxlyg.cn qkxzdm.stellenanzeigen.de ql.uzuzuz.com @@ -45426,7 +45551,6 @@ qvbwras.cn qvbxza.stoneberry.com qvfkiwf.cn qvkjkc.xyz -qvoqaksihfhvw.com qvpublish.com qvqcfau.cn qvxhgni.cn @@ -45796,6 +45920,7 @@ rdiul.com rdjnjz.xyz rdnucrn.cn rdoybkd.cn +rdqlaobjxmx.com rdrceting.com rdrtrk.com rdsb2.club @@ -46159,6 +46284,7 @@ relliun.cn relmaxtop.com reloci.com reluctanceearplumb.com +reluctantyankpairs.com relumedbiaxial.com reluraun.com relytec.com @@ -46428,6 +46554,7 @@ rethowilmari.com retionattings.xyz retireblotch.com retirementliving.actsretirement.org +retiringmartialaunt.com retiringvarieties.com retono42.us retoxo.com @@ -46492,6 +46619,7 @@ revokepolygraph.com revoketypes.com revoltelfwife.life revolutionarydrillprotective.com +revolutionbeseech.com revolutionpersuasive.com revolvefarfetched.com revolveoppress.com @@ -46677,6 +46805,7 @@ risk8belt.com riskelaborate.com riskoccur.com riskyenglishwreath.com +ritechimerasanctify.com riteseated.com ritzykey.com ritzyveil.com @@ -46788,6 +46917,7 @@ roar9beer.com roastedvolt.net roataisa.net roaxuxkwy.com +robberysordid.com robescampus.com robohobox.com robotadserver.com @@ -47050,6 +47180,7 @@ rsvpgenius.com rsx.afterpay.com rszimg.com rt.applovin.com +rt.applvn.com rt.bunte.de rt.flix360.com rt.funshion.net @@ -48606,6 +48737,7 @@ scriptcdn.net scriptil.com scripts.psyma.com scripts21.com +scriptsfirework.com scriptshead.com scriptvealpatronage.com scrivermoulded.life @@ -49652,6 +49784,7 @@ sgnlaigb.fun sgrupontihecliff.xyz sgsdqs.xyz sgsincentlyse.xyz +sgstats.com sgswuesocfr.com sgvip.chinahdcm.com sgw-analytics.panasonic.com @@ -49708,7 +49841,6 @@ shaquevip.oss-cn-zhangjiakou.aliyuncs.com share-server.com share.baidu.com share.gree.jp -share.gzdsw.com share.itraffic.su share.pluso.ru share.static.skyrock.net @@ -49838,7 +49970,6 @@ shinystat.it shipostrich.com shippinginsights.com shipsmotorw.xyz -shiruru.cn shiryharu.pro shise.me shisnwatcher.digital @@ -49978,7 +50109,6 @@ shrfbdg004.com shriekdestitute.com shrillbighearted.com shrillspoon.com -shrimpsqueezed.com shrinesawning.guru shrink-service.it shrinkearn.com @@ -50326,7 +50456,6 @@ skcapepyshdr.xyz skdbarh.cn skeettools.com skelity.com -skencituer.com sketbhang.guru sketchflutter.com sketchinferiorunits.com @@ -52389,6 +52518,7 @@ spokesmanlinedmercury.com spolecznosci.net spongecell.com spongesalt.com +spongewoodenheroism.com sponsorcounter.de sponsored.com sponsoredtweets.com @@ -55602,6 +55732,7 @@ telemetry.navispherecarrier.com telemetry.phenixrts.com telemetry.reembed.com telemetry.remoteapp.windowsazure.com +telemetry.sdk.inmobi.com telemetry.soundcloud.com telemetry.tableausoftware.com telemetry.tradingview.com @@ -55926,6 +56057,7 @@ thenicenewz.com theologizerg.xyz theoltoozle.com theonecdn.com +theonlins.com theoutplay.com thepayporn.com thepiratebay.cr @@ -56260,6 +56392,7 @@ titanads2.com titanads3.com titanads4.com titanads5.com +titanicmaximumlaboratory.com titary.com titheddenials.com tithewtog.com @@ -56515,6 +56648,7 @@ togenron.com toglooman.com togo666.com toherburked.com +tohimselfash.xyz toijr.xyz toiletapparel.com tojadeso.xyz @@ -58455,6 +58589,7 @@ tuangou.pro tuape.xyz tuateramiking.com tubberlo.com +tubby-delivery.pro tube.ac tubeadnetwork.com tubeadv.com @@ -58588,6 +58723,7 @@ tvrom.cn tvsohu-cm.cn.miaozhen.com tvsquared.com tvupgrade.yunos.com +tvwgstakdhkot.com tvxetxjvobm.com tvxqdp.xyz tw.adon.vpon.com @@ -58986,6 +59122,7 @@ ueuodgnrhb.com uewasadi.com ufaexpert.com ufeaqyzn.com +ufhdumnkhgk.com ufinkln.com uflowx.com ufmxeetcdt.com @@ -59008,6 +59145,7 @@ ughtcallmeocapl.xyz ughtcallmeoo.xyz ugkmihh.cn ugkmjojhgtqcohf.com +ugly-dance.pro uglyp.club uglypath.pro ugmarketing.smu.edu.sg @@ -59147,6 +59285,7 @@ umdc.aliapp.org umekana.ru umeng.co umeng.com +umeng.com.gds.alibabadns.com umengacs.m.taobao.com umengcloud.com umengjmacs.m.taobao.com @@ -59340,6 +59479,7 @@ unityads.unity3d.com unityads.unitychina.cn uniusclaws.com universityofinternetscience.com +uniway.cn.com uniworldgroup.asia unjfcbriobpto.com unjointbobbed.com @@ -59405,6 +59545,7 @@ unskilfulknowingservers.com unskilfulpossession.com unskilledanna.com unsnakybrulot.com +unspinaraka.com unsternrelease.com unsult.com unswingfluvial.com @@ -59440,6 +59581,7 @@ unwieldyhealth.com unwillingsnick.com unwisecommence.com unwoobater.com +unworthydeserts.com unwrittenspot.com unwroteorcinus.com unypud.cn @@ -60010,6 +60152,7 @@ vadypb.cn vaebard.com vaedan.top vaeesspot.com +vaemfecqllefj.xyz vagvedi.cn vahdzbk.cn vaifopooface.com @@ -60140,6 +60283,7 @@ vbscgrnkoceya.com vbt.io vbtrax.com vbutjg.com +vcaciveb.com vcardsdkservice.vivo.com.cn vcawmm.com vcbn65.xyz @@ -60736,6 +60880,7 @@ vohhall81.com vohhall91.com voiceads.cn voiceads.com +voicebeddingtaint.com voicefive.com voicegiddiness.com voices-kerence.com @@ -60976,6 +61121,7 @@ vwvjzd.xyz vx2e.top vx4n.icu vxelkrhl.info +vxfjompwkjcyov.com vxjcalk.cn vxlysbz.cn vxosylrqktmj.com @@ -61420,6 +61566,7 @@ weare.ballymoregroup.com weareqy.com wearesaudis.net wearisomeraynope.com +wearygrocery.pro wearywater.com weatherplllatform.com weaveradrenaline.com @@ -61726,6 +61873,7 @@ weicun.xyz weidianyuedu.com weifengi.xyz weige666.asia +weighcb.com weiguanwang888.com weiiii.com weijiakeji.top @@ -61817,6 +61965,7 @@ wffengtai.com.cn wfhuzaj.cn wfhxssg.com wfkspcs.cn +wfndponfd.com wfnetwork.com wfpersonal.site wfyqc.com @@ -63179,6 +63328,7 @@ www.flipf.cn www.flstudiochina.com www.flurry.com www.fr +www.freecontent.bid www.freecontent.date www.freecontent.party www.freecontent.science @@ -63340,6 +63490,7 @@ www.jshosting.date www.jshosting.download www.jshosting.loan www.jshosting.party +www.jshosting.racing www.jshosting.review www.jshosting.stream www.jshosting.trade @@ -64491,6 +64642,7 @@ xndjh.hebiz.cn xne1ocient87zxz.360doc.cn xnfmseiyqoqjhia.com xniexnz.cn +xnrcnz.xyz xnxonbf.cn xnyemao.com xo28pclotovi.com @@ -65292,6 +65444,7 @@ yongv.com yongyaoxiong.cn yongyuelm.com yonhelioliskor.com +yonkerhallier.com yonniefacture.com yonoka.info yonsandileer.com diff --git a/luci-app-netspeedtest/Makefile b/luci-app-netspeedtest/Makefile index c7f72769a..27e41f5e6 100644 --- a/luci-app-netspeedtest/Makefile +++ b/luci-app-netspeedtest/Makefile @@ -11,8 +11,8 @@ PKG_NAME:=luci-app-netspeedtest LUCI_TITLE:=LuCI Support for netspeedtest LUCI_DEPENDS:=+python3 +iperf3 +homebox +netperf LUCI_PKGARCH:=all -PKG_VERSION:=2.1.2 -PKG_RELEASE:=20230121 +PKG_VERSION:=2.1.3 +PKG_RELEASE:=20230302 PKG_MAINTAINER:= include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-netspeedtest/README.md b/luci-app-netspeedtest/README.md index 02fd3fa93..82cc73736 100644 --- a/luci-app-netspeedtest/README.md +++ b/luci-app-netspeedtest/README.md @@ -46,7 +46,19 @@ luci-app-netspeedtest 网络速度诊断测试(包括:内网网页版测速 ## 版本说明 -### 2022.10.18 网速测试V2.0.2: + +### 2023.3.2 网速测试V2.1.3: + - 修复测速Speedtest看不到测试报名问题。 + - 重新调试IPERF3测试页面代码,解决某些主题显示不优雅的问题。 + - 修复取消服务自动启用的问题 + +### 2023.1.15 网速测试V2.1: + - 内网测试速度WEB页采用homebox。 + - 修复WEB页内网测试自动启用问题。 + - 外网测速加入Netperf测试。 + - 外网测速Speedtest某些节点会禁止测速。要测速建议关了留国的插件。 + +### 2022.10.18 网速测试V2.0.3: - 代码基本重写和优化。 - Iperf3可实时体现服务状态。 - 增加内网测试网页版。 @@ -60,26 +72,7 @@ luci-app-netspeedtest 网络速度诊断测试(包括:内网网页版测速 将NetSpeedTest 主题添加至 LEDE/OpenWRT 源码的方法。 -### 下载源码方法一: -- 编辑源码文件夹根目录feeds.conf.default并加入如下内容: - -```Brach - - # feeds获取源码: - - src-git netspeedtest https://github.com/sirpdboy/netspeedtest - ``` - ```Brach - - # 更新feeds,并安装主题: - - scripts/feeds update netspeedtest - scripts/feeds install netspeedtest - ``` - -### 下载源码方法二: - - ```Brach +### 下载源码: # 下载源码 @@ -136,7 +129,7 @@ luci-app-netspeedtest 网络速度诊断测试(包括:内网网页版测速 ## 感谢 -感谢superspeed、user1121114685、ZeaKyX、佐须之男、lean等。因为有你们珠玉在前! +感谢sivel、superspeed、user1121114685、ZeaKyX、佐须之男、lean等。因为有你们珠玉在前! ## 捐助 diff --git a/luci-app-netspeedtest/root/etc/init.d/netspeedtest b/luci-app-netspeedtest/root/etc/init.d/netspeedtest index 844e259cf..67d5b2bd7 100644 --- a/luci-app-netspeedtest/root/etc/init.d/netspeedtest +++ b/luci-app-netspeedtest/root/etc/init.d/netspeedtest @@ -1,7 +1,7 @@ #!/bin/sh /etc/rc.common # -# Copyright (C) 2020-2022 sirpdboy https://github.com/sirpdboy/netspeedtest +# Copyright (C) 2020-2023 sirpdboy https://github.com/sirpdboy/netspeedtest # This is free software, licensed under the Apache License, Version 2.0 . # @@ -40,7 +40,7 @@ nstest() { limit_log $LOG 200 init_env touch $LOCK - echo -ne "\n speedtest测速" | tee -a $LOG + echo -ne "\n speedtest测速" >> $LOG /usr/bin/speedtest --share > $TMP_T echo -ne "\n 测服信息:$(cat $TMP_T | grep 'Hosted by'| cut -c10- | awk -F: '{printf $1}') 延时:$(cat $TMP_T | grep 'Hosted by' | awk -F: '{printf $2}')" >> $LOG echo -ne "\n 下行速率:$(cat $TMP_T | grep 'Download:' |awk -F: '{printf $2}' )" >> $LOG @@ -71,7 +71,7 @@ start_service() { procd_open_instance procd_set_param command $PROG [ "x$logger" == x1 ] && procd_set_param stderr 1 - procd_set_param respawn + # procd_set_param respawn procd_close_instance } diff --git a/luci-app-rtbwmon/Makefile b/luci-app-rtbwmon/Makefile new file mode 100644 index 000000000..33cdf40be --- /dev/null +++ b/luci-app-rtbwmon/Makefile @@ -0,0 +1,15 @@ + + +include $(TOPDIR)/rules.mk + +PKG_VERSION:=1.0.0-1 +PKG_RELEASE:= +PKG_MAINTAINER:=jjm2473 + +LUCI_TITLE:=LuCI realtime client bandwidth monitor +LUCI_PKGARCH:=all +LUCI_DEPENDS:=+iptables + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-rtbwmon/README.md b/luci-app-rtbwmon/README.md new file mode 100644 index 000000000..b0bce7b46 --- /dev/null +++ b/luci-app-rtbwmon/README.md @@ -0,0 +1 @@ +LuCI realtime traffic monitor, inspired by luci-app-wrtbwmon \ No newline at end of file diff --git a/luci-app-rtbwmon/htdocs/luci-static/rtbwmon/rtbwmon.js b/luci-app-rtbwmon/htdocs/luci-static/rtbwmon/rtbwmon.js new file mode 100644 index 000000000..d2c188af6 --- /dev/null +++ b/luci-app-rtbwmon/htdocs/luci-static/rtbwmon/rtbwmon.js @@ -0,0 +1,526 @@ + +(function () { + const numberCol = 3; + const wrt = { + // variables for auto-update, interval is in seconds + scheduleTimeout: undefined, + interval: 5, + // option on whether to show per host sub-totals + perHostTotals: false, + paused: false, + headers: [], + // variables for sorting + sortData: { + column: numberCol, + elId: 'thDlb', + dir: 'desc', + }, + filter: '', + ifaceFilter: '', + cache: {}, + }; + + let oldDate, oldValues, oldValuesSeconds; + const basePath = "/cgi-bin/luci/admin/status/rtbwmon" + //---------------------- + // HELPER FUNCTIONS + //---------------------- + + /** + * Human readable text for size + * @param size + * @returns {string} + */ + const getSize = function(size, suffix) { + let prefix = [' ', 'k', 'M', 'G', 'T', 'P', 'E', 'Z']; + let precision, base = 1000, pos = 0; + while (size > base) { + size /= base; + pos++; + } + if (pos > 2) precision = 1000; else precision = 1; + return (Math.round(size * precision) / precision) + ' ' + prefix[pos] + suffix; + }; + + /** + * Human readable text for date + * @param date + * @returns {string} + */ + const dateToString = function(date) { + return date.toString().substring(0, 24); + }; + + /** + * Gets the string representation of the date received from BE + * @param value + * @returns {*} + */ + const getDateString = function(value) { + let tmp = value.split('_'), + str = tmp[0].split('-').reverse().join('-') + 'T' + tmp[1]; + return dateToString(new Date(str)); + }; + + /** + * Create a `tr` element with content + * @param content + * @returns {string} + */ + const createTR = function(content) { + let res = document.createElement('tr'); + res.classList.add("tr"); + res.replaceChildren(...content) + return res; + }; + + /** + * Create a `td` element with content and options + * @param content + * @param opts + * @returns {string} + */ + const createTD = function(content, opts) { + opts = opts || {}; + let res = document.createElement('td'); + if (opts.right) { + res.align="right"; + } + if (opts.dataTitle) { + res.setAttribute("data-title", opts.dataTitle); + } + res.classList.add("td"); + if (opts.title) { + res.title=opts.title; + res.classList.add("more_info"); + } + res.innerHTML = content; + return res; + }; + + const createTH = function(content, opts) { + opts = opts || {}; + let res = document.createElement('th'); + if (opts.right) { + res.align = "right"; + } + if (opts.id) { + res.id = opts.id; + } + res.classList.add("th"); + res.innerHTML = content; + return res; + }; + + /** + * Returns true if obj is instance of Array + * @param obj + * @returns {boolean} + */ + const isArray = function(obj) { + return obj instanceof Array; + }; + + //---------------------- + // END HELPER FUNCTIONS + //---------------------- + + // UI + // TABLE + const rowToTr = function(row) { + let iptitle = undefined; + if (wrt.perHostTotals && row[numberCol+5].length>1) { + iptitle = row[numberCol+5].join('\n'); + } + // create displayData + let displayData = [ + createTD(row[0] + '
' + row[7], {title: iptitle, dataTitle: wrt.headers[0].title}), + createTD(row[1], {dataTitle: wrt.headers[1].title}), + createTD(getSize(row[numberCol], 'Bps'), {right: true, dataTitle: wrt.headers[2].title}), + createTD(getSize(row[numberCol+1], 'pps'), {right: true, dataTitle: wrt.headers[3].title}), + createTD(getSize(row[numberCol+2], 'Bps'), {right: true, dataTitle: wrt.headers[4].title}), + createTD(getSize(row[numberCol+3], 'pps'), {right: true, dataTitle: wrt.headers[5].title}), + ]; + + // display row data + return createTR(displayData); + }; + + const filterData = function(data) { + if (wrt.filter == '') { + return data; + } + let value = wrt.filter; + return data.filter(row=> + (row[numberCol+4] && row[numberCol+4].toLowerCase().indexOf(value.toLowerCase()) > -1) || (row[0].indexOf(value) > -1) || (row[1].toLowerCase().indexOf(value.toLowerCase()) > -1) || + (wrt.perHostTotals && row[numberCol+5].length>1 && row[numberCol+5].some(ip=>ip.indexOf(value) > -1)) + ) + }; + + const filterIface = function(data) { + if (wrt.ifaceFilter == '') { + return data; + } + let value = wrt.ifaceFilter; + return data.filter(row=>value==row[2]); + }; + + /** + * Calculates per host sub-totals and adds them in the data input + * @param data The data input + */ + const aggregateHostTotals = function(data) { + if (!wrt.perHostTotals) return data; + + let m = data.reduce((m, row)=>{ + let mac = row[1]; + let ary = m[mac]; + if (ary) { + ary.push(row); + } else { + m[mac] = [row]; + } + return m; + }, {}); + let merged = []; + for (let mac in m) { + if (m.hasOwnProperty(mac)) { + let rows = m[mac]; + rows.sort(sortingFunction); + let mrow = rows[0].slice(); // clone + mrow.push([mrow[0]]); // ip s + rows.slice(1).reduce((m, row)=>{ + if (!m[numberCol+4] && row[numberCol+4]) { + m[numberCol+4] = row[numberCol+4]; // hostname + } + m[m.length-1].push(row[0]); + for (let i=0; i<4; ++i) { + m[numberCol+i] += row[numberCol+i]; + } + return m; + }, mrow); + merged.push(mrow); + } + } + return merged; + }; + + /** + * Sorting function used to sort the `data`. Uses the global sort settings + * @param x first item to compare + * @param y second item to compare + * @returns {number} 1 for desc, -1 for asc, 0 for equal + */ + const sortingFunction = function(x, y) { + // get data from global variable + let sortColumn = wrt.sortData.column, sortDirection = wrt.sortData.dir; + let a = x[sortColumn]; + let b = y[sortColumn]; + if (a === b) { + return 0; + } else if (sortDirection === 'desc') { + return a < b ? 1 : -1; + } else { + return a > b ? 1 : -1; + } + }; + + /** + * Renders the table body + * @param data + * @param totals + */ + const renderTableData = function(data) { + if (!isArray(data)) data=[]; + // sort data + data = filterData(aggregateHostTotals(filterIface(data))) + data.sort(sortingFunction); + + // display data + let table = document.getElementById('clients'); + table.replaceChildren(...data.map(rowToTr)); + }; + + // HEADER + const updateHeader = function() { + // set sorting arrows + let th = document.getElementById('theader').firstElementChild; + while(th) { + th.firstElementChild.innerHTML = " "; + th = th.nextElementSibling; + } + let el = document.getElementById(wrt.sortData.elId); + if (el) { + el.firstElementChild.innerHTML = (wrt.sortData.dir === 'desc' ? '▼' : '▲'); + } + }; + + /** + * Sets the relevant global sort variables and re-renders the table to apply the new sorting + * @param elId + * @param column + */ + const setSortColumn = function(elId, column) { + if (column === wrt.sortData.column) { + // same column clicked, switch direction + wrt.sortData.dir = wrt.sortData.dir === 'desc' ? 'asc' : 'desc'; + } else { + // change sort column + wrt.sortData.column = column; + // reset sort direction + wrt.sortData.dir = 'desc'; + } + wrt.sortData.elId = elId; + updateHeader(); + + // render table data from cache + renderTableData(wrt.cache.data); + }; + + /** + * Registers the table events handlers for sorting when clicking the column headers + */ + const registerTableEventHandlers = function() { + // note these ordinals are into the data array, not the table output + document.getElementById('thIp').addEventListener('click', function () { + setSortColumn(this.id, 0); // ip + }); + document.getElementById('thMac').addEventListener('click', function () { + setSortColumn(this.id, 1); // mac + }); + document.getElementById('thDlb').addEventListener('click', function () { + setSortColumn(this.id, numberCol); // dl speed + }); + document.getElementById('thDlp').addEventListener('click', function () { + setSortColumn(this.id, numberCol+1); // dl pps + }); + document.getElementById('thUpb').addEventListener('click', function () { + setSortColumn(this.id, numberCol+2); // ul speed + }); + document.getElementById('thUpp').addEventListener('click', function () { + setSortColumn(this.id, numberCol+3); // ul pps + }); + }; + + const initHeader = function() { + // set sorting arrows + let theader = document.getElementById('theader'); + theader.replaceChildren(...wrt.headers.map(h=>createTH(h.title, h)).map(th=>{ + th.appendChild(document.createElement("span")); + return th; + })); + }; + + // TOOLBAR + /** + * Registers DOM event listeners for user interaction + */ + const addEventListeners = function() { + document.getElementById('perHostTotals').addEventListener('change', function () { + wrt.perHostTotals = this.checked; + renderTableData(wrt.cache.data); + }); + document.getElementById('pause_checkbox').addEventListener('change', function () { + wrt.paused = this.checked; + }); + document.getElementById('iface_select').addEventListener('change', function () { + wrt.ifaceFilter = this.value; + renderTableData(wrt.cache.data); + }); + const submitFilter = function(value) { + if (wrt.filter != value) { + wrt.filter = value; + renderTableData(wrt.cache.data); + } + }; + let filterInput = document.getElementById('filter_input'); + filterInput.addEventListener('keypress', function(event){ + if (event.key === 'Enter') + submitFilter(this.value); + }); + filterInput.addEventListener('blur', function(){ + submitFilter(this.value); + }); + }; + + // model + /** + * Handle the error that happened during the call to the BE + */ + const handleError = function() { + // TODO handle errors + // let message = 'Something went wrong...'; + }; + + /** + * Handle the new `values` that were received from the BE + * @param values + * @returns {string} + */ + const handleValues = function(values) { + if (!isArray(values)) return; + + // find data and totals + let data = parseValues(values); + + // store them in cache for quicker re-rendering + wrt.cache.data = data; + + renderTableData(data); + }; + + /** + * Parses the values and returns a data array, where each element in the data array is an array with two elements, + * and a totals array, that holds aggregated values for each column. + * The first element of each row in the data array, is the HTML output of the row as a `tr` element + * and the second is the actual data: + * [ result, data ] + * @param values The `values` array + * @returns {Array} + */ + const parseValues = function(values) { + return values.map(parseValueRow).filter(a=>a!=null); + }; + + /** + * Parse each row in the `values` array and return an array with two elements. + * The first element is the HTML output of the row as a `tr` element and the second is the actual data + * [ result, data ] + * @param data A row from the `values` array + * @returns {[ string, [] ]} + */ + const parseValueRow = function(data) { + // check if data is array + if (!isArray(data)) return null; + + // find download and upload speeds + let dlSpeed = 0, upSpeed = 0; + let dlPs = 0, upPs = 0; + let seconds = oldValuesSeconds; + if (typeof(seconds) !== 'undefined') { + // find old data + let oldData; + for (let i = 0; i < oldValues.length; i++) { + let cur = oldValues[i]; + // compare mac addresses and ip addresses + if (oldValues[i][0] === data[0] && oldValues[i][1] === data[1]) { + oldData = cur; + break; + } + } + if (typeof(oldData) === 'undefined') { + // new ip + oldData = [0,0,0,0,0,0,0,0,0,0,0,0,0]; + } + upPs = Math.max(0, data[numberCol] - oldData[numberCol]) / seconds; + upSpeed = Math.max(0, data[numberCol+1] - oldData[numberCol+1]) / seconds; + dlPs = Math.max(0, data[numberCol+2] - oldData[numberCol+2]) / seconds; + dlSpeed = Math.max(0, data[numberCol+3] - oldData[numberCol+3]) / seconds; + } + + // create rowData [ip, mac, iface, dlSpeed, dlPs, upSpeed, upPs, hostname] + let rowData = [data[0], data[1], data[2], dlSpeed, dlPs, upSpeed, upPs, data[numberCol+4]]; + + return rowData; + }; + + const httpGet = function(url, cb, onerror) { + let ajax = new XMLHttpRequest(); + ajax.onreadystatechange = function () { + // noinspection EqualityComparisonWithCoercionJS + if (this.readyState === XMLHttpRequest.DONE) { + cb(this.status, this.responseText); + } + }; + ajax.open('GET', url, true); + try { + ajax.send(); + } catch (err) { + onerror && onerror(err) + } + }; + + /** + * Fetches and handles the updated `values` from the BE + */ + const receiveData = function() { + if (wrt.paused) { + reschedule(); + return + } + httpGet(basePath + '/data?t='+parseInt(new Date().getTime()/1000), function (status, responseText) { + if (status == 200) { + if (!wrt.paused) { + let v = responseText.trimEnd().split('\n') + .filter(line=>line).map(line=>{ + let a = line.split(','); + for (let i=0;i<4;++i) { + a[numberCol+i] = parseInt(a[numberCol+i]) + } + return a; + }); + let now = new Date().getTime(); + oldValuesSeconds = undefined; + if (typeof(oldValues) !== 'undefined') { + let seconds = (now - oldDate) / 1000; + if (seconds < 600) { + oldValuesSeconds = seconds; + } + } + handleValues(v); + // set old values + oldValues = v; + // set old date + oldDate = now; + } + reschedule(); + } + }); + }; + + //---------------------- + // AUTO-UPDATE + //---------------------- + + /** + * Start auto-update schedule + */ + const reschedule = function() { + let seconds = wrt.interval || 60; + wrt.scheduleTimeout = window.setTimeout(receiveData, seconds * 1000); + }; + + //---------------------- + // END AUTO-UPDATE + //---------------------- + + window.rtbwmon_init = function(headers){ + wrt.headers = headers; + initHeader(); + updateHeader(); + // register events + addEventListeners(); + // register table events + registerTableEventHandlers(); + // Main entry point + httpGet(basePath + '/ifaces?t='+parseInt(new Date().getTime()/1000), function (status, responseText) { + receiveData(); + let iface_select = document.getElementById('iface_select'); + let selected = iface_select.value; + let ifaces = responseText.trimEnd().split('\n').filter(line=>line).map(iface=>{ + let option = document.createElement('option'); + option.value = iface; + option.innerHTML = iface; + if (selected == iface) { + option.selected = true; + } + return option; + }); + let first = iface_select.firstElementChild; + iface_select.replaceChildren(first, ...ifaces); + }, function(err) { + alert(err); + }); + }; + +})(); diff --git a/luci-app-rtbwmon/luasrc/controller/rtbwmon.lua b/luci-app-rtbwmon/luasrc/controller/rtbwmon.lua new file mode 100644 index 000000000..bda932b70 --- /dev/null +++ b/luci-app-rtbwmon/luasrc/controller/rtbwmon.lua @@ -0,0 +1,17 @@ +module("luci.controller.rtbwmon", package.seeall) + +function index() + entry({"admin", "status", "rtbwmon"}, template("rtbwmon/rtbwmon"), _("Realtime Bandwidth"), 90) + entry({"admin", "status", "rtbwmon", "data"}, call("data")) + entry({"admin", "status", "rtbwmon", "ifaces"}, call("ifaces")) +end + +function data() + luci.http.prepare_content("text/csv") + luci.http.write(luci.sys.exec("/usr/libexec/rtbwmon.sh update")) +end + +function ifaces() + luci.http.prepare_content("text/csv") + luci.http.write(luci.sys.exec("/usr/libexec/rtbwmon.sh ifaces")) +end diff --git a/luci-app-rtbwmon/luasrc/view/rtbwmon/rtbwmon.htm b/luci-app-rtbwmon/luasrc/view/rtbwmon/rtbwmon.htm new file mode 100644 index 000000000..9794a8725 --- /dev/null +++ b/luci-app-rtbwmon/luasrc/view/rtbwmon/rtbwmon.htm @@ -0,0 +1,49 @@ +<%+header%> +
+

<%:Realtime Bandwidth%>

+
<%:Display the network speed of the client, and only count the external traffic%>
+
+ + + + + + +
+
+ + + + + + + +
+ +
+
+ + + +<%+footer%> diff --git a/luci-app-rtbwmon/po/zh-cn/rtbwmon.po b/luci-app-rtbwmon/po/zh-cn/rtbwmon.po new file mode 100644 index 000000000..235d33bf9 --- /dev/null +++ b/luci-app-rtbwmon/po/zh-cn/rtbwmon.po @@ -0,0 +1,41 @@ +msgid "Realtime Bandwidth" +msgstr "实时流量" + +msgid "Display the network speed of the client, and only count the external traffic" +msgstr "显示客户端网速,只统计外连流量" + +msgid "Pause refresh" +msgstr "暂停刷新" + +msgid "Only display clients of specific network interface" +msgstr "只显示特定网络接口的客户端" + +msgid "Interface..." +msgstr "接口..." + +msgid "Merge by MAC address" +msgstr "按MAC地址合并" + +msgid "Filter..." +msgstr "过滤..." + +msgid "Filter the data according to the hostname, IP, MAC" +msgstr "按主机名、IP、MAC过滤数据" + +msgid "Client IP" +msgstr "客户端 IP" + +msgid "Client MAC" +msgstr "客户端 MAC" + +msgid "Download speed" +msgstr "下载速度" + +msgid "Download packets" +msgstr "下载包" + +msgid "Upload speed" +msgstr "上传速度" + +msgid "Upload packets" +msgstr "上传包" diff --git a/luci-app-rtbwmon/po/zh_Hans b/luci-app-rtbwmon/po/zh_Hans new file mode 120000 index 000000000..41451e4a1 --- /dev/null +++ b/luci-app-rtbwmon/po/zh_Hans @@ -0,0 +1 @@ +zh-cn \ No newline at end of file diff --git a/luci-app-rtbwmon/root/etc/init.d/rtbwmon b/luci-app-rtbwmon/root/etc/init.d/rtbwmon new file mode 100755 index 000000000..4d31dee13 --- /dev/null +++ b/luci-app-rtbwmon/root/etc/init.d/rtbwmon @@ -0,0 +1,13 @@ +#!/bin/sh /etc/rc.common + +USE_PROCD=1 + +boot() { + return 0 +} + +start_service() { + procd_open_instance + procd_set_param command /usr/libexec/rtbwmon.sh gc + procd_close_instance +} diff --git a/luci-app-rtbwmon/root/usr/libexec/rtbwmon.sh b/luci-app-rtbwmon/root/usr/libexec/rtbwmon.sh new file mode 100755 index 000000000..ca172ccf1 --- /dev/null +++ b/luci-app-rtbwmon/root/usr/libexec/rtbwmon.sh @@ -0,0 +1,198 @@ +#!/bin/sh + +lookup() { + local MAC=$1 + local IP=$2 + local USERSFILE + local USER + for USERSFILE in /tmp/dhcp.leases /tmp/hosts /tmp/dnsmasq.conf /etc/dnsmasq.conf /etc/hosts; do + [ -e "$USERSFILE" ] || continue + case $USERSFILE in + /tmp/dhcp.leases) + USER=$(grep -i "$MAC" $USERSFILE | cut -f4 -s -d' ') + ;; + /etc/hosts) + USER=$(grep "^$IP " $USERSFILE | cut -f2 -s -d' ') + ;; + /tmp/hosts) + USER=$(grep -rhm1 "^$IP " $USERSFILE | head -1 | cut -f2 -s -d' ') + ;; + *) + USER=$(grep -i "$MAC" "$USERSFILE" | cut -f2 -s -d,) + ;; + esac + [ "$USER" = "*" ] && USER= + [ -n "$USER" ] && break + done + [ -z "$USER" ] && return 1 + echo $USER +} + +get_wan_iface() { + tail -n +2 /proc/net/route | sed -n -e 's/^\([^\t]\+\)\t00000000\t[^\t]\+\t[^\t]\+\t[^\t]\+\t[^\t]\+\t[^\t]\+\t00000000\t.*$/\1/p' +} + +get_arp_excluded() { + tail -n +2 /proc/net/arp | grep -v " ${1//\./\\\.}\$" | sed -n -e 's/^\([^ ]\+\) \+0x[^ ]\+ \+0x2 \+\([^ ]\+\) .* \([^ ]\+\)$/\1\t\2\t\3/p' +} + +merge() { + local arpfile="$1" + local countfile="$2" + local outfile="$3" + local pkts bytes src dest ip mac iface up down + while read pkts bytes src dest; do + if [[ "$dest" = '0.0.0.0/0' ]]; then + eval "local up_${src//[.:]/_}=\"$pkts,$bytes\"" + else + eval "local down_${dest//[.:]/_}=\"$pkts,$bytes\"" + fi + done < "$countfile" + while read ip mac iface; do + eval "up=\$up_${ip//[.:]/_}" + eval "down=\$down_${ip//[.:]/_}" + printf "%s,%s,%s,%s,%s,%s\n" "$ip" "$mac" "$iface" "${up:-0,0}" "${down:-0,0}" "`lookup $mac $ip`" + done < "$arpfile" > "$outfile" +} + +do_clean() { + iptables -t mangle -D FORWARD -j RTBWMON_IFACE 2>/dev/null + iptables -t mangle -F RTBWMON_IFACE 2>/dev/null + iptables -t mangle -F RTBWMON_IP 2>/dev/null + iptables -t mangle -X RTBWMON_IFACE 2>/dev/null + iptables -t mangle -X RTBWMON_IP 2>/dev/null + rm -f /var/run/rtbwmon.tmp.* /var/run/rtbwmon.csv +} + +do_update() { + local ip + local INTERFACE="$1" + + find /var/run/rtbwmon.csv -mmin +30 2>/dev/null | grep -q . && do_clean + + # init iptable + iptables -t mangle -C FORWARD -j RTBWMON_IFACE 2>/dev/null || { + iptables -t mangle -N RTBWMON_IFACE 2>/dev/null + iptables -t mangle -N RTBWMON_IP 2>/dev/null + iptables -t mangle -I FORWARD -j RTBWMON_IFACE + # iptables -t mangle -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j RTBWMON_IFACE + } + + # if interface changed, clean chain + iptables -t mangle -C RTBWMON_IFACE -o "$INTERFACE" -j RTBWMON_IP 2>/dev/null || { + iptables -t mangle -F RTBWMON_IP + iptables -t mangle -F RTBWMON_IFACE + # iptables -t mangle -A RTBWMON_IFACE -m addrtype --dst-type LOCAL -j RETURN + iptables -t mangle -A RTBWMON_IFACE -i "$INTERFACE" -j RTBWMON_IP + iptables -t mangle -A RTBWMON_IFACE -o "$INTERFACE" -j RTBWMON_IP + } + + # schedule cleaning task + /etc/init.d/rtbwmon start + + # save system state + iptables -t mangle -nvxL RTBWMON_IP | tail -n +3 | grep -Fv 'Zeroing chain' | sed -e 's/ \+/\t/g' | cut -f2,3,9,10 >/var/run/rtbwmon.tmp.count + get_arp_excluded "$INTERFACE" >/var/run/rtbwmon.tmp.arp + + # get ip + cut -f3 /var/run/rtbwmon.tmp.count | grep -Fv '0.0.0.0/0' >/var/run/rtbwmon.tmp.oips + cut -f1 /var/run/rtbwmon.tmp.arp >/var/run/rtbwmon.tmp.nips + + # delete offline ip + grep -Fvf /var/run/rtbwmon.tmp.nips /var/run/rtbwmon.tmp.oips | while read ip; do + iptables -t mangle -D RTBWMON_IP -s "$ip" -j RETURN + iptables -t mangle -D RTBWMON_IP -d "$ip" -j RETURN + done + + # add new ip + grep -Fvf /var/run/rtbwmon.tmp.oips /var/run/rtbwmon.tmp.nips | while read ip; do + iptables -t mangle -A RTBWMON_IP -s "$ip" -j RETURN + iptables -t mangle -A RTBWMON_IP -d "$ip" -j RETURN + done + + merge /var/run/rtbwmon.tmp.arp /var/run/rtbwmon.tmp.count /var/run/rtbwmon.csv + + rm -f /var/run/rtbwmon.tmp.* + + return 0 +} + +update() { + local WAN_INTERFACE=`get_wan_iface` + + exec 1000>/var/run/rtbwmon.lock + flock -n 1000 2>/dev/null || { + flock 1000 2>/dev/null + [ -f /var/run/rtbwmon.csv ] && { + cat /var/run/rtbwmon.csv + flock -u 1000 2>/dev/null + return 1 + } + } + + if [ -z "$WAN_INTERFACE" ]; then + do_clean + > /var/run/rtbwmon.csv + else + do_update "$WAN_INTERFACE" 2>/dev/null + cat /var/run/rtbwmon.csv + fi + flock -u 1000 2>/dev/null + return 0 +} + +clean() { + exec 1000>/var/run/rtbwmon.lock + flock 1000 + do_clean + flock -u 1000 +} + +run_gc() { + local pid + exec 1001>/var/run/rtbwmon_gc.lock + flock -n 1001 2>/dev/null || return 0 + while :; do + sleep 360 /dev/null 2>&1 1000>/dev/null 1001>/dev/null & + pid=$! + trap "kill $pid;trap TERM;kill -TERM $$" TERM + wait $pid + trap TERM + if ! find /var/run/rtbwmon.csv -mmin -5 2>/dev/null | grep -q .; then + break + fi + done + clean + flock -u 1001 + return 0 +} + +show_ifaces() { + local WAN_INTERFACE=`get_wan_iface` + [ -z "$WAN_INTERFACE" ] && return 1 + ip addr show scope global up | grep '^ \+inet ' | sed -n -e 's/^.* \([^ ]\+\)$/\1/p' | grep -Fv "$WAN_INTERFACE" | sort -u +} + +case $1 in +"clean") + clean + ;; +"update") + update + ;; +"ifaces") + show_ifaces + ;; +"gc") + run_gc + ;; +*) + echo \ + "Usage: $0 {update|clean|ifaces} +Actions: + update update and get + clean clean iptables and temp files + ifaces show up interfaces +" + ;; +esac diff --git a/v2ray-geodata/Makefile b/v2ray-geodata/Makefile index 1d23cd5d2..5c578396e 100644 --- a/v2ray-geodata/Makefile +++ b/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=958b34017682aa28d2bf7f0368cdb62934c5623bf405d96ab12e54e320adfea0 endef -GEOSITE_VER:=20230301231917 +GEOSITE_VER:=20230302073658 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=8001890d73de401f637b28e4bb58d27431885a699251ba742ca368fb2fdaff3b + HASH:=c3cf5719a72284a43ed291039ccf93ea4455e30a2446540014926b652a792974 endef define Package/v2ray-geodata/template diff --git a/xunyou/Makefile b/xunyou/Makefile index 21435fb00..c70ef4252 100644 --- a/xunyou/Makefile +++ b/xunyou/Makefile @@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xunyou -PKG_VERSION:=2.0.1.7 +PKG_VERSION:=2.0.1.8 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)_v$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://partnerdownload.xunyou.com/routerplugin/koolshare/ -PKG_HASH:=d8e084349fa0fccbeaf95b40243f47b019ac7647a2cccf16efd82368141cf37c +PKG_HASH:=1c12efb943afdd1f93a8644b6da7000209b80f6247241919119c408ee31b687f PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)_v$(PKG_VERSION)