>8),g.push(m&255);return g},d.prototype.toFixedLengthString=function(){const m=function(){const p=[];for(let y=0;y>8,g&255,p>>8,p&255])},d.prototype.toNormalizedString=function(){const m=function(){const p=[];for(let y=0;yy&&(p=_.index,y=_[0].length);return y<0?g:`${g.substring(0,p)}::${g.substring(p+y)}`},d.prototype.toString=function(){return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/,"::")},d}(),h.IPv6.broadcastAddressFromCIDR=function(d){try{const m=this.parseCIDR(d),g=m[0].toByteArray(),p=this.subnetMaskFromPrefixLength(m[1]).toByteArray(),y=[];let _=0;for(;_<16;)y.push(parseInt(g[_],10)|parseInt(p[_],10)^255),_++;return new this(y)}catch(m){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${m})`)}},h.IPv6.isIPv6=function(d){return this.parser(d)!==null},h.IPv6.isValid=function(d){if(typeof d=="string"&&d.indexOf(":")===-1)return!1;try{const m=this.parser(d);return new this(m.parts,m.zoneId),!0}catch(m){return!1}},h.IPv6.networkAddressFromCIDR=function(d){let m,g,p,y,_;try{for(m=this.parseCIDR(d),p=m[0].toByteArray(),_=this.subnetMaskFromPrefixLength(m[1]).toByteArray(),y=[],g=0;g<16;)y.push(parseInt(p[g],10)&parseInt(_[g],10)),g++;return new this(y)}catch(w){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${w})`)}},h.IPv6.parse=function(d){const m=this.parser(d);if(m.parts===null)throw new Error("ipaddr: string is not formatted like an IPv6 Address");return new this(m.parts,m.zoneId)},h.IPv6.parseCIDR=function(d){let m,g,p;if((g=d.match(/^(.+)\/(\d+)$/))&&(m=parseInt(g[2]),m>=0&&m<=128))return p=[this.parse(g[1]),m],Object.defineProperty(p,"toString",{value:function(){return this.join("/")}}),p;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},h.IPv6.parser=function(d){let m,g,p,y,_,w;if(p=d.match(l.deprecatedTransitional))return this.parser(`::ffff:${p[1]}`);if(l.native.test(d))return u(d,8);if((p=d.match(l.transitional))&&(w=p[6]||"",m=u(p[1].slice(0,-1)+w,6),m.parts)){for(_=[parseInt(p[2]),parseInt(p[3]),parseInt(p[4]),parseInt(p[5])],g=0;g<_.length;g++)if(y=_[g],!(0<=y&&y<=255))return null;return m.parts.push(_[0]<<8|_[1]),m.parts.push(_[2]<<8|_[3]),{parts:m.parts,zoneId:m.zoneId}}return null},h.IPv6.subnetMaskFromPrefixLength=function(d){if(d=parseInt(d),d<0||d>128)throw new Error("ipaddr: invalid IPv6 prefix length");const m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];let g=0;const p=Math.floor(d/8);for(;g
i[o],g=[-h.x,-h.y];n||(g[a]=f[u]);var p=[0,0],y=[-d.x,-d.y],_=Dt(r.get("pageButtonGap",!0),r.get("itemGap",!0));if(m){var w=r.get("pageButtonPosition",!0);w==="end"?y[a]+=i[o]-d[o]:p[a]+=d[o]+_}y[1-a]+=h[s]/2-d[s]/2,f.setPosition(g),c.setPosition(p),v.setPosition(y);var S={x:0,y:0};if(S[o]=m?i[o]:h[o],S[s]=Math.max(h[s],d[s]),S[l]=Math.min(0,d[l]+y[1-a]),c.__rectSize=i[o],m){var b={x:0,y:0};b[o]=Math.max(i[o]-d[o]-_,0),b[s]=S[s],c.setClipPath(new Jt({shape:b})),c.__rectSize=b[o]}else v.eachChild(function(C){C.attr({invisible:!0,silent:!0})});var x=this._getPageInfo(r);return x.pageIndex!=null&&Tn(f,{x:x.contentPosition[0],y:x.contentPosition[1]},m?r:null),this._updatePageInfoView(r,x),S},t.prototype._pageGo=function(r,n,i){var a=this._getPageInfo(n)[r];a!=null&&i.dispatchAction({type:"legendScroll",scrollDataIndex:a,legendId:n.id})},t.prototype._updatePageInfoView=function(r,n){var i=this._controllerGroup;P(["pagePrev","pageNext"],function(f){var c=f+"DataIndex",v=n[c]!=null,h=i.childOfName(f);h&&(h.setStyle("fill",v?r.get("pageIconColor",!0):r.get("pageIconInactiveColor",!0)),h.cursor=v?"pointer":"default")});var a=i.childOfName("pageText"),o=r.get("pageFormatter"),s=n.pageIndex,l=s!=null?s+1:0,u=n.pageCount;a&&o&&a.setStyle("text",nt(o)?o.replace("{current}",l==null?"":l+"").replace("{total}",u==null?"":u+""):o({current:l,total:u}))},t.prototype._getPageInfo=function(r){var n=r.get("scrollDataIndex",!0),i=this.getContentGroup(),a=this._containerGroup.__rectSize,o=r.getOrient().index,s=wc[o],l=bc[o],u=this._findTargetItemIndex(n),f=i.children(),c=f[u],v=f.length,h=v?1:0,d={contentPosition:[i.x,i.y],pageCount:h,pageIndex:h-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!c)return d;var m=w(c);d.contentPosition[o]=-m.s;for(var g=u+1,p=m,y=m,_=null;g<=v;++g)_=w(f[g]),(!_&&y.e>p.s+a||_&&!S(_,p.s))&&(y.i>p.i?p=y:p=_,p&&(d.pageNextDataIndex==null&&(d.pageNextDataIndex=p.i),++d.pageCount)),y=_;for(var g=u-1,p=m,y=m,_=null;g>=-1;--g)_=w(f[g]),(!_||!S(y,_.s))&&p.i=x&&b.s<=x+a}},t.prototype._findTargetItemIndex=function(r){if(!this._showController)return 0;var n,i=this.getContentGroup(),a;return i.eachChild(function(o,s){var l=o.__legendDataIndex;a==null&&l!=null&&(a=s),l===r&&(n=s)}),n!=null?n:a},t.type="legend.scroll",t}(sx),l5=s5;function u5(e){e.registerAction("legendScroll","legendscroll",function(t,r){var n=t.scrollDataIndex;n!=null&&r.eachComponent({mainType:"legend",subType:"scroll",query:t},function(i){i.setScrollDataIndex(n)})})}function f5(e){mi(lx),e.registerComponentModel(o5),e.registerComponentView(l5),u5(e)}function wz(e){mi(lx),mi(f5)}var c5=function(e){J(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.hasSymbolVisual=!0,r}return t.prototype.getInitialData=function(r){return lB(null,this,{useEncodeDefaulter:!0})},t.prototype.getLegendIcon=function(r){var n=new ve,i=wa("line",0,r.itemHeight/2,r.itemWidth,0,r.lineStyle.stroke,!1);n.add(i),i.setStyle(r.lineStyle);var a=this.getData().getVisual("symbol"),o=this.getData().getVisual("symbolRotate"),s=a==="none"?"circle":a,l=r.itemHeight*.8,u=wa(s,(r.itemWidth-l)/2,(r.itemHeight-l)/2,l,l,r.itemStyle.fill);n.add(u),u.setStyle(r.itemStyle);var f=r.iconRotate==="inherit"?o:r.iconRotate||0;return u.rotation=f*Math.PI/180,u.setOrigin([r.itemWidth/2,r.itemHeight/2]),s.indexOf("empty")>-1&&(u.style.stroke=u.style.fill,u.style.fill="#fff",u.style.lineWidth=2),n},t.type="series.line",t.dependencies=["grid","polar"],t.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},t}(Qo),h5=c5;function ux(e,t,r){var n=e.getBaseAxis(),i=e.getOtherAxis(n),a=v5(i,r),o=n.dim,s=i.dim,l=t.mapDimension(s),u=t.mapDimension(o),f=s==="x"||s==="radius"?1:0,c=ct(e.dimensions,function(d){return t.mapDimension(d)}),v=!1,h=t.getCalculationInfo("stackResultDimension");return es(t,c[0])&&(v=!0,c[0]=h),es(t,c[1])&&(v=!0,c[1]=h),{dataDimsForPoint:c,valueStart:a,valueAxisDim:s,baseAxisDim:o,stacked:!!v,valueDim:l,baseDim:u,baseDataOffset:f,stackedOverDimension:t.getCalculationInfo("stackedOverDimension")}}function v5(e,t){var r=0,n=e.scale.getExtent();return t==="start"?r=n[0]:t==="end"?r=n[1]:n[0]>0?r=n[0]:n[1]<0&&(r=n[1]),r}function fx(e,t,r,n){var i=NaN;e.stacked&&(i=r.get(r.getCalculationInfo("stackedOverDimension"),n)),isNaN(i)&&(i=e.valueStart);var a=e.baseDataOffset,o=[];return o[a]=r.get(e.baseDim,n),o[1-a]=i,t.dataToPoint(o)}function d5(e,t){var r=[];return t.diff(e).add(function(n){r.push({cmd:"+",idx:n})}).update(function(n,i){r.push({cmd:"=",idx:i,idx1:n})}).remove(function(n){r.push({cmd:"-",idx:n})}).execute(),r}function p5(e,t,r,n,i,a,o,s){for(var l=d5(e,t),u=[],f=[],c=[],v=[],h=[],d=[],m=[],g=ux(i,t,o),p=e.getLayout("points")||[],y=t.getLayout("points")||[],_=0;_=i||m<0)break;if(ui(p,y)){if(l){m+=a;continue}break}if(m===r)e[a>0?"moveTo":"lineTo"](p,y),c=p,v=y;else{var _=p-u,w=y-f;if(_*_+w*w<.5){m+=a;continue}if(o>0){for(var S=m+a,b=t[S*2],x=t[S*2+1];b===p&&x===y&&g=n||ui(b,x))h=p,d=y;else{M=b-u,I=x-f;var O=p-u,H=b-p,B=y-f,Q=x-y,G=void 0,K=void 0;if(s==="x"){G=Math.abs(O),K=Math.abs(H);var lt=M>0?1:-1;h=p-lt*G*o,d=y,A=p+lt*K*o,L=y}else if(s==="y"){G=Math.abs(B),K=Math.abs(Q);var _t=I>0?1:-1;h=p,d=y-_t*G*o,A=p,L=y+_t*K*o}else G=Math.sqrt(O*O+B*B),K=Math.sqrt(H*H+Q*Q),D=K/(K+G),h=p-M*o*(1-D),d=y-I*o*(1-D),A=p+M*o*D,L=y+I*o*D,A=en(A,rn(b,p)),L=en(L,rn(x,y)),A=rn(A,en(b,p)),L=rn(L,en(x,y)),M=A-p,I=L-y,h=p-M*G/K,d=y-I*G/K,h=en(h,rn(u,p)),d=en(d,rn(f,y)),h=rn(h,en(u,p)),d=rn(d,en(f,y)),M=p-h,I=y-d,A=p+M*K/G,L=y+I*K/G}e.bezierCurveTo(c,v,h,d,p,y),c=A,v=L}else e.lineTo(p,y)}u=p,f=y,m+=a}return g}var cx=function(){function e(){this.smooth=0,this.smoothConstraint=!0}return e}(),g5=function(e){J(t,e);function t(r){var n=e.call(this,r)||this;return n.type="ec-polyline",n}return t.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},t.prototype.getDefaultShape=function(){return new cx},t.prototype.buildPath=function(r,n){var i=n.points,a=0,o=i.length/2;if(n.connectNulls){for(;o>0&&ui(i[o*2-2],i[o*2-1]);o--);for(;a=0){var w=u?(d-l)*_+l:(h-s)*_+s;return u?[r,w]:[w,r]}s=h,l=d;break;case o.C:h=a[c++],d=a[c++],m=a[c++],g=a[c++],p=a[c++],y=a[c++];var S=u?Hl(s,h,m,p,r,f):Hl(l,d,g,y,r,f);if(S>0)for(var b=0;b=0){var w=u?Xt(l,d,g,y,x):Xt(s,h,m,p,x);return u?[r,w]:[w,r]}}s=p,l=y;break}}},t}(kt),m5=function(e){J(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(cx),y5=function(e){J(t,e);function t(r){var n=e.call(this,r)||this;return n.type="ec-polygon",n}return t.prototype.getDefaultShape=function(){return new m5},t.prototype.buildPath=function(r,n){var i=n.points,a=n.stackedOnPoints,o=0,s=i.length/2,l=n.smoothMonotone;if(n.connectNulls){for(;s>0&&ui(i[s*2-2],i[s*2-1]);s--);for(;ot){a?r.push(o(a,l,t)):i&&r.push(o(i,l,0),o(i,l,t));break}else i&&(r.push(o(i,l,0)),i=null),r.push(l),a=l}return r}function x5(e,t,r){var n=e.getVisual("visualMeta");if(!(!n||!n.length||!e.count())&&t.type==="cartesian2d"){for(var i,a,o=n.length-1;o>=0;o--){var s=e.getDimensionInfo(n[o].dimension);if(i=s&&s.coordDim,i==="x"||i==="y"){a=n[o];break}}if(!!a){var l=t.getAxis(i),u=ct(a.stops,function(_){return{coord:l.toGlobalCoord(l.dataToCoord(_.value)),color:_.color}}),f=u.length,c=a.outerColors.slice();f&&u[0].coord>u[f-1].coord&&(u.reverse(),c.reverse());var v=S5(u,i==="x"?r.getWidth():r.getHeight()),h=v.length;if(!h&&f)return u[0].coord<0?c[1]?c[1]:u[f-1].color:c[0]?c[0]:u[0].color;var d=10,m=v[0].coord-d,g=v[h-1].coord+d,p=g-m;if(p<.001)return"transparent";P(v,function(_){_.offset=(_.coord-m)/p}),v.push({offset:h?v[h-1].offset:.5,color:c[1]||"transparent"}),v.unshift({offset:h?v[0].offset:.5,color:c[0]||"transparent"});var y=new Ww(0,0,0,0,v,!0);return y[i]=m,y[i+"2"]=g,y}}}function T5(e,t,r){var n=e.get("showAllSymbol"),i=n==="auto";if(!(n&&!i)){var a=r.getAxesByScale("ordinal")[0];if(!!a&&!(i&&C5(a,t))){var o=t.mapDimension(a.dim),s={};return P(a.getViewLabels(),function(l){var u=a.scale.getRawOrdinalNumber(l.tickValue);s[u]=1}),function(l){return!s.hasOwnProperty(t.get(o,l))}}}}function C5(e,t){var r=e.getExtent(),n=Math.abs(r[1]-r[0])/e.scale.count();isNaN(n)&&(n=0);for(var i=t.count(),a=Math.max(1,Math.round(i/5)),o=0;on)return!1;return!0}function D5(e,t){return isNaN(e)||isNaN(t)}function M5(e){for(var t=e.length/2;t>0&&D5(e[t*2-2],e[t*2-1]);t--);return t-1}function L0(e,t){return[e[t*2],e[t*2+1]]}function A5(e,t,r){for(var n=e.length/2,i=r==="x"?0:1,a,o,s=0,l=-1,u=0;u=t||a>=t&&o<=t){l=u;break}s=u,a=o}return{range:[s,l],t:(t-a)/(o-a)}}function hx(e){if(e.get(["endLabel","show"]))return!0;for(var t=0;t0&&r.get(["emphasis","lineStyle","width"])==="bolder"){var lt=m.getState("emphasis").style;lt.lineWidth=+m.style.lineWidth+1}Bt(m).seriesIndex=r.seriesIndex,Sh(m,Q,G,K);var _t=E0(r.get("smooth")),mt=r.get("smoothMonotone");if(m.setShape({smooth:_t,smoothMonotone:mt,connectNulls:C}),g){var pt=l.getCalculationInfo("stackedOnSeries"),At=0;g.useStyle(Mt(f.getAreaStyle(),{fill:L,opacity:.7,lineJoin:"bevel",decal:l.getVisual("style").decal})),pt&&(At=E0(pt.get("smooth"))),g.setShape({smooth:_t,stackedOnSmooth:At,smoothMonotone:mt,connectNulls:C}),dm(g,r,"areaStyle"),Bt(g).seriesIndex=r.seriesIndex,Sh(g,Q,G,K)}var k=function(U){a._changePolyState(U)};l.eachItemGraphicEl(function(U){U&&(U.onHoverStateChange=k)}),this._polyline.onHoverStateChange=k,this._data=l,this._coordSys=o,this._stackedOnPoints=b,this._points=c,this._step=I,this._valueOrigin=w,r.get("triggerLineEvent")&&(this.packEventData(r,m),g&&this.packEventData(r,g))},t.prototype.packEventData=function(r,n){Bt(n).eventData={componentType:"series",componentSubType:"line",componentIndex:r.componentIndex,seriesIndex:r.seriesIndex,seriesName:r.name,seriesType:"line"}},t.prototype.highlight=function(r,n,i,a){var o=r.getData(),s=vi(o,a);if(this._changePolyState("emphasis"),!(s instanceof Array)&&s!=null&&s>=0){var l=o.getLayout("points"),u=o.getItemGraphicEl(s);if(!u){var f=l[s*2],c=l[s*2+1];if(isNaN(f)||isNaN(c)||this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(f,c))return;var v=r.get("zlevel"),h=r.get("z");u=new Gd(o,s),u.x=f,u.y=c,u.setZ(v,h);var d=u.getSymbolPath().getTextContent();d&&(d.zlevel=v,d.z=h,d.z2=this._polyline.z2+1),u.__temp=!0,o.setItemGraphicEl(s,u),u.stopSymbolAnimation(!0),this.group.add(u)}u.highlight()}else wn.prototype.highlight.call(this,r,n,i,a)},t.prototype.downplay=function(r,n,i,a){var o=r.getData(),s=vi(o,a);if(this._changePolyState("normal"),s!=null&&s>=0){var l=o.getItemGraphicEl(s);l&&(l.__temp?(o.setItemGraphicEl(s,null),this.group.remove(l)):l.downplay())}else wn.prototype.downplay.call(this,r,n,i,a)},t.prototype._changePolyState=function(r){var n=this._polygon;um(this._polyline,r),n&&um(n,r)},t.prototype._newPolyline=function(r){var n=this._polyline;return n&&this._lineGroup.remove(n),n=new g5({shape:{points:r},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(n),this._polyline=n,n},t.prototype._newPolygon=function(r,n){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new y5({shape:{points:r,stackedOnPoints:n},segmentIgnoreThreshold:2}),this._lineGroup.add(i),this._polygon=i,i},t.prototype._initSymbolLabelAnimation=function(r,n,i){var a,o,s=n.getBaseAxis(),l=s.inverse;n.type==="cartesian2d"?(a=s.isHorizontal(),o=!1):n.type==="polar"&&(a=s.dim==="angle",o=!0);var u=r.hostModel,f=u.get("animationDuration");dt(f)&&(f=f(null));var c=u.get("animationDelay")||0,v=dt(c)?c(null):c;r.eachItemGraphicEl(function(h,d){var m=h;if(m){var g=[h.x,h.y],p=void 0,y=void 0,_=void 0;if(i)if(o){var w=i,S=n.pointToCoord(g);a?(p=w.startAngle,y=w.endAngle,_=-S[1]/180*Math.PI):(p=w.r0,y=w.r,_=S[0])}else{var b=i;a?(p=b.x,y=b.x+b.width,_=h.x):(p=b.y+b.height,y=b.y,_=h.y)}var x=y===p?0:(_-p)/(y-p);l&&(x=1-x);var C=dt(c)?c(d):f*x+v,D=m.getSymbolPath(),M=D.getTextContent();m.attr({scaleX:0,scaleY:0}),m.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:C}),M&&M.animateFrom({style:{opacity:0}},{duration:300,delay:C}),D.disableLabelAnimation=!0}})},t.prototype._initOrUpdateEndLabel=function(r,n,i){var a=r.getModel("endLabel");if(hx(r)){var o=r.getData(),s=this._polyline,l=o.getLayout("points");if(!l){s.removeTextContent(),this._endLabel=null;return}var u=this._endLabel;u||(u=this._endLabel=new de({z2:200}),u.ignoreClip=!0,s.setTextContent(this._endLabel),s.disableLabelAnimation=!0);var f=M5(l);f>=0&&(gd(s,md(r,"endLabel"),{inheritColor:i,labelFetcher:r,labelDataIndex:f,defaultText:function(c,v,h){return h!=null?YF(o,h):ax(o,c)},enableTextSetter:!0},P5(a,n)),s.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},t.prototype._endLabelOnDuring=function(r,n,i,a,o,s,l){var u=this._endLabel,f=this._polyline;if(u){r<1&&a.originalX==null&&(a.originalX=u.x,a.originalY=u.y);var c=i.getLayout("points"),v=i.hostModel,h=v.get("connectNulls"),d=s.get("precision"),m=s.get("distance")||0,g=l.getBaseAxis(),p=g.isHorizontal(),y=g.inverse,_=n.shape,w=y?p?_.x:_.y+_.height:p?_.x+_.width:_.y,S=(p?m:0)*(y?-1:1),b=(p?0:-m)*(y?-1:1),x=p?"x":"y",C=A5(c,w,x),D=C.range,M=D[1]-D[0],I=void 0;if(M>=1){if(M>1&&!h){var A=L0(c,D[0]);u.attr({x:A[0]+S,y:A[1]+b}),o&&(I=v.getRawValue(D[0]))}else{var A=f.getPointOn(w,x);A&&u.attr({x:A[0]+S,y:A[1]+b});var L=v.getRawValue(D[0]),O=v.getRawValue(D[1]);o&&(I=VI(i,d,L,O,C.t))}a.lastFrameIndex=D[0]}else{var H=r===1||a.lastFrameIndex>0?D[0]:0,A=L0(c,H);o&&(I=v.getRawValue(H)),u.attr({x:A[0]+S,y:A[1]+b})}o&&Zw(u).setLabelText(I)}},t.prototype._doUpdateAnimation=function(r,n,i,a,o,s,l){var u=this._polyline,f=this._polygon,c=r.hostModel,v=p5(this._data,r,this._stackedOnPoints,n,this._coordSys,i,this._valueOrigin),h=v.current,d=v.stackedOnCurrent,m=v.next,g=v.stackedOnNext;if(o&&(h=nn(v.current,i,o,l),d=nn(v.stackedOnCurrent,i,o,l),m=nn(v.next,i,o,l),g=nn(v.stackedOnNext,i,o,l)),I0(h,m)>3e3||f&&I0(d,g)>3e3){u.stopAnimation(),u.setShape({points:m}),f&&(f.stopAnimation(),f.setShape({points:m,stackedOnPoints:g}));return}u.shape.__points=v.current,u.shape.points=h;var p={shape:{points:m}};v.current!==h&&(p.shape.__points=v.next),u.stopAnimation(),Tn(u,p,c),f&&(f.setShape({points:h,stackedOnPoints:d}),f.stopAnimation(),Tn(f,{shape:{stackedOnPoints:g}},c),u.shape.points!==f.shape.points&&(f.shape.points=u.shape.points));for(var y=[],_=v.status,w=0;w<_.length;w++){var S=_[w].cmd;if(S==="="){var b=r.getItemGraphicEl(_[w].idx1);b&&y.push({el:b,ptIdx:w})}}u.animators&&u.animators.length&&u.animators[0].during(function(){f&&f.dirtyShape();for(var x=u.shape.__points,C=0;Ct&&(t=e[r]);return isFinite(t)?t:NaN},min:function(e){for(var t=1/0,r=0;r10&&o.type==="cartesian2d"&&a){var l=o.getBaseAxis(),u=o.getOtherAxis(l),f=l.getExtent(),c=n.getDevicePixelRatio(),v=Math.abs(f[1]-f[0])*(c||1),h=Math.round(s/v);if(isFinite(h)&&h>1){a==="lttb"&&t.setData(i.lttbDownSample(i.mapDimension(u.dim),1/h));var d=void 0;nt(a)?d=R5[a]:dt(a)&&(d=a),d&&t.setData(i.downSample(i.mapDimension(u.dim),1/h,d,O5))}}}}}function bz(e){e.registerChartView(E5),e.registerSeriesModel(h5),e.registerLayout(L5("line",!0)),e.registerVisual({seriesType:"line",reset:function(t){var r=t.getData(),n=t.getModel("lineStyle").getLineStyle();n&&!n.stroke&&(n.stroke=r.getVisual("style").fill),r.setVisual("legendLineStyle",n)}}),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,k5("line"))}function R0(e,t,r){var n=bi.createCanvas(),i=t.getWidth(),a=t.getHeight(),o=n.style;return o&&(o.position="absolute",o.left="0",o.top="0",o.width=i+"px",o.height=a+"px",n.setAttribute("data-zr-dom-id",e)),n.width=i*r,n.height=a*r,n}var B5=function(e){J(t,e);function t(r,n,i){var a=e.call(this)||this;a.motionBlur=!1,a.lastFrameAlpha=.7,a.dpr=1,a.virtual=!1,a.config={},a.incremental=!1,a.zlevel=0,a.maxRepaintRectCount=5,a.__dirty=!0,a.__firstTimePaint=!0,a.__used=!1,a.__drawIndex=0,a.__startIndex=0,a.__endIndex=0,a.__prevStartIndex=null,a.__prevEndIndex=null;var o;i=i||Wl,typeof r=="string"?o=R0(r,n,i):st(r)&&(o=r,r=o.id),a.id=r,a.dom=o;var s=o.style;return s&&(x1(o),o.onselectstart=function(){return!1},s.padding="0",s.margin="0",s.borderWidth="0"),a.painter=n,a.dpr=i,a}return t.prototype.getElementCount=function(){return this.__endIndex-this.__startIndex},t.prototype.afterBrush=function(){this.__prevStartIndex=this.__startIndex,this.__prevEndIndex=this.__endIndex},t.prototype.initContext=function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},t.prototype.setUnpainted=function(){this.__firstTimePaint=!0},t.prototype.createBackBuffer=function(){var r=this.dpr;this.domBack=R0("back-"+this.id,this.painter,r),this.ctxBack=this.domBack.getContext("2d"),r!==1&&this.ctxBack.scale(r,r)},t.prototype.createRepaintRects=function(r,n,i,a){if(this.__firstTimePaint)return this.__firstTimePaint=!1,null;var o=[],s=this.maxRepaintRectCount,l=!1,u=new Ot(0,0,0,0);function f(y){if(!(!y.isFinite()||y.isZero()))if(o.length===0){var _=new Ot(0,0,0,0);_.copy(y),o.push(_)}else{for(var w=!1,S=1/0,b=0,x=0;x=s)}}for(var c=this.__startIndex;c15)break}}O.prevElClipPaths&&p.restore()};if(y)if(y.length===0)C=g.__endIndex;else for(var M=h.dpr,I=0;I0&&t>i[0]){for(l=0;lt);l++);s=n[i[l]]}if(i.splice(l+1,0,t),n[t]=r,!r.virtual)if(s){var u=s.dom;u.nextSibling?o.insertBefore(r.dom,u.nextSibling):o.appendChild(r.dom)}else o.firstChild?o.insertBefore(r.dom,o.firstChild):o.appendChild(r.dom);r.__painter=this}},e.prototype.eachLayer=function(t,r){for(var n=this._zlevelList,i=0;i0?ol:0),this._needsManuallyCompositing),f.__builtin__||Vv("ZLevel "+u+" has been used by unkown layer "+f.id),f!==a&&(f.__used=!0,f.__startIndex!==l&&(f.__dirty=!0),f.__startIndex=l,f.incremental?f.__drawIndex=-1:f.__drawIndex=l,r(l),a=f),i.__dirty&Pe&&!i.__inHover&&(f.__dirty=!0,f.incremental&&f.__drawIndex<0&&(f.__drawIndex=l))}r(l),this.eachBuiltinLayer(function(c,v){!c.__used&&c.getElementCount()>0&&(c.__dirty=!0,c.__startIndex=c.__endIndex=c.__drawIndex=0),c.__dirty&&c.__drawIndex<0&&(c.__drawIndex=c.__startIndex)})},e.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},e.prototype._clearLayer=function(t){t.clear()},e.prototype.setBackgroundColor=function(t){this._backgroundColor=t,P(this._layers,function(r){r.setUnpainted()})},e.prototype.configLayer=function(t,r){if(r){var n=this._layerConfig;n[t]?Ct(n[t],r,!0):n[t]=r;for(var i=0;i=0;)g++;if(d.substr(0,2)==="::"&&g--,d.substr(-2,2)==="::"&&g--,g>m)return null;for(w=m-g,_=":";w--;)_+="0:";return d=d.replace("::",_),d[0]===":"&&(d=d.slice(1)),d[d.length-1]===":"&&(d=d.slice(0,-1)),m=function(){const S=d.split(":"),b=[];for(let x=0;x0;){if(_=g-p,_<0&&(_=0),d[y]>>_!==m[y]>>_)return!1;p-=g,y+=1}return!0}function c(d){if(a.test(d))return parseInt(d,16);if(d[0]==="0"&&!isNaN(parseInt(d[1],10))){if(i.test(d))return parseInt(d,8);throw new Error(`ipaddr: cannot parse ${d} as octal`)}return parseInt(d,10)}function v(d,m){for(;d.length=0;y-=1)if(_=this.octets[y],_ in p){if(w=p[_],g&&w!==0)return null;w!==8&&(g=!0),m+=w}else return null;return 32-m},d.prototype.range=function(){return h.subnetMatch(this,this.SpecialRanges)},d.prototype.toByteArray=function(){return this.octets.slice(0)},d.prototype.toIPv4MappedAddress=function(){return h.IPv6.parse(`::ffff:${this.toString()}`)},d.prototype.toNormalizedString=function(){return this.toString()},d.prototype.toString=function(){return this.octets.join(".")},d}(),h.IPv4.broadcastAddressFromCIDR=function(d){try{const m=this.parseCIDR(d),g=m[0].toByteArray(),p=this.subnetMaskFromPrefixLength(m[1]).toByteArray(),y=[];let _=0;for(;_<4;)y.push(parseInt(g[_],10)|parseInt(p[_],10)^255),_++;return new this(y)}catch(m){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},h.IPv4.isIPv4=function(d){return this.parser(d)!==null},h.IPv4.isValid=function(d){try{return new this(this.parser(d)),!0}catch(m){return!1}},h.IPv4.isValidFourPartDecimal=function(d){return!!(h.IPv4.isValid(d)&&d.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},h.IPv4.networkAddressFromCIDR=function(d){let m,g,p,y,_;try{for(m=this.parseCIDR(d),p=m[0].toByteArray(),_=this.subnetMaskFromPrefixLength(m[1]).toByteArray(),y=[],g=0;g<4;)y.push(parseInt(p[g],10)&parseInt(_[g],10)),g++;return new this(y)}catch(w){throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},h.IPv4.parse=function(d){const m=this.parser(d);if(m===null)throw new Error("ipaddr: string is not formatted like an IPv4 Address");return new this(m)},h.IPv4.parseCIDR=function(d){let m;if(m=d.match(/^(.+)\/(\d+)$/)){const g=parseInt(m[2]);if(g>=0&&g<=32){const p=[this.parse(m[1]),g];return Object.defineProperty(p,"toString",{value:function(){return this.join("/")}}),p}}throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},h.IPv4.parser=function(d){let m,g,p;if(m=d.match(n.fourOctet))return function(){const y=m.slice(1,6),_=[];for(let w=0;w4294967295||p<0)throw new Error("ipaddr: address outside defined range");return function(){const y=[];let _;for(_=0;_<=24;_+=8)y.push(p>>_&255);return y}().reverse()}else return(m=d.match(n.twoOctet))?function(){const y=m.slice(1,4),_=[];if(p=c(y[1]),p>16777215||p<0)throw new Error("ipaddr: address outside defined range");return _.push(c(y[0])),_.push(p>>16&255),_.push(p>>8&255),_.push(p&255),_}():(m=d.match(n.threeOctet))?function(){const y=m.slice(1,5),_=[];if(p=c(y[2]),p>65535||p<0)throw new Error("ipaddr: address outside defined range");return _.push(c(y[0])),_.push(c(y[1])),_.push(p>>8&255),_.push(p&255),_}():null},h.IPv4.subnetMaskFromPrefixLength=function(d){if(d=parseInt(d),d<0||d>32)throw new Error("ipaddr: invalid IPv4 prefix length");const m=[0,0,0,0];let g=0;const p=Math.floor(d/8);for(;g
>8),g.push(m&255);return g},d.prototype.toFixedLengthString=function(){const m=function(){const p=[];for(let y=0;y>8,g&255,p>>8,p&255])},d.prototype.toNormalizedString=function(){const m=function(){const p=[];for(let y=0;yy&&(p=_.index,y=_[0].length);return y<0?g:`${g.substring(0,p)}::${g.substring(p+y)}`},d.prototype.toString=function(){return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/,"::")},d}(),h.IPv6.broadcastAddressFromCIDR=function(d){try{const m=this.parseCIDR(d),g=m[0].toByteArray(),p=this.subnetMaskFromPrefixLength(m[1]).toByteArray(),y=[];let _=0;for(;_<16;)y.push(parseInt(g[_],10)|parseInt(p[_],10)^255),_++;return new this(y)}catch(m){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${m})`)}},h.IPv6.isIPv6=function(d){return this.parser(d)!==null},h.IPv6.isValid=function(d){if(typeof d=="string"&&d.indexOf(":")===-1)return!1;try{const m=this.parser(d);return new this(m.parts,m.zoneId),!0}catch(m){return!1}},h.IPv6.networkAddressFromCIDR=function(d){let m,g,p,y,_;try{for(m=this.parseCIDR(d),p=m[0].toByteArray(),_=this.subnetMaskFromPrefixLength(m[1]).toByteArray(),y=[],g=0;g<16;)y.push(parseInt(p[g],10)&parseInt(_[g],10)),g++;return new this(y)}catch(w){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${w})`)}},h.IPv6.parse=function(d){const m=this.parser(d);if(m.parts===null)throw new Error("ipaddr: string is not formatted like an IPv6 Address");return new this(m.parts,m.zoneId)},h.IPv6.parseCIDR=function(d){let m,g,p;if((g=d.match(/^(.+)\/(\d+)$/))&&(m=parseInt(g[2]),m>=0&&m<=128))return p=[this.parse(g[1]),m],Object.defineProperty(p,"toString",{value:function(){return this.join("/")}}),p;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},h.IPv6.parser=function(d){let m,g,p,y,_,w;if(p=d.match(l.deprecatedTransitional))return this.parser(`::ffff:${p[1]}`);if(l.native.test(d))return u(d,8);if((p=d.match(l.transitional))&&(w=p[6]||"",m=u(p[1].slice(0,-1)+w,6),m.parts)){for(_=[parseInt(p[2]),parseInt(p[3]),parseInt(p[4]),parseInt(p[5])],g=0;g<_.length;g++)if(y=_[g],!(0<=y&&y<=255))return null;return m.parts.push(_[0]<<8|_[1]),m.parts.push(_[2]<<8|_[3]),{parts:m.parts,zoneId:m.zoneId}}return null},h.IPv6.subnetMaskFromPrefixLength=function(d){if(d=parseInt(d),d<0||d>128)throw new Error("ipaddr: invalid IPv6 prefix length");const m=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];let g=0;const p=Math.floor(d/8);for(;g
[")
+ end
+ end
+end
+
local n = 1
m.uci:foreach(appname, "socks", function(s)
if s[".name"] == section then
@@ -788,7 +800,7 @@ o.datatype = "port"
o.rmempty = false
if has_singbox or has_xray then
- o = s2:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
+ o = s2:option(Value, "http_port", "HTTP " .. translate("Listen Port"))
o.default = 0
o.datatype = "port"
end
diff --git a/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po b/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po
index 2163e7978f..92c3ad0322 100644
--- a/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po
+++ b/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po
@@ -100,6 +100,9 @@ msgstr "Socks 配置"
msgid "Socks Node"
msgstr "Socks 节点"
+msgid "Current Node"
+msgstr "当前节点"
+
msgid "Listen Port"
msgstr "监听端口"
diff --git a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
index 91c69c355d..ef4733d2ab 100755
--- a/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
+++ b/openwrt-passwall/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
@@ -31,7 +31,7 @@ test_url() {
if /usr/bin/curl --help all | grep -q "\-\-retry-all-errors"; then
extra_params="--retry-all-errors ${extra_params}"
fi
- status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout ${timeout} --retry ${try} -w %{http_code} "$url")
+ local status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout ${timeout} --retry ${try} -w %{http_code} "$url")
case "$status" in
204)
status=200
@@ -41,12 +41,12 @@ test_url() {
}
test_proxy() {
- result=0
- status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x socks5h://127.0.0.1:${socks_port}")
+ local result=0
+ local status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x socks5h://127.0.0.1:${socks_port}")
if [ "$status" = "200" ]; then
result=0
else
- status2=$(test_url "https://www.baidu.com" ${retry_num} ${connect_timeout})
+ local status2=$(test_url "https://www.baidu.com" ${retry_num} ${connect_timeout})
if [ "$status2" = "200" ]; then
result=1
else
@@ -68,7 +68,7 @@ test_node() {
/usr/share/${CONFIG}/app.sh run_socks flag="test_node_${node_id}" node=${node_id} bind=127.0.0.1 socks_port=${_tmp_port} config_file=test_node_${node_id}.json
local curlx="socks5h://127.0.0.1:${_tmp_port}"
sleep 1s
- _proxy_status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x $curlx")
+ local _proxy_status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x $curlx")
# 结束 SS 插件进程
local pid_file="/tmp/etc/${CONFIG}/test_node_${node_id}_plugin.pid"
[ -s "$pid_file" ] && kill -9 "$(head -n 1 "$pid_file")" >/dev/null 2>&1
@@ -82,14 +82,14 @@ test_node() {
}
test_auto_switch() {
- flag=$(expr $flag + 1)
+ flag=$((flag + 1))
local b_nodes=$1
local now_node=$2
[ -z "$now_node" ] && {
if [ -n "$(/usr/share/${CONFIG}/app.sh get_cache_var "socks_${id}")" ]; then
now_node=$(/usr/share/${CONFIG}/app.sh get_cache_var "socks_${id}")
else
- #echolog "自动切换检测:未知错误"
+ #echolog "Socks切换检测:未知错误"
return 1
fi
}
@@ -98,58 +98,59 @@ test_auto_switch() {
main_node=$now_node
}
- status=$(test_proxy)
- if [ "$status" == 2 ]; then
- echolog "自动切换检测:无法连接到网络,请检查网络是否正常!"
+ local status=$(test_proxy)
+ if [ "$status" = "2" ]; then
+ echolog "Socks切换检测:无法连接到网络,请检查网络是否正常!"
return 2
fi
#检测主节点是否能使用
- if [ "$restore_switch" == "1" ] && [ -n "$main_node" ] && [ "$now_node" != "$main_node" ]; then
+ if [ "$restore_switch" = "1" ] && [ -n "$main_node" ] && [ "$now_node" != "$main_node" ]; then
test_node ${main_node}
[ $? -eq 0 ] && {
#主节点正常,切换到主节点
- echolog "自动切换检测:${id}主节点【$(config_n_get $main_node type):[$(config_n_get $main_node remarks)]】正常,切换到主节点!"
+ echolog "Socks切换检测:${id}主节点【$(config_n_get $main_node type):[$(config_n_get $main_node remarks)]】正常,切换到主节点!"
/usr/share/${CONFIG}/app.sh socks_node_switch flag=${id} new_node=${main_node}
[ $? -eq 0 ] && {
- echolog "自动切换检测:${id}节点切换完毕!"
+ echolog "Socks切换检测:${id}节点切换完毕!"
}
return 0
}
fi
- if [ "$status" == 0 ]; then
- #echolog "自动切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】正常。"
+ if [ "$status" = "0" ]; then
+ #echolog "Socks切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】正常。"
return 0
- elif [ "$status" == 1 ]; then
- echolog "自动切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】异常,切换到下一个备用节点检测!"
- local new_node
- in_backup_nodes=$(echo $b_nodes | grep $now_node)
- # 判断当前节点是否存在于备用节点列表里
- if [ -z "$in_backup_nodes" ]; then
- # 如果不存在,设置第一个节点为新的节点
- new_node=$(echo $b_nodes | awk -F ' ' '{print $1}')
+ elif [ "$status" = "1" ]; then
+ local new_node msg
+ if [ "$backup_node_num" -gt 1 ]; then
+ # 有多个后备节点时
+ local first_node found node
+ for node in $b_nodes; do
+ [ -z "$first_node" ] && first_node="$node" # 记录第一个节点
+ [ "$found" = "1" ] && { new_node="$node"; break; } # 找到当前节点后取下一个
+ [ "$node" = "$now_node" ] && found=1 # 标记找到当前节点
+ done
+ # 如果没找到当前节点,或者当前节点是最后一个,就取第一个节点
+ [ -z "$new_node" ] && new_node="$first_node"
+ msg="切换到$([ "$now_node" = "$main_node" ] && echo 备用节点 || echo 下一个备用节点)检测!"
else
- # 如果存在,设置下一个备用节点为新的节点
- #local count=$(expr $(echo $b_nodes | grep -o ' ' | wc -l) + 1)
- local next_node=$(echo $b_nodes | awk -F "$now_node" '{print $2}' | awk -F " " '{print $1}')
- if [ -z "$next_node" ]; then
- new_node=$(echo $b_nodes | awk -F ' ' '{print $1}')
- else
- new_node=$next_node
- fi
+ # 只有一个后备节点时,与主节点轮询
+ new_node=$([ "$now_node" = "$main_node" ] && echo "$b_nodes" || echo "$main_node")
+ msg="切换到$([ "$now_node" = "$main_node" ] && echo 备用节点 || echo 主节点)检测!"
fi
+ echolog "Socks切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】异常,$msg"
test_node ${new_node}
if [ $? -eq 0 ]; then
- [ "$restore_switch" == "0" ] && {
- uci set $CONFIG.${id}.node=$new_node
- [ -z "$(echo $b_nodes | grep $main_node)" ] && uci add_list $CONFIG.${id}.autoswitch_backup_node=$main_node
- uci commit $CONFIG
- }
- echolog "自动切换检测:${id}【$(config_n_get $new_node type):[$(config_n_get $new_node remarks)]】正常,切换到此节点!"
+# [ "$restore_switch" = "0" ] && {
+# uci set $CONFIG.${id}.node=$new_node
+# [ -z "$(echo $b_nodes | grep $main_node)" ] && uci add_list $CONFIG.${id}.autoswitch_backup_node=$main_node
+# uci commit $CONFIG
+# }
+ echolog "Socks切换检测:${id}【$(config_n_get $new_node type):[$(config_n_get $new_node remarks)]】正常,切换到此节点!"
/usr/share/${CONFIG}/app.sh socks_node_switch flag=${id} new_node=${new_node}
[ $? -eq 0 ] && {
- echolog "自动切换检测:${id}节点切换完毕!"
+ echolog "Socks切换检测:${id}节点切换完毕!"
}
return 0
else
@@ -166,12 +167,20 @@ start() {
main_node=$(config_n_get $id node)
socks_port=$(config_n_get $id port 0)
delay=$(config_n_get $id autoswitch_testing_time 30)
- sleep 5s
connect_timeout=$(config_n_get $id autoswitch_connect_timeout 3)
retry_num=$(config_n_get $id autoswitch_retry_num 1)
restore_switch=$(config_n_get $id autoswitch_restore_switch 0)
probe_url=$(config_n_get $id autoswitch_probe_url "https://www.google.com/generate_204")
backup_node=$(config_n_get $id autoswitch_backup_node)
+ if [ -n "$backup_node" ]; then
+ backup_node=$(echo "$backup_node" | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
+ backup_node_num=$(printf "%s\n" "$backup_node" | wc -w)
+ if [ "$backup_node_num" -eq 1 ]; then
+ [ "$main_node" = "$backup_node" ] && return
+ fi
+ else
+ return
+ fi
while [ -n "$backup_node" ]; do
[ -f "$LOCK_FILE" ] && {
sleep 6s
@@ -183,7 +192,6 @@ start() {
continue
}
touch $LOCK_FILE
- backup_node=$(echo $backup_node | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
test_auto_switch "$backup_node"
rm -f $LOCK_FILE
sleep ${delay}
@@ -191,4 +199,3 @@ start() {
}
start $@
-
diff --git a/openwrt-passwall2/LICENSE b/openwrt-passwall2/LICENSE
new file mode 100644
index 0000000000..f288702d2f
--- /dev/null
+++ b/openwrt-passwall2/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/openwrt-passwall2/luci-app-passwall2/Makefile b/openwrt-passwall2/luci-app-passwall2/Makefile
index 61863c8415..6328a950e7 100644
--- a/openwrt-passwall2/luci-app-passwall2/Makefile
+++ b/openwrt-passwall2/luci-app-passwall2/Makefile
@@ -124,6 +124,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server
config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs
bool "Include Simple-Obfs (Shadowsocks Plugin)"
select PACKAGE_simple-obfs
+ select PACKAGE_simple-obfs-client
default y
config PACKAGE_$(PKG_NAME)_INCLUDE_SingBox
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/controller/passwall2.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/controller/passwall2.lua
index d3ec9b29b1..5a6eba4b9d 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/controller/passwall2.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/controller/passwall2.lua
@@ -81,6 +81,8 @@ function index()
entry({"admin", "services", appname, "update_rules"}, call("update_rules")).leaf = true
entry({"admin", "services", appname, "subscribe_del_node"}, call("subscribe_del_node")).leaf = true
entry({"admin", "services", appname, "subscribe_del_all"}, call("subscribe_del_all")).leaf = true
+ entry({"admin", "services", appname, "subscribe_manual"}, call("subscribe_manual")).leaf = true
+ entry({"admin", "services", appname, "subscribe_manual_all"}, call("subscribe_manual_all")).leaf = true
--[[Components update]]
entry({"admin", "services", appname, "check_passwall2"}, call("app_check")).leaf = true
@@ -416,6 +418,27 @@ function delete_select_nodes()
uci:delete(appname, t[".name"], "to_node")
uci:delete(appname, t[".name"], "chain_proxy")
end
+ local list_name = t["urltest_node"] and "urltest_node" or (t["balancing_node"] and "balancing_node")
+ if list_name then
+ local nodes = uci:get_list(appname, t[".name"], list_name)
+ if nodes then
+ local changed = false
+ local new_nodes = {}
+ for _, node in ipairs(nodes) do
+ if node ~= w then
+ table.insert(new_nodes, node)
+ else
+ changed = true
+ end
+ end
+ if changed then
+ uci:set_list(appname, t[".name"], list_name, new_nodes)
+ end
+ end
+ end
+ if t["fallback_node"] == w then
+ uci:delete(appname, t[".name"], "fallback_node")
+ end
end)
if (uci:get(appname, w, "add_mode") or "0") == "2" then
local add_from = uci:get(appname, w, "add_from") or ""
@@ -619,3 +642,51 @@ function subscribe_del_all()
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua truncate > /dev/null 2>&1")
http.status(200, "OK")
end
+
+function subscribe_manual()
+ local section = http.formvalue("section") or ""
+ local current_url = http.formvalue("url") or ""
+ if section == "" or current_url == "" then
+ http_write_json({ success = false, msg = "Missing section or URL, skip." })
+ return
+ end
+ local uci_url = api.sh_uci_get(appname, section, "url")
+ if not uci_url or uci_url == "" then
+ http_write_json({ success = false, msg = i18n.translate("Please save and apply before manually subscribing.") })
+ return
+ end
+ if uci_url ~= current_url then
+ api.sh_uci_set(appname, section, "url", current_url, true)
+ end
+ luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. section .. " manual >/dev/null 2>&1 &")
+ http_write_json({ success = true, msg = "Subscribe triggered." })
+end
+
+function subscribe_manual_all()
+ local sections = http.formvalue("sections") or ""
+ local urls = http.formvalue("urls") or ""
+ if sections == "" or urls == "" then
+ http_write_json({ success = false, msg = "Missing section or URL, skip." })
+ return
+ end
+ local section_list = util.split(sections, ",")
+ local url_list = util.split(urls, ",")
+ -- 检查是否存在未保存配置
+ for i, section in ipairs(section_list) do
+ local uci_url = api.sh_uci_get(appname, section, "url")
+ if not uci_url or uci_url == "" then
+ http_write_json({ success = false, msg = i18n.translate("Please save and apply before manually subscribing.") })
+ return
+ end
+ end
+ -- 保存有变动的url
+ for i, section in ipairs(section_list) do
+ local current_url = url_list[i] or ""
+ local uci_url = api.sh_uci_get(appname, section, "url")
+ if current_url ~= "" and uci_url ~= current_url then
+ api.sh_uci_set(appname, section, "url", current_url, true)
+ end
+ end
+ luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start all manual >/dev/null 2>&1 &")
+ http_write_json({ success = true, msg = "Subscribe triggered." })
+end
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
index 96b88eb315..c6ab4c3b55 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
@@ -53,6 +53,37 @@ function s.remove(e, t)
m:set(s[".name"], "node", "default")
end
end)
+ m.uci:foreach(appname, "nodes", function(s)
+ if s["preproxy_node"] == t then
+ m:del(s[".name"], "preproxy_node")
+ m:del(s[".name"], "chain_proxy")
+ end
+ if s["to_node"] == t then
+ m:del(s[".name"], "to_node")
+ m:del(s[".name"], "chain_proxy")
+ end
+ local list_name = s["urltest_node"] and "urltest_node" or (s["balancing_node"] and "balancing_node")
+ if list_name then
+ local nodes = m.uci:get_list(appname, s[".name"], list_name)
+ if nodes then
+ local changed = false
+ local new_nodes = {}
+ for _, node in ipairs(nodes) do
+ if node ~= t then
+ table.insert(new_nodes, node)
+ else
+ changed = true
+ end
+ end
+ if changed then
+ m.uci:set_list(appname, s[".name"], list_name, new_nodes)
+ end
+ end
+ end
+ if s["fallback_node"] == t then
+ m:del(s[".name"], "fallback_node")
+ end
+ end)
if (m:get(t, "add_mode") or "0") == "2" then
local add_from = m:get(t, "add_from") or ""
if add_from ~= "" then
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
index f9f5018581..11b3f173ea 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
@@ -51,6 +51,11 @@ if api.is_js_luci() then
end
end
+m.render = function(self, ...)
+ Map.render(self, ...)
+ api.optimize_cbi_ui()
+end
+
-- [[ Subscribe Settings ]]--
s = m:section(TypedSection, "global_subscribe", "")
s.anonymous = true
@@ -136,15 +141,15 @@ function o.cfgvalue(self, section)
translate("Delete All Subscribe Node"))
end
-o = s:option(Button, "_update", translate("Manual subscription All"))
-o.inputstyle = "apply"
-function o.write(t, n)
- luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start > /dev/null 2>&1 &")
- m.no_commit = true
- luci.http.redirect(api.url("log"))
+o = s:option(DummyValue, "_update", translate("Manual subscription All"))
+o.rawhtml = true
+o.cfgvalue = function(self, section)
+ return string.format([[
+ ]],
+ translate("Manual subscription All"))
end
-s = m:section(TypedSection, "subscribe_list", "", "" .. translate("Please input the subscription url first, save and submit before manual subscription.") .. "")
+s = m:section(TypedSection, "subscribe_list", "", "" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "")
s.addremove = true
s.anonymous = true
s.sortable = true
@@ -205,12 +210,12 @@ function o.cfgvalue(self, section)
remark, translate("Delete the subscribed node"))
end
-o = s:option(Button, "_update", translate("Manual subscription"))
-o.inputstyle = "apply"
-function o.write(t, n)
- luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. n .. " > /dev/null 2>&1 &")
- m.no_commit = true
- luci.http.redirect(api.url("log"))
+o = s:option(DummyValue, "_update", translate("Manual subscription"))
+o.rawhtml = true
+o.cfgvalue = function(self, section)
+ return string.format([[
+ ]],
+ section, translate("Manual subscription"))
end
s:append(Template(appname .. "/node_subscribe/js"))
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
index 4b64f3728b..db0c137a40 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
@@ -9,6 +9,11 @@ if not arg[1] or not m:get(arg[1]) then
luci.http.redirect(m.redirect)
end
+m.render = function(self, ...)
+ Map.render(self, ...)
+ api.optimize_cbi_ui()
+end
+
local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
local has_singbox = api.finded_com("sing-box")
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
index 0889ab6970..723752f633 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
@@ -234,6 +234,9 @@ if has_xray then
end
if has_singbox then
+ local version = api.get_app_version("sing-box"):match("[^v]+")
+ local version_ge_1_12_0 = api.compare_versions(version, ">=", "1.12.0")
+
s = m:section(TypedSection, "global_singbox", "Sing-Box " .. translate("Settings"))
s.anonymous = true
s.addremove = false
@@ -279,6 +282,16 @@ if has_singbox then
os.remove(geosite_path)
end
end
+
+ if version_ge_1_12_0 then
+ o = s:option(Flag, "record_fragment", "TLS Record " .. translate("Fragment"),
+ translate("Split handshake data into multiple TLS records for better censorship evasion. Low overhead. Recommended to enable first."))
+ o.default = 0
+
+ o = s:option(Flag, "fragment", "TLS TCP " .. translate("Fragment"),
+ translate("Split handshake into multiple TCP segments. Enhances obfuscation. May increase delay. Use only if needed."))
+ o.default = 0
+ end
end
return m
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
index 192ce96eb5..73f25b30ec 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
@@ -135,7 +135,7 @@ if api.compare_versions(xray_version, ">=", "1.8.10") then
end
-- 探测地址
-local ucpu = s:option(Flag, _n("useCustomProbeUrl"), translate("Use Custome Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL."))
+local ucpu = s:option(Flag, _n("useCustomProbeUrl"), translate("Use Custom Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL."))
ucpu:depends({ [_n("balancingStrategy")] = "leastPing" })
ucpu:depends({ [_n("balancingStrategy")] = "leastLoad" })
@@ -379,6 +379,19 @@ o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translat
o.default = "0"
o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o = s:option(Flag, _n("ech"), translate("ECH"))
+o.default = "0"
+o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+
+o = s:option(TextValue, _n("ech_config"), translate("ECH Config"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("ech")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
-- [[ REALITY部分 ]] --
o = s:option(Value, _n("reality_publicKey"), translate("Public Key"))
o:depends({ [_n("tls")] = true, [_n("reality")] = true })
@@ -409,6 +422,19 @@ o.default = "chrome"
o:depends({ [_n("tls")] = true, [_n("utls")] = true })
o:depends({ [_n("tls")] = true, [_n("reality")] = true })
+o = s:option(Flag, _n("use_mldsa65Verify"), translate("ML-DSA-65"))
+o.default = "0"
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
+
+o = s:option(TextValue, _n("reality_mldsa65Verify"), "ML-DSA-65 " .. translate("Public key"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("use_mldsa65Verify")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW (TCP)")
o:value("mkcp", "mKCP")
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua
index fea94a1efc..6f8cbffa57 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua
@@ -43,17 +43,29 @@ o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), t
o:value("false")
o:value("true")
-o = s:option(ListValue, _n("plugin"), translate("plugin"))
+o = s:option(Flag, _n("plugin_enabled"), translate("plugin"))
+o.default = 0
+
+o = s:option(Value, _n("plugin"), "SIP003 " .. translate("plugin"), translate("Supports custom SIP003 plugins, Make sure the plugin is installed."))
+o.default = "none"
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
if api.is_finded("shadow-tls") then o:value("shadow-tls") end
+o:depends({ [_n("plugin_enabled")] = true })
+o.validate = function(self, value, t)
+ if value and value ~= "" and value ~= "none" then
+ if not api.is_finded(value) then
+ return nil, value .. ": " .. translate("Can't find this file!")
+ else
+ return value
+ end
+ end
+ return nil
+end
o = s:option(Value, _n("plugin_opts"), translate("opts"))
-o:depends({ [_n("plugin")] = "xray-plugin"})
-o:depends({ [_n("plugin")] = "v2ray-plugin"})
-o:depends({ [_n("plugin")] = "obfs-local"})
-o:depends({ [_n("plugin")] = "shadow-tls"})
+o:depends({ [_n("plugin_enabled")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua
index 780a36aa12..4201cc8fbe 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua
@@ -44,15 +44,18 @@ o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), t
o:value("false")
o:value("true")
-o = s:option(ListValue, _n("plugin"), translate("plugin"))
+o = s:option(Flag, _n("plugin_enabled"), translate("plugin"))
+o.default = 0
+
+o = s:option(ListValue, _n("plugin"), "SIP003 " .. translate("plugin"))
+o.default = "none"
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
+o:depends({ [_n("plugin_enabled")] = true })
o = s:option(Value, _n("plugin_opts"), translate("opts"))
-o:depends({ [_n("plugin")] = "xray-plugin"})
-o:depends({ [_n("plugin")] = "v2ray-plugin"})
-o:depends({ [_n("plugin")] = "obfs-local"})
+o:depends({ [_n("plugin_enabled")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
index ff93af46d2..8685cc7217 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
@@ -187,6 +187,19 @@ o:value("h2")
o:value("http/1.1")
o:depends({ [_n("tls")] = true })
+o = s:option(Flag, _n("use_mldsa65Seed"), translate("ML-DSA-65"))
+o.default = "0"
+o:depends({ [_n("reality")] = true })
+
+o = s:option(TextValue, _n("reality_mldsa65Seed"), "ML-DSA-65 " .. translate("Private Key"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("use_mldsa65Seed")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
-- o = s:option(Value, _n("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
@@ -223,6 +236,19 @@ o.validate = function(self, value, t)
return nil
end
+o = s:option(Flag, _n("ech"), translate("ECH"))
+o.default = "0"
+o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+
+o = s:option(TextValue, _n("ech_key"), translate("ECH Key"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("ech")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW")
o:value("mkcp", "mKCP")
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua
index 1bcbedd8b0..58af0533f9 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/api.lua
@@ -55,7 +55,8 @@ function uci_save(cursor, config, commit, apply)
end
function sh_uci_get(config, section, option)
- exec_call(string.format("uci -q get %s.%s.%s", config, section, option))
+ local _, val = exec_call(string.format("uci -q get %s.%s.%s", config, section, option))
+ return val
end
function sh_uci_set(config, section, option, val, commit)
@@ -1208,6 +1209,9 @@ function is_js_luci()
end
function set_apply_on_parse(map)
+ if not map then
+ return
+ end
if is_js_luci() == true then
map.apply_on_parse = false
map.on_after_apply = function(self)
@@ -1217,6 +1221,10 @@ function set_apply_on_parse(map)
end
end
end
+ map.render = function(self, ...)
+ getmetatable(self).__index.render(self, ...) -- 保持原渲染流程
+ optimize_cbi_ui()
+ end
end
function luci_types(id, m, s, type_name, option_prefix)
@@ -1320,3 +1328,27 @@ function format_go_time(input)
if s > 0 or result == "" then result = result .. s .. "s" end
return result
end
+
+function optimize_cbi_ui()
+ luci.http.write([[
+
+ ]])
+end
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/com.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/com.lua
index 062ed873ec..dbde96b914 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/com.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/com.lua
@@ -1,11 +1,13 @@
local _M = {}
local function gh_release_url(self)
- return "https://api.github.com/repos/" .. self.repo .. "/releases/latest"
+ --return "https://api.github.com/repos/" .. self.repo .. "/releases/latest"
+ return "https://github.com/xiaorouji/openwrt-passwall-packages/releases/download/api-cache/" .. string.lower(self.name) .. "-release-api.json"
end
local function gh_pre_release_url(self)
- return "https://api.github.com/repos/" .. self.repo .. "/releases?per_page=1"
+ --return "https://api.github.com/repos/" .. self.repo .. "/releases?per_page=1"
+ return "https://github.com/xiaorouji/openwrt-passwall-packages/releases/download/api-cache/" .. string.lower(self.name) .. "-pre-release-api.json"
end
_M.hysteria = {
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua
index 8c5286a95f..5cedef0c5c 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua
@@ -28,6 +28,7 @@ function gen_config_server(node)
return config
end
+local plugin_sh, plugin_bin
function gen_config(var)
local node_id = var["-node"]
@@ -49,12 +50,19 @@ function gen_config(var)
local local_http_port = var["-local_http_port"]
local local_http_username = var["-local_http_username"]
local local_http_password = var["-local_http_password"]
-
+
if api.is_ipv6(server_host) then
server_host = api.get_ipv6_only(server_host)
end
local server = server_host
-
+
+ local plugin_file
+ if node.plugin and node.plugin ~= "" and node.plugin ~= "none" then
+ plugin_sh = var["-plugin_sh"] or ""
+ plugin_file = (plugin_sh ~="") and plugin_sh or node.plugin
+ plugin_bin = node.plugin
+ end
+
local config = {
server = server,
server_port = tonumber(server_port),
@@ -68,10 +76,8 @@ function gen_config(var)
}
if node.type == "SS" then
- if node.plugin and node.plugin ~= "none" then
- config.plugin = node.plugin
- config.plugin_opts = node.plugin_opts or nil
- end
+ config.plugin = plugin_file or nil
+ config.plugin_opts = (plugin_file) and node.plugin_opts or nil
config.mode = mode
elseif node.type == "SSR" then
config.protocol = node.protocol
@@ -87,8 +93,8 @@ function gen_config(var)
method = node.method,
password = node.password,
timeout = tonumber(node.timeout),
- plugin = (node.plugin and node.plugin ~= "none") and node.plugin or nil,
- plugin_opts = (node.plugin and node.plugin ~= "none") and node.plugin_opts or nil
+ plugin = plugin_file or nil,
+ plugin_opts = (plugin_file) and node.plugin_opts or nil
}
},
locals = {},
@@ -119,5 +125,15 @@ if arg[1] then
local func =_G[arg[1]]
if func then
print(func(api.get_function_args(arg)))
+ if plugin_sh and plugin_sh ~="" and plugin_bin then
+ local f = io.open(plugin_sh, "w")
+ f:write("#!/bin/sh\n")
+ f:write("export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/bin:$PATH\n")
+ f:write(plugin_bin .. " $@ &\n")
+ f:write("echo $! > " .. plugin_sh:gsub("%.sh$", ".pid") .. "\n")
+ f:write("wait\n")
+ f:close()
+ luci.sys.call("chmod +x " .. plugin_sh)
+ end
end
end
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
index 9ce22bf5a2..d35f0bf065 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
@@ -8,8 +8,9 @@ local fs = api.fs
local CACHE_PATH = api.CACHE_PATH
local split = api.split
-local local_version = api.get_app_version("sing-box")
-local version_ge_1_11_0 = api.compare_versions(local_version:match("[^v]+"), ">=", "1.11.0")
+local local_version = api.get_app_version("sing-box"):match("[^v]+")
+local version_ge_1_11_0 = api.compare_versions(local_version, ">=", "1.11.0")
+local version_ge_1_12_0 = api.compare_versions(local_version, ">=", "1.12.0")
local new_port
@@ -31,9 +32,13 @@ function gen_outbound(flag, node, tag, proxy_table)
end
local proxy_tag = nil
+ local fragment = nil
+ local record_fragment = nil
local run_socks_instance = true
if proxy_table ~= nil and type(proxy_table) == "table" then
proxy_tag = proxy_table.tag or nil
+ fragment = proxy_table.fragment or nil
+ record_fragment = proxy_table.record_fragment or nil
run_socks_instance = proxy_table.run_socks_instance
end
@@ -98,6 +103,8 @@ function gen_outbound(flag, node, tag, proxy_table)
alpn = alpn, --支持的应用层协议协商列表,按优先顺序排列。如果两个对等点都支持 ALPN,则选择的协议将是此列表中的一个,如果没有相互支持的协议则连接将失败。
--min_version = "1.2",
--max_version = "1.3",
+ fragment = fragment,
+ record_fragment = record_fragment,
ech = {
enabled = (node.ech == "1") and true or false,
config = node.ech_config and split(node.ech_config:gsub("\\n", "\n"), "\n") or {},
@@ -327,6 +334,8 @@ function gen_outbound(flag, node, tag, proxy_table)
enabled = true,
server_name = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
+ fragment = fragment,
+ record_fragment = record_fragment,
alpn = (node.hysteria_alpn and node.hysteria_alpn ~= "") and {
node.hysteria_alpn
} or nil,
@@ -361,6 +370,8 @@ function gen_outbound(flag, node, tag, proxy_table)
enabled = true,
server_name = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
+ fragment = fragment,
+ record_fragment = record_fragment,
alpn = (node.tuic_alpn and node.tuic_alpn ~= "") and {
node.tuic_alpn
} or nil,
@@ -398,6 +409,8 @@ function gen_outbound(flag, node, tag, proxy_table)
enabled = true,
server_name = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
+ fragment = fragment,
+ record_fragment = record_fragment,
ech = {
enabled = (node.ech == "1") and true or false,
config = node.ech_config and split(node.ech_config:gsub("\\n", "\n"), "\n") or {},
@@ -978,7 +991,7 @@ function gen_config(var)
end
if is_new_ut_node then
local ut_node = uci:get_all(appname, ut_node_id)
- local outbound = gen_outbound(flag, ut_node, ut_node_tag, { run_socks_instance = not no_run })
+ local outbound = gen_outbound(flag, ut_node, ut_node_tag, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil, run_socks_instance = not no_run })
if outbound then
outbound.tag = outbound.tag .. ":" .. ut_node.remarks
table.insert(outbounds, outbound)
@@ -1144,8 +1157,19 @@ function gen_config(var)
})
end
end
-
- local _outbound = gen_outbound(flag, _node, rule_name, { tag = use_proxy and preproxy_tag or nil, run_socks_instance = not no_run})
+ local proxy_table = {
+ tag = use_proxy and preproxy_tag or nil,
+ run_socks_instance = not no_run
+ }
+ if not proxy_table.tag then
+ if singbox_settings.fragment == "1" then
+ proxy_table.fragment = true
+ end
+ if singbox_settings.record_fragment == "1" then
+ proxy_table.record_fragment = true
+ end
+ end
+ local _outbound = gen_outbound(flag, _node, rule_name, proxy_table)
if _outbound then
_outbound.tag = _outbound.tag .. ":" .. _node.remarks
rule_outboundTag, last_insert_outbound = set_outbound_detour(_node, _outbound, outbounds, rule_name)
@@ -1348,7 +1372,7 @@ function gen_config(var)
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
end
else
- local outbound = gen_outbound(flag, node, nil, { run_socks_instance = not no_run })
+ local outbound = gen_outbound(flag, node, nil, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil, run_socks_instance = not no_run })
if outbound then
outbound.tag = outbound.tag .. ":" .. node.remarks
COMMON.default_outbound_tag, last_insert_outbound = set_outbound_detour(node, outbound, outbounds)
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua
index ae27871fbb..058de37890 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/passwall2/util_xray.lua
@@ -154,14 +154,16 @@ function gen_outbound(flag, node, tag, proxy_table)
tlsSettings = (node.stream_security == "tls") and {
serverName = node.tls_serverName,
allowInsecure = (node.tls_allowInsecure == "1") and true or false,
- fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil
+ fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil,
+ echConfigList = (node.ech == "1") and node.ech_config or nil
} or nil,
realitySettings = (node.stream_security == "reality") and {
serverName = node.tls_serverName,
publicKey = node.reality_publicKey,
shortId = node.reality_shortId or "",
spiderX = node.reality_spiderX or "/",
- fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or "chrome"
+ fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or "chrome",
+ mldsa65Verify = (node.use_mldsa65Verify == "1") and node.reality_mldsa65Verify or nil
} or nil,
rawSettings = ((node.transport == "raw" or node.transport == "tcp") and node.protocol ~= "socks" and (node.tcp_guise and node.tcp_guise ~= "none")) and {
header = {
@@ -460,7 +462,8 @@ function gen_config_server(node)
certificateFile = node.tls_certificateFile,
keyFile = node.tls_keyFile
}
- }
+ },
+ echServerKeys = (node.ech == "1") and node.ech_key or nil
} or nil,
rawSettings = (node.transport == "raw" or node.transport == "tcp") and {
header = {
@@ -545,7 +548,8 @@ function gen_config_server(node)
dest = node.reality_dest,
serverNames = node.reality_serverNames or {},
privateKey = node.reality_private_key,
- shortIds = node.reality_shortId or ""
+ shortIds = node.reality_shortId or "",
+ mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil
} or nil
end
end
@@ -1152,7 +1156,7 @@ function gen_config(var)
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
end
else
- local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.fragment == "1" or nil, run_socks_instance = not no_run })
+ local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil, run_socks_instance = not no_run })
if outbound then
outbound.tag = outbound.tag .. ":" .. node.remarks
COMMON.default_outbound_tag, last_insert_outbound = set_outbound_detour(node, outbound, outbounds)
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm
index 39f37d82dd..57985d3876 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm
@@ -282,6 +282,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", dom_prefix + "reality_spiderX");
+ params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify");
}
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value;
@@ -290,6 +291,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += "&security=" + v_security;
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
+ params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
+ params += opt.query("ech", dom_prefix + "ech_config");
}
if (opt.get(dom_prefix + "shadowtls")?.checked) {
@@ -404,7 +407,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("path", dom_prefix + "ws_path");
if (v_type == "sing-box" && opt.get(dom_prefix + "ws_enableEarlyData").checked) {
var ws_maxEarlyData = opt.get(dom_prefix + "ws_maxEarlyData").value;
- params += "?ed=" + ws_maxEarlyData;
+ params += encodeURIComponent("?ed=" + ws_maxEarlyData);
}
} else if (v_transport === "h2") {
v_transport = "http";
@@ -440,7 +443,11 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
}
params += "&type=" + v_transport;
- params += opt.query("encryption", dom_prefix + "encryption");
+ if (v_type === "sing-box") {
+ params += "&encryption=none";
+ } else {
+ params += opt.query("encryption", dom_prefix + "encryption");
+ }
if (opt.get(dom_prefix + "tls").checked) {
var v_security = "tls";
@@ -453,6 +460,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", dom_prefix + "reality_spiderX");
+ params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify");
}
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value;
@@ -461,6 +469,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += "&security=" + v_security;
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
+ params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
+ params += opt.query("ech", dom_prefix + "ech_config");
}
params += "#" + encodeURI(v_alias.value);
@@ -520,6 +530,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", dom_prefix + "reality_spiderX");
+ params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify");
}
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value;
@@ -528,6 +539,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += "&security=" + v_security;
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
+ params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
+ params += opt.query("ech", dom_prefix + "ech_config");
}
params += "#" + encodeURI(v_alias.value);
if (params[0] == "&") {
@@ -958,6 +971,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'utls', true);
opt.set(dom_prefix + 'fingerprint', queryParam.fp);
}
+ opt.set(dom_prefix + 'ech', !!queryParam.ech);
+ opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
}
if (queryParam.security == "reality") {
@@ -973,6 +988,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'reality_publicKey', queryParam.pbk || '');
opt.set(dom_prefix + 'reality_shortId', queryParam.sid || '');
opt.set(dom_prefix + 'reality_spiderX', queryParam.spx || '');
+ opt.set(dom_prefix + 'use_mldsa65Verify', !!queryParam.pqv);
+ opt.set(dom_prefix + 'reality_mldsa65Verify', queryParam.pqv || '');
}
}
@@ -1061,6 +1078,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
}
}
if (dom_prefix === "ssrust_") {
+ opt.set(dom_prefix + 'plugin_enabled', true);
opt.set(dom_prefix + 'plugin', "shadow-tls");
let shadowtlsOpt = parseShadowTLSParams(queryParam["shadow-tls"]);
opt.set(dom_prefix + 'plugin_opts', shadowtlsOpt || "");
@@ -1335,6 +1353,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'utls', true);
opt.set(dom_prefix + 'fingerprint', queryParam.fp);
}
+ opt.set(dom_prefix + 'ech', !!queryParam.ech);
+ opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
}
if (queryParam.security == "reality") {
@@ -1350,6 +1370,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'reality_publicKey', queryParam.pbk || '');
opt.set(dom_prefix + 'reality_shortId', queryParam.sid || '');
opt.set(dom_prefix + 'reality_spiderX', queryParam.spx || '');
+ opt.set(dom_prefix + 'use_mldsa65Verify', !!queryParam.pqv);
+ opt.set(dom_prefix + 'reality_mldsa65Verify', queryParam.pqv || '');
}
}
@@ -1550,6 +1572,9 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
}
}
+ if ((!queryParam.security || queryParam.security == "") && queryParam.sni && queryParam.sni != "") {
+ queryParam.security = "tls";
+ }
if (queryParam.security) {
if (queryParam.security == "tls") {
opt.set(dom_prefix + 'tls', true);
diff --git a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
index 37c2fb3680..e00a676c6a 100644
--- a/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
+++ b/openwrt-passwall2/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
@@ -3,6 +3,8 @@ local api = require "luci.passwall2.api"
-%>
diff --git a/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po b/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po
index 750a52e3d2..794bf66cbc 100644
--- a/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po
+++ b/openwrt-passwall2/luci-app-passwall2/po/zh-cn/passwall2.po
@@ -343,7 +343,7 @@ msgstr "负载均衡策略"
msgid "Fallback Node"
msgstr "后备节点"
-msgid "Use Custome Probe URL"
+msgid "Use Custom Probe URL"
msgstr "使用自定义探测网址"
msgid "By default the built-in probe URL will be used, enable this option to use a custom probe URL."
@@ -940,8 +940,14 @@ msgstr "订阅网址"
msgid "Subscribe URL Access Method"
msgstr "订阅网址访问方式"
-msgid "Please input the subscription url first, save and submit before manual subscription."
-msgstr "请输入订阅网址保存应用后再手动订阅。"
+msgid "When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically."
+msgstr "新增订阅请先保存并应用后再手动订阅;如仅修改订阅地址,可直接手动订阅,系统将自动保存。"
+
+msgid "Please save and apply before manually subscribing."
+msgstr "请先保存并应用后再手动订阅。"
+
+msgid "Subscribe URL cannot be empty."
+msgstr "订阅网址不能为空。"
msgid "Subscribe via proxy"
msgstr "通过代理订阅"
@@ -1126,6 +1132,9 @@ msgstr "快速打开"
msgid "plugin"
msgstr "插件"
+msgid "Supports custom SIP003 plugins, Make sure the plugin is installed."
+msgstr "支持自定义 SIP003 插件,请确保插件已安装。"
+
msgid "opts"
msgstr "插件选项"
@@ -1547,10 +1556,10 @@ msgid "Protocol parameter. Enable length block encryption."
msgstr "协议参数。启用长度块加密。"
msgid "ECH Config"
-msgstr "ECH 密钥"
+msgstr "ECH 配置"
msgid "ECH Key"
-msgstr "ECH 配置"
+msgstr "ECH 密钥"
msgid "PQ signature schemes"
msgstr "后量子对等证书签名方案"
@@ -1585,6 +1594,12 @@ msgstr "分片间隔"
msgid "Fragmentation interval (ms)"
msgstr "分片间隔(ms)"
+msgid "Split handshake data into multiple TLS records for better censorship evasion. Low overhead. Recommended to enable first."
+msgstr "将握手数据拆分为多个 TLS 记录,提升抗封锁能力,几乎不增加延迟,建议优先启用。"
+
+msgid "Split handshake into multiple TCP segments. Enhances obfuscation. May increase delay. Use only if needed."
+msgstr "将 TLS 握手数据分为多个 TCP 包发送,提高伪装性,可能增加延迟,仅在封锁严重时使用。"
+
msgid "Noise"
msgstr "噪声"
diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config
index 98434175e1..ded4f16703 100644
--- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config
+++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/0_default_config
@@ -51,7 +51,7 @@ config global_rules
config global_app
option xray_file '/usr/bin/xray'
option hysteria_file '/usr/bin/hysteria'
- option singbox_file '/usr/bin/sing-box'
+ option sing_box_file '/usr/bin/sing-box'
config global_subscribe
option filter_keyword_mode '1'
diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh
index 87a1111390..89b4efbeea 100755
--- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh
+++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/app.sh
@@ -297,11 +297,11 @@ get_singbox_geoip() {
local geoip_code="$1"
local geoip_path=$(config_t_get global_singbox geoip_path)
[ -e "$geoip_path" ] || { echo ""; return; }
- local has_geoip_tools=$($(first_type $(config_t_get global_app singbox_file) sing-box) geoip | grep "GeoIP tools")
+ local has_geoip_tools=$($(first_type $(config_t_get global_app sing_box_file) sing-box) geoip | grep "GeoIP tools")
if [ -n "${has_geoip_tools}" ]; then
[ -f "${geoip_path}" ] && local geoip_md5=$(md5sum ${geoip_path} | awk '{print $1}')
local output_file="${TMP_PATH2}/geoip-${geoip_md5}-${geoip_code}.json"
- [ ! -f ${output_file} ] && $(first_type $(config_t_get global_app singbox_file) sing-box) geoip -f "${geoip_path}" export "${geoip_code}" -o "${output_file}"
+ [ ! -f ${output_file} ] && $(first_type $(config_t_get global_app sing_box_file) sing-box) geoip -f "${geoip_path}" export "${geoip_code}" -o "${output_file}"
case "$2" in
ipv4)
cat ${output_file} | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk -F '"' '{print $2}' | sed -e "/^$/d"
@@ -468,7 +468,7 @@ run_singbox() {
[ "$loglevel" = "warning" ] && loglevel="warn"
_extra_param="${_extra_param} -loglevel $loglevel"
- _extra_param="${_extra_param} -tags $($(first_type $(config_t_get global_app singbox_file) sing-box) version | grep 'Tags:' | awk '{print $2}')"
+ _extra_param="${_extra_param} -tags $($(first_type $(config_t_get global_app sing_box_file) sing-box) version | grep 'Tags:' | awk '{print $2}')"
[ -n "$flag" ] && pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1{print $1}' | xargs kill -9 >/dev/null 2>&1
[ -n "$flag" ] && _extra_param="${_extra_param} -flag $flag"
@@ -552,7 +552,7 @@ run_singbox() {
}
lua $UTIL_SINGBOX gen_config -node $node ${_extra_param} > $config_file
- ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" "${log_file}" run -c "$config_file"
+ ln_run "$(first_type $(config_t_get global_app sing_box_file) sing-box)" "sing-box" "${log_file}" run -c "$config_file"
}
run_socks() {
@@ -604,7 +604,7 @@ run_socks() {
sing-box)
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
local _extra_param="-local_http_address $bind -local_http_port $http_port"
}
[ -n "$relay_port" ] && _extra_param="${_extra_param} -server_host $server_host -server_port $server_port"
@@ -615,12 +615,12 @@ run_socks() {
}
[ -n "$no_run" ] && _extra_param="${_extra_param} -no_run 1"
lua $UTIL_SINGBOX gen_config -flag SOCKS_$flag -node $node -local_socks_address $bind -local_socks_port $socks_port ${_extra_param} > $config_file
- [ -n "$no_run" ] || ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" /dev/null run -c "$config_file"
+ [ -n "$no_run" ] || ln_run "$(first_type $(config_t_get global_app sing_box_file) sing-box)" "sing-box" /dev/null run -c "$config_file"
;;
xray)
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
local _extra_param="-local_http_address $bind -local_http_port $http_port"
}
[ -n "$relay_port" ] && _extra_param="${_extra_param} -server_host $server_host -server_port $server_port"
@@ -637,14 +637,23 @@ run_socks() {
[ -n "$no_run" ] || ln_run "$(first_type ssr-local)" "ssr-local" $log_file -c "$config_file" -v -u
;;
ss)
- lua $UTIL_SS gen_config -node $node -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $server_port -mode tcp_and_udp > $config_file
+ [ -n "$no_run" ] || {
+ local plugin_sh="${config_file%.json}_plugin.sh"
+ local _extra_param="-plugin_sh $plugin_sh"
+ }
+ lua $UTIL_SS gen_config -node $node -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $server_port -mode tcp_and_udp ${_extra_param} > $config_file
[ -n "$no_run" ] || ln_run "$(first_type ss-local)" "ss-local" $log_file -c "$config_file" -v
;;
ss-rust)
+ local _extra_param
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
- local _extra_param="-local_http_address $bind -local_http_port $http_port"
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
+ _extra_param="-local_http_address $bind -local_http_port $http_port"
+ }
+ [ -n "$no_run" ] || {
+ local plugin_sh="${config_file%.json}_plugin.sh"
+ _extra_param="${_extra_param:+$_extra_param }-plugin_sh $plugin_sh"
}
lua $UTIL_SS gen_config -node $node -local_socks_address $bind -local_socks_port $socks_port -server_host $server_host -server_port $server_port ${_extra_param} > $config_file
[ -n "$no_run" ] || ln_run "$(first_type sslocal)" "sslocal" $log_file -c "$config_file" -v
@@ -652,7 +661,7 @@ run_socks() {
hysteria2)
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
local _extra_param="-local_http_address $bind -local_http_port $http_port"
}
lua $UTIL_HYSTERIA2 gen_config -node $node -local_socks_address $bind -local_socks_port $socks_port -server_host $server_host -server_port $server_port ${_extra_param} > $config_file
@@ -666,7 +675,7 @@ run_socks() {
# http to socks
[ -z "$http_flag" ] && [ "$http_port" != "0" ] && [ -n "$http_config_file" ] && [ "$type" != "sing-box" ] && [ "$type" != "xray" ] && [ "$type" != "socks" ] && {
- local bin=$(first_type $(config_t_get global_app singbox_file) sing-box)
+ local bin=$(first_type $(config_t_get global_app sing_box_file) sing-box)
if [ -n "$bin" ]; then
type="sing-box"
lua $UTIL_SINGBOX gen_proto_config -local_http_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password > $http_config_file
@@ -688,9 +697,17 @@ socks_node_switch() {
local flag new_node
eval_set_val $@
[ -n "$flag" ] && [ -n "$new_node" ] && {
+ local prefix pf filename
+ # 结束 SS 插件进程
+ for prefix in "" "HTTP_"; do
+ pf="$TMP_PATH/${prefix}SOCKS_${flag}_plugin.pid"
+ [ -s "$pf" ] && kill -9 "$(head -n1 "$pf")" >/dev/null 2>&1
+ done
+
pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1
- rm -rf $TMP_PATH/SOCKS_${flag}*
- rm -rf $TMP_PATH/HTTP2SOCKS_${flag}*
+ for prefix in "" "HTTP_" "HTTP2"; do
+ rm -rf "$TMP_PATH/${prefix}SOCKS_${flag}"*
+ done
for filename in $(ls ${TMP_SCRIPT_FUNC_PATH}); do
cmd=$(cat ${TMP_SCRIPT_FUNC_PATH}/${filename})
@@ -1312,7 +1329,15 @@ stop() {
eval_cache_var
[ -n "$USE_TABLES" ] && source $APP_PATH/${USE_TABLES}.sh stop
delete_ip2route
- kill_all xray-plugin v2ray-plugin obfs-local shadow-tls
+ # 结束 SS 插件进程
+ # kill_all xray-plugin v2ray-plugin obfs-local shadow-tls
+ local pid_file pid
+ find "$TMP_PATH" -type f -name '*_plugin.pid' | while read -r pid_file; do
+ read -r pid < "$pid_file"
+ if [ -n "$pid" ]; then
+ kill -9 "$pid" >/dev/null 2>&1
+ fi
+ done
pgrep -f "sleep.*(6s|9s|58s)" | xargs kill -9 >/dev/null 2>&1
pgrep -af "${CONFIG}/" | awk '! /app\.sh|subscribe\.lua|rule_update\.lua|tasks\.sh|ujail/{print $1}' | xargs kill -9 >/dev/null 2>&1
unset V2RAY_LOCATION_ASSET
@@ -1402,7 +1427,7 @@ get_config() {
set_cache_var GLOBAL_DNSMASQ_CONF_PATH ${GLOBAL_ACL_PATH}/dnsmasq.d
XRAY_BIN=$(first_type $(config_t_get global_app xray_file) xray)
- SINGBOX_BIN=$(first_type $(config_t_get global_app singbox_file) sing-box)
+ SINGBOX_BIN=$(first_type $(config_t_get global_app sing_box_file) sing-box)
}
arg1=$1
diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh
index 709a21bfd3..dfb53da9d6 100755
--- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh
+++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh
@@ -1,13 +1,19 @@
#!/bin/sh
export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
+CONFIG=passwall2
listen_address=$1
listen_port=$2
server_address=$3
server_port=$4
-probe_file="/tmp/etc/passwall2/haproxy/Probe_URL"
+pgrep -af "${CONFIG}/" | awk '/app\.sh.*(start|stop)/ || /nftables\.sh/ || /iptables\.sh/ { found = 1 } END { exit !found }' && {
+ # 特定任务执行中不检测
+ exit 0
+}
+
+probe_file="/tmp/etc/${CONFIG}/haproxy/Probe_URL"
probeUrl="https://www.google.com/generate_204"
if [ -f "$probe_file" ]; then
firstLine=$(head -n 1 "$probe_file" | tr -d ' \t\n')
@@ -19,7 +25,7 @@ if /usr/bin/curl --help all | grep -q "\-\-retry-all-errors"; then
extra_params="${extra_params} --retry-all-errors"
fi
-status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout 3 --retry 1 --max-time 10 -w "%{http_code}" "${probeUrl}")
+status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout 3 --retry 2 --max-time 10 -w "%{http_code}" "${probeUrl}")
case "$status" in
200|204)
diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
index 85d81353fb..4434d8f2fb 100755
--- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
+++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
@@ -64,9 +64,12 @@ test_node() {
/usr/share/${CONFIG}/app.sh run_socks flag="test_node_${node_id}" node=${node_id} bind=127.0.0.1 socks_port=${_tmp_port} config_file=test_node_${node_id}.json
local curlx="socks5h://127.0.0.1:${_tmp_port}"
sleep 1s
+ # 结束 SS 插件进程
+ local pid_file="/tmp/etc/${CONFIG}/test_node_${node_id}_plugin.pid"
+ [ -s "$pid_file" ] && kill -9 "$(head -n 1 "$pid_file")" >/dev/null 2>&1
_proxy_status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x $curlx")
pgrep -af "test_node_${node_id}" | awk '! /socks_auto_switch\.sh/{print $1}' | xargs kill -9 >/dev/null 2>&1
- rm -rf "/tmp/etc/${CONFIG}/test_node_${node_id}.json"
+ rm -rf /tmp/etc/${CONFIG}/test_node_${node_id}*.*
if [ "${_proxy_status}" -eq 200 ]; then
return 0
fi
@@ -168,6 +171,11 @@ start() {
sleep 6s
continue
}
+ pgrep -af "${CONFIG}/" | awk '/app\.sh.*(start|stop)/ || /nftables\.sh/ || /iptables\.sh/ { found = 1 } END { exit !found }' && {
+ # 特定任务执行中不检测
+ sleep 6s
+ continue
+ }
touch $LOCK_FILE
backup_node=$(echo $backup_node | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
test_auto_switch "$backup_node"
diff --git a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
index a309eb905a..25754a664b 100755
--- a/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
+++ b/openwrt-passwall2/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
@@ -23,6 +23,7 @@ uci:revert(appname)
local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
+local has_ssr = api.is_finded("ssr-local") and api.is_finded("ssr-redir")
local has_singbox = api.finded_com("sing-box")
local has_xray = api.finded_com("xray")
local has_hysteria2 = api.finded_com("hysteria")
@@ -273,7 +274,7 @@ do
if node.balancing_node then
for k, node in pairs(node.balancing_node) do
currentNodes[#currentNodes + 1] = {
- log = false,
+ log = true,
node = node,
currentNode = node and uci:get_all(appname, node) or nil,
remarks = node,
@@ -321,7 +322,7 @@ do
if node.urltest_node then
for k, node in pairs(node.urltest_node) do
currentNodes[#currentNodes + 1] = {
- log = false,
+ log = true,
node = node,
currentNode = node and uci:get_all(appname, node) or nil,
remarks = node,
@@ -440,6 +441,10 @@ local function processData(szType, content, add_mode, add_from)
}
--ssr://base64(host:port:protocol:method:obfs:base64pass/?obfsparam=base64param&protoparam=base64param&remarks=base64remarks&group=base64group&udpport=0&uot=0)
if szType == 'ssr' then
+ if not has_ssr then
+ log("跳过 SSR 节点,因未安装 SSR 核心程序 shadowsocksr-libev。")
+ return nil
+ end
result.type = "SSR"
local dat = split(content, "/%?")
@@ -466,17 +471,13 @@ local function processData(szType, content, add_mode, add_from)
result.remarks = base64Decode(params.remarks)
elseif szType == 'vmess' then
local info = jsonParse(content)
- if has_singbox then
- result.type = 'sing-box'
- end
- if has_xray then
- result.type = 'Xray'
- end
if vmess_type_default == "sing-box" and has_singbox then
result.type = 'sing-box'
- end
- if vmess_type_default == "xray" and has_xray then
+ elseif vmess_type_default == "xray" and has_xray then
result.type = "Xray"
+ else
+ log("跳过 VMess 节点,因未适配到 VMess 核心程序,或未正确设置节点使用类型。")
+ return nil
end
result.alter_id = info.aid
result.address = info.add
@@ -593,7 +594,21 @@ local function processData(szType, content, add_mode, add_from)
return nil
end
elseif szType == "ss" then
- result.type = "SS"
+ if ss_type_default == "shadowsocks-libev" and has_ss then
+ result.type = "SS"
+ elseif ss_type_default == "shadowsocks-rust" and has_ss_rust then
+ result.type = 'SS-Rust'
+ elseif ss_type_default == "xray" and has_xray then
+ result.type = 'Xray'
+ result.protocol = 'shadowsocks'
+ result.transport = 'raw'
+ elseif ss_type_default == "sing-box" and has_singbox then
+ result.type = 'sing-box'
+ result.protocol = 'shadowsocks'
+ else
+ log("跳过 SS 节点,因未适配到 SS 核心程序,或未正确设置节点使用类型。")
+ return nil
+ end
--SS-URI = "ss://" userinfo "@" hostname ":" port [ "/" ] [ "?" plugin ] [ "#" tag ]
--userinfo = websafe-base64-encode-utf8(method ":" password)
@@ -623,8 +638,7 @@ local function processData(szType, content, add_mode, add_from)
local idx_pn = plugin_info:find(";")
if idx_pn then
result.plugin = plugin_info:sub(1, idx_pn - 1)
- result.plugin_opts =
- plugin_info:sub(idx_pn + 1, #plugin_info)
+ result.plugin_opts = plugin_info:sub(idx_pn + 1, #plugin_info)
else
result.plugin = plugin_info
end
@@ -681,19 +695,6 @@ local function processData(szType, content, add_mode, add_from)
result.method = method
result.password = password
- if ss_type_default == "shadowsocks-rust" and has_ss_rust then
- result.type = 'SS-Rust'
- end
- if ss_type_default == "xray" and has_xray then
- result.type = 'Xray'
- result.protocol = 'shadowsocks'
- result.transport = 'raw'
- end
- if ss_type_default == "sing-box" and has_singbox then
- result.type = 'sing-box'
- result.protocol = 'shadowsocks'
- end
-
if result.type ~= "Xray" then
result.method = (method:lower() == "chacha20-poly1305" and "chacha20-ietf-poly1305") or
(method:lower() == "xchacha20-poly1305" and "xchacha20-ietf-poly1305") or method
@@ -722,8 +723,7 @@ local function processData(szType, content, add_mode, add_from)
result.plugin = nil
result.plugin_opts = nil
end
- end
- if result.type == "sing-box" then
+ else
result.plugin_enabled = "1"
end
end
@@ -822,11 +822,17 @@ local function processData(szType, content, add_mode, add_from)
result.utls = "1"
result.fingerprint = params.fp
end
+ if params.ech and params.ech ~= "" then
+ result.ech = "1"
+ result.ech_config = params.ech
+ end
if params.security == "reality" then
result.reality = "1"
result.reality_publicKey = params.pbk or nil
result.reality_shortId = params.sid or nil
result.reality_spiderX = params.spx or nil
+ result.use_mldsa65Verify = (params.pqv and params.pqv ~= "") and "1" or nil
+ result.reality_mldsa65Verify = params.pqv or nil
end
end
params.allowinsecure = params.allowinsecure or params.insecure
@@ -863,6 +869,7 @@ local function processData(szType, content, add_mode, add_from)
end
if result.type == "SS-Rust" then
+ result.plugin_enabled = "1"
result.plugin = "shadow-tls"
result.plugin_opts = parseShadowTLSParams(params["shadow-tls"])
elseif result.type == "sing-box" then
@@ -885,10 +892,15 @@ local function processData(szType, content, add_mode, add_from)
elseif szType == "trojan" then
if trojan_type_default == "sing-box" and has_singbox then
result.type = 'sing-box'
+ result.protocol = 'trojan'
elseif trojan_type_default == "xray" and has_xray then
result.type = 'Xray'
+ result.protocol = 'trojan'
+ else
+ log("跳过 Trojan 节点,因未适配到 Trojan 核心程序,或未正确设置节点使用类型。")
+ return nil
end
- result.protocol = 'trojan'
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1049,17 +1061,13 @@ local function processData(szType, content, add_mode, add_from)
result.group = content.airport
result.remarks = content.remarks
elseif szType == "vless" then
- if has_singbox then
- result.type = 'sing-box'
- end
- if has_xray then
- result.type = 'Xray'
- end
if vless_type_default == "sing-box" and has_singbox then
result.type = 'sing-box'
- end
- if vless_type_default == "xray" and has_xray then
+ elseif vless_type_default == "xray" and has_xray then
result.type = "Xray"
+ else
+ log("跳过 VLESS 节点,因未适配到 VLESS 核心程序,或未正确设置节点使用类型。")
+ return nil
end
result.protocol = "vless"
local alias = ""
@@ -1197,11 +1205,17 @@ local function processData(szType, content, add_mode, add_from)
result.utls = "1"
result.fingerprint = params.fp
end
+ if params.ech and params.ech ~= "" then
+ result.ech = "1"
+ result.ech_config = params.ech
+ end
if params.security == "reality" then
result.reality = "1"
result.reality_publicKey = params.pbk or nil
result.reality_shortId = params.sid or nil
result.reality_spiderX = params.spx or nil
+ result.use_mldsa65Verify = (params.pqv and params.pqv ~= "") and "1" or nil
+ result.reality_mldsa65Verify = params.pqv or nil
end
end
@@ -1220,6 +1234,14 @@ local function processData(szType, content, add_mode, add_from)
end
end
elseif szType == 'hysteria' then
+ if has_singbox then
+ result.type = 'sing-box'
+ result.protocol = "hysteria"
+ else
+ log("跳过 Hysteria 节点,因未安装 Hysteria 核心程序 Sing-box。")
+ return nil
+ end
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1267,10 +1289,6 @@ local function processData(szType, content, add_mode, add_from)
result.hysteria_down_mbps = params.downmbps
result.hysteria_hop = params.mport
- if has_singbox then
- result.type = 'sing-box'
- result.protocol = "hysteria"
- end
elseif szType == 'hysteria2' or szType == 'hy2' then
local alias = ""
if content:find("#") then
@@ -1330,8 +1348,19 @@ local function processData(szType, content, add_mode, add_from)
if params["obfs-password"] or params["obfs_password"] then
result.hysteria2_obfs = params["obfs-password"] or params["obfs_password"]
end
+ else
+ log("跳过 Hysteria2 节点,因未适配到 Hysteria2 核心程序,或未正确设置节点使用类型。")
+ return nil
end
elseif szType == 'tuic' then
+ if has_singbox then
+ result.type = 'sing-box'
+ result.protocol = "tuic"
+ else
+ log("跳过 Tuic 节点,因未安装 Tuic 核心程序 Sing-box。")
+ return nil
+ end
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1384,11 +1413,15 @@ local function processData(szType, content, add_mode, add_from)
else
result.tls_allowInsecure = allowInsecure_default and "1" or "0"
end
- result.type = 'sing-box'
- result.protocol = "tuic"
elseif szType == "anytls" then
- result.type = 'sing-box'
- result.protocol = "anytls"
+ if has_singbox then
+ result.type = 'sing-box'
+ result.protocol = "anytls"
+ else
+ log("跳过 AnyTLS 节点,因未安装 AnyTLS 核心程序 Sing-box 1.12。")
+ return nil
+ end
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1422,9 +1455,12 @@ local function processData(szType, content, add_mode, add_from)
result.address = host_port
end
result.tls = "0"
+ if (not params.security or params.security == "") and params.sni and params.sni ~= "" then
+ params.security = "tls"
+ end
if params.security == "tls" or params.security == "reality" then
result.tls = "1"
- result.tls_serverName = (params.sni and params.sni ~= "") and params.sni or params.host
+ result.tls_serverName = params.sni
result.alpn = params.alpn
if params.fp and params.fp ~= "" then
result.utls = "1"
@@ -1536,7 +1572,9 @@ local function select_node(nodes, config, parentConfig)
if config.currentNode[".name"] then
for index, node in pairs(nodes) do
if node[".name"] == config.currentNode[".name"] then
- log('更新【' .. config.remarks .. '】匹配节点:' .. node.remarks)
+ if config.log == nil or config.log == true then
+ log('更新【' .. config.remarks .. '】匹配节点:' .. node.remarks)
+ end
server = node[".name"]
break
end
@@ -1704,6 +1742,9 @@ local function update_node(manual)
for _, config in pairs(CONFIG) do
if config.currentNodes and #config.currentNodes > 0 then
+ if config.remarks and config.currentNodes[1].log ~= false then
+ log('----【' .. config.remarks .. '】----')
+ end
for kk, vv in pairs(config.currentNodes) do
select_node(nodes, vv, config)
end
@@ -1816,7 +1857,7 @@ local execute = function()
do
local subscribe_list = {}
local fail_list = {}
- if arg[2] then
+ if arg[2] ~= "all" then
string.gsub(arg[2], '[^' .. "," .. ']+', function(w)
subscribe_list[#subscribe_list + 1] = uci:get_all(appname, w) or {}
end)
@@ -1826,6 +1867,8 @@ local execute = function()
end)
end
+ local manual_sub = arg[3] == "manual"
+
for index, value in ipairs(subscribe_list) do
local cfgid = value[".name"]
local remark = value.remark
@@ -1893,8 +1936,7 @@ local execute = function()
local raw_data = api.trim(stdout)
local old_md5 = value.md5 or ""
local new_md5 = luci.sys.exec("md5sum " .. tmp_file .. " 2>/dev/null | awk '{print $1}'"):gsub("\n", "")
- os.remove(tmp_file)
- if old_md5 == new_md5 then
+ if not manual_sub and old_md5 == new_md5 then
log('订阅:【' .. remark .. '】没有变化,无需更新。')
else
parse_link(raw_data, "2", remark, cfgid)
@@ -1905,6 +1947,7 @@ local execute = function()
end
end
allowInsecure_default = true
+ luci.sys.call("rm -f " .. tmp_file)
filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0"
filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {}
filter_keyword_keep_list_default = uci:get(appname, "@global_subscribe[0]", "filter_keep_list") or {}
@@ -1932,7 +1975,7 @@ if arg[1] then
log(debug.traceback())
log('发生错误, 正在恢复服务')
end)
- log('订阅完毕...')
+ log('订阅完毕...\n')
elseif arg[1] == "add" then
local f = assert(io.open("/tmp/links.conf", 'r'))
local raw = f:read('*all')
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt
index 4f384632bc..9ceebe987e 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.txt
@@ -63,7 +63,6 @@
14.204.0.0/15
14.208.0.0/12
16.2.142.0/23
-23.140.100.0/24
27.0.128.0/24
27.0.130.0/23
27.0.132.0/22
@@ -75,7 +74,6 @@
27.36.0.0/14
27.40.0.0/13
27.50.128.0/17
-27.54.224.0/19
27.98.224.0/19
27.106.128.0/18
27.106.204.0/22
@@ -90,6 +88,7 @@
27.192.0.0/11
27.224.0.0/14
31.56.124.0/24
+31.57.10.0/24
36.1.0.0/16
36.4.0.0/14
36.16.0.0/12
@@ -127,7 +126,6 @@
36.255.128.0/22
36.255.164.0/24
36.255.192.0/24
-36.255.194.0/24
38.111.220.0/23
39.64.0.0/11
39.96.0.0/13
@@ -205,11 +203,16 @@
42.242.0.0/15
42.244.0.0/14
42.248.0.0/15
+43.102.128.0/21
+43.102.136.0/22
+43.102.144.0/20
43.136.0.0/13
43.144.0.0/15
43.192.0.0/16
43.193.0.0/18
43.193.64.0/24
+43.194.0.0/20
+43.195.0.0/20
43.196.0.0/16
43.224.12.0/22
43.224.23.0/24
@@ -250,7 +253,7 @@
43.228.204.0/22
43.228.240.0/22
43.229.48.0/22
-43.229.184.0/22
+43.229.184.0/23
43.229.216.0/22
43.230.72.0/22
43.230.136.0/22
@@ -271,6 +274,7 @@
43.240.124.0/22
43.240.128.0/22
43.240.133.0/24
+43.240.136.0/22
43.240.156.0/22
43.240.192.0/21
43.240.200.0/23
@@ -280,11 +284,13 @@
43.241.16.0/22
43.241.48.0/24
43.241.50.0/23
+43.241.76.0/22
43.241.180.0/22
43.241.208.0/20
43.241.224.0/20
43.241.240.0/22
43.242.72.0/22
+43.242.84.0/22
43.242.96.0/22
43.242.152.0/21
43.242.164.0/22
@@ -312,6 +318,7 @@
43.247.196.0/22
43.247.244.0/22
43.247.248.0/22
+43.248.0.0/22
43.248.48.0/22
43.248.76.0/22
43.248.96.0/21
@@ -340,7 +347,6 @@
43.251.4.0/22
43.251.8.0/22
43.251.36.0/22
-43.251.100.0/22
43.251.244.0/22
43.252.48.0/24
43.254.0.0/22
@@ -373,6 +379,7 @@
43.255.212.0/22
43.255.224.0/21
44.30.15.0/24
+44.30.28.0/24
44.31.42.0/24
44.31.81.0/24
44.31.96.0/24
@@ -398,8 +405,6 @@
45.116.152.0/22
45.116.208.0/22
45.117.8.0/22
-45.117.68.0/24
-45.117.70.0/23
45.119.60.0/22
45.119.68.0/22
45.119.105.0/24
@@ -430,6 +435,7 @@
45.151.47.0/24
45.157.88.0/24
45.195.6.0/24
+45.202.64.0/22
45.202.209.0/24
45.202.210.0/23
45.202.212.0/24
@@ -515,7 +521,6 @@
49.112.0.0/13
49.120.0.0/14
49.128.203.0/24
-49.128.220.0/24
49.128.223.0/24
49.140.0.0/15
49.208.0.0/14
@@ -627,7 +632,8 @@
59.111.96.0/21
59.111.104.0/23
59.111.107.0/24
-59.111.108.0/22
+59.111.109.0/24
+59.111.111.0/24
59.111.112.0/21
59.111.128.0/20
59.111.144.0/24
@@ -651,7 +657,9 @@
59.111.232.0/23
59.111.236.0/24
59.111.238.0/23
-59.111.240.0/20
+59.111.240.0/22
+59.111.244.0/24
+59.111.248.0/21
59.151.0.0/17
59.152.32.0/24
59.152.36.0/24
@@ -727,18 +735,17 @@
72.163.240.0/23
72.163.248.0/22
74.114.51.0/24
+77.107.118.0/24
79.133.176.0/24
81.23.208.0/20
81.68.0.0/14
81.173.18.0/23
81.173.20.0/22
81.173.28.0/24
-82.26.131.0/24
82.156.0.0/15
84.54.2.0/23
85.237.205.0/24
87.254.207.0/24
-89.144.2.0/24
93.183.14.0/24
93.183.18.0/24
94.191.0.0/17
@@ -761,7 +768,6 @@
101.50.56.0/22
101.52.4.0/24
101.52.6.0/24
-101.52.52.0/24
101.52.112.0/21
101.52.124.0/22
101.52.128.0/20
@@ -833,6 +839,7 @@
101.237.128.0/20
101.240.0.0/14
101.245.0.0/22
+101.245.8.0/23
101.245.16.0/22
101.245.32.0/19
101.245.64.0/18
@@ -906,7 +913,9 @@
103.24.176.0/22
103.24.228.0/22
103.24.248.0/22
+103.25.20.0/22
103.25.24.0/22
+103.25.36.0/22
103.25.64.0/23
103.25.156.0/24
103.26.0.0/22
@@ -952,12 +961,14 @@
103.37.160.0/21
103.37.172.0/22
103.38.40.0/22
+103.38.76.0/22
103.38.84.0/22
103.38.92.0/23
103.38.116.0/22
103.38.224.0/22
103.38.232.0/22
103.38.252.0/23
+103.39.64.0/22
103.39.200.0/21
103.39.208.0/20
103.39.224.0/21
@@ -1005,6 +1016,7 @@
103.49.196.0/24
103.49.198.0/23
103.50.36.0/22
+103.50.253.0/24
103.51.62.0/23
103.52.104.0/23
103.52.172.0/22
@@ -1023,7 +1035,6 @@
103.56.152.0/22
103.56.184.0/22
103.57.12.0/22
-103.57.136.0/23
103.57.139.0/24
103.59.112.0/22
103.59.124.0/22
@@ -1068,7 +1079,6 @@
103.73.204.0/22
103.74.24.0/21
103.74.48.0/22
-103.74.126.0/24
103.75.104.0/22
103.75.152.0/22
103.76.60.0/22
@@ -1078,16 +1088,17 @@
103.77.72.0/22
103.77.92.0/22
103.77.132.0/22
+103.78.60.0/22
103.78.126.0/23
103.78.228.0/22
103.79.24.0/22
+103.79.120.0/22
103.79.200.0/22
103.81.4.0/22
103.81.48.0/22
103.81.72.0/22
103.81.123.0/24
103.81.200.0/22
-103.82.52.0/22
103.82.224.0/22
103.83.44.0/22
103.83.64.0/22
@@ -1098,7 +1109,6 @@
103.85.164.0/22
103.85.168.0/21
103.85.176.0/22
-103.85.224.0/22
103.87.132.0/22
103.87.180.0/22
103.88.32.0/21
@@ -1130,6 +1140,7 @@
103.97.60.0/24
103.97.62.0/23
103.97.112.0/24
+103.97.144.0/22
103.98.0.0/24
103.98.15.0/24
103.98.28.0/23
@@ -1171,11 +1182,13 @@
103.110.132.0/22
103.110.136.0/22
103.111.64.0/24
+103.111.172.0/22
103.113.4.0/22
103.114.100.0/22
103.114.158.0/23
103.114.212.0/23
103.114.236.0/22
+103.115.92.0/22
103.115.120.0/22
103.115.248.0/22
103.116.76.0/22
@@ -1193,6 +1206,7 @@
103.119.104.0/22
103.119.224.0/22
103.120.72.0/22
+103.120.88.0/22
103.120.224.0/22
103.121.52.0/22
103.121.164.0/23
@@ -1214,6 +1228,7 @@
103.132.80.0/23
103.132.212.0/23
103.133.128.0/23
+103.134.136.0/22
103.135.160.0/22
103.135.192.0/21
103.135.236.0/24
@@ -1238,7 +1253,6 @@
103.145.92.0/24
103.146.126.0/23
103.147.124.0/24
-103.149.110.0/23
103.149.181.0/24
103.149.242.0/24
103.149.244.0/22
@@ -1247,7 +1261,6 @@
103.150.164.0/23
103.150.212.0/24
103.151.148.0/23
-103.151.178.0/23
103.152.28.0/23
103.152.56.0/23
103.152.76.0/23
@@ -1290,7 +1303,7 @@
103.183.66.0/23
103.183.122.0/23
103.183.124.0/23
-103.183.218.0/24
+103.183.218.0/23
103.184.46.0/23
103.186.4.0/23
103.186.108.0/23
@@ -1395,7 +1408,6 @@
103.227.80.0/22
103.227.120.0/22
103.227.136.0/22
-103.227.228.0/22
103.228.12.0/22
103.228.136.0/22
103.228.160.0/22
@@ -1408,7 +1420,6 @@
103.229.216.0/21
103.229.236.0/22
103.230.110.0/23
-103.230.128.0/23
103.230.200.0/22
103.230.212.0/22
103.230.236.0/22
@@ -1458,13 +1469,16 @@
103.239.68.0/22
103.239.152.0/22
103.239.184.0/24
+103.239.187.0/24
103.239.192.0/22
103.239.204.0/22
103.239.224.0/22
103.239.244.0/22
+103.240.16.0/22
103.240.36.0/22
103.240.84.0/22
103.240.124.0/22
+103.240.244.0/22
103.241.95.0/24
103.241.208.0/23
103.242.128.0/24
@@ -1541,7 +1555,6 @@
106.2.100.0/22
106.2.104.0/21
106.2.112.0/21
-106.2.122.0/24
106.2.124.0/22
106.2.128.0/19
106.2.224.0/24
@@ -1853,8 +1866,7 @@
114.112.160.0/21
114.112.200.0/21
114.112.208.0/20
-114.113.16.0/20
-114.113.32.0/19
+114.113.63.0/24
114.113.64.0/18
114.113.144.0/20
114.113.196.0/22
@@ -1884,6 +1896,8 @@
115.28.0.0/15
115.31.64.0/22
115.32.0.0/19
+115.32.32.0/21
+115.32.56.0/21
115.44.0.0/14
115.48.0.0/12
115.84.0.0/18
@@ -1940,7 +1954,7 @@
116.85.0.0/22
116.85.13.0/24
116.85.14.0/23
-116.85.16.0/24
+116.85.16.0/23
116.85.64.0/20
116.85.240.0/20
116.90.80.0/20
@@ -1994,14 +2008,12 @@
116.198.0.0/18
116.198.64.0/21
116.198.72.0/22
-116.198.80.0/21
116.198.144.0/20
116.198.160.0/20
116.198.176.0/21
116.198.192.0/18
116.199.0.0/17
116.204.0.0/17
-116.204.132.0/22
116.205.0.0/16
116.207.0.0/16
116.208.0.0/14
@@ -2039,7 +2051,10 @@
117.48.216.0/23
117.48.218.0/24
117.48.220.0/22
-117.48.224.0/20
+117.48.224.0/21
+117.48.232.0/23
+117.48.234.0/24
+117.48.236.0/22
117.50.0.0/16
117.51.0.0/17
117.51.128.0/19
@@ -2055,9 +2070,9 @@
117.72.16.0/23
117.72.32.0/19
117.72.64.0/18
+117.72.144.0/20
117.72.160.0/19
117.72.192.0/19
-117.72.224.0/20
117.72.255.0/24
117.73.0.0/20
117.73.16.0/21
@@ -2136,6 +2151,21 @@
118.145.192.0/18
118.178.0.0/16
118.180.0.0/14
+118.184.0.0/22
+118.184.30.0/24
+118.184.40.0/21
+118.184.48.0/22
+118.184.52.0/24
+118.184.64.0/24
+118.184.66.0/23
+118.184.69.0/24
+118.184.76.0/22
+118.184.81.0/24
+118.184.82.0/23
+118.184.84.0/22
+118.184.92.0/22
+118.184.96.0/22
+118.184.104.0/22
118.184.128.0/17
118.186.0.0/19
118.186.32.0/24
@@ -2174,6 +2204,15 @@
118.192.70.0/24
118.192.96.0/19
118.193.96.0/19
+118.193.128.0/23
+118.193.138.0/24
+118.193.144.0/23
+118.193.152.0/22
+118.193.160.0/23
+118.193.162.0/24
+118.193.164.0/22
+118.193.176.0/24
+118.193.188.0/22
118.194.32.0/19
118.194.128.0/21
118.194.240.0/21
@@ -2386,7 +2425,11 @@
120.136.128.0/21
120.136.140.0/22
120.136.144.0/20
-120.136.160.0/19
+120.136.160.0/20
+120.136.176.0/21
+120.136.184.0/22
+120.136.188.0/23
+120.136.190.0/24
120.192.0.0/10
121.0.16.0/20
121.4.0.0/15
@@ -2442,7 +2485,8 @@
122.10.160.0/24
122.11.32.0/19
122.13.0.0/16
-122.14.0.0/18
+122.14.44.0/22
+122.14.62.0/24
122.14.192.0/18
122.48.0.0/16
122.49.8.0/21
@@ -2466,7 +2510,11 @@
122.112.0.0/20
122.112.32.0/19
122.112.64.0/19
-122.112.128.0/17
+122.112.132.0/22
+122.112.136.0/21
+122.112.144.0/20
+122.112.160.0/19
+122.112.192.0/18
122.114.0.0/16
122.115.0.0/20
122.115.32.0/19
@@ -2531,8 +2579,9 @@
123.4.0.0/14
123.8.0.0/13
123.49.192.0/23
+123.49.194.0/24
+123.49.224.0/24
123.49.229.0/24
-123.49.230.0/24
123.49.232.0/24
123.49.240.0/24
123.49.242.0/23
@@ -2585,7 +2634,7 @@
123.103.40.0/21
123.103.48.0/20
123.103.64.0/18
-123.108.89.0/24
+123.108.88.0/24
123.108.208.0/22
123.108.212.0/23
123.108.220.0/22
@@ -2641,7 +2690,6 @@
124.151.0.0/17
124.151.128.0/18
124.151.193.0/24
-124.151.194.0/24
124.151.224.0/19
124.152.0.0/16
124.160.0.0/13
@@ -2857,6 +2905,14 @@
154.8.128.0/17
154.19.43.0/24
154.38.104.0/22
+154.48.226.0/24
+154.48.231.0/24
+154.48.235.0/24
+154.48.236.0/22
+154.48.240.0/24
+154.48.247.0/24
+154.48.248.0/24
+154.48.250.0/23
154.72.42.0/24
154.72.44.0/24
154.72.47.0/24
@@ -2871,7 +2927,6 @@
154.208.160.0/21
154.208.172.0/23
154.213.4.0/23
-154.213.189.0/24
155.102.0.0/23
155.102.2.0/24
155.102.4.0/23
@@ -2882,13 +2937,9 @@
155.102.20.0/24
155.102.22.0/23
155.102.24.0/24
-155.102.27.0/24
+155.102.26.0/23
155.102.28.0/22
-155.102.32.0/22
-155.102.36.0/23
-155.102.39.0/24
-155.102.40.0/21
-155.102.48.0/20
+155.102.32.0/19
155.102.111.0/24
155.102.112.0/21
155.102.120.0/23
@@ -2913,6 +2964,7 @@
155.102.220.0/23
155.102.247.0/24
155.102.248.0/23
+155.102.253.0/24
155.126.176.0/23
156.59.108.0/24
156.59.202.0/23
@@ -2968,7 +3020,6 @@
161.163.28.0/23
161.189.0.0/16
161.207.0.0/16
-161.248.136.0/23
162.14.0.0/16
162.105.0.0/16
163.0.0.0/16
@@ -2980,6 +3031,7 @@
163.53.128.0/22
163.53.168.0/22
163.61.202.0/23
+163.61.214.0/24
163.125.0.0/16
163.142.0.0/16
163.177.0.0/16
@@ -3045,7 +3097,7 @@
163.181.196.0/22
163.181.200.0/21
163.181.209.0/24
-163.181.210.0/24
+163.181.210.0/23
163.181.212.0/23
163.181.214.0/24
163.181.216.0/21
@@ -3099,7 +3151,6 @@
175.44.0.0/16
175.46.0.0/15
175.102.0.0/19
-175.102.32.0/22
175.102.128.0/21
175.102.178.0/23
175.102.180.0/22
@@ -3145,6 +3196,7 @@
180.160.0.0/12
180.178.208.0/20
180.178.224.0/21
+180.178.232.0/22
180.178.248.0/21
180.184.0.0/21
180.184.8.0/23
@@ -3185,6 +3237,7 @@
182.48.112.0/21
182.50.8.0/21
182.50.112.0/20
+182.51.117.0/24
182.51.118.0/24
182.51.122.0/23
182.51.124.0/24
@@ -3230,6 +3283,7 @@
183.192.0.0/10
185.75.173.0/24
185.75.174.0/24
+185.78.105.0/24
185.234.212.0/24
188.131.128.0/17
192.55.46.0/24
@@ -3313,6 +3367,7 @@
202.61.88.0/22
202.62.112.0/22
202.63.160.0/20
+202.65.96.0/24
202.67.3.0/24
202.69.4.0/23
202.69.16.0/20
@@ -3554,7 +3609,7 @@
203.76.216.0/22
203.76.240.0/22
203.78.48.0/20
-203.79.0.0/20
+203.79.0.0/23
203.80.57.0/24
203.80.144.0/20
203.82.0.0/23
@@ -3592,15 +3647,12 @@
203.95.0.0/23
203.95.2.0/24
203.95.4.0/22
-203.95.96.0/22
-203.95.104.0/21
203.95.128.0/23
203.99.20.0/22
203.99.24.0/21
203.100.50.0/23
203.100.54.0/24
203.100.92.0/22
-203.100.96.0/19
203.100.192.0/20
203.104.32.0/20
203.107.1.0/24
@@ -3613,9 +3665,6 @@
203.107.72.0/21
203.107.80.0/21
203.107.96.0/23
-203.107.100.0/22
-203.107.104.0/22
-203.107.108.0/23
203.107.116.0/22
203.110.160.0/19
203.110.208.0/20
@@ -3628,7 +3677,6 @@
203.119.33.0/24
203.119.80.0/23
203.119.83.0/24
-203.119.85.0/24
203.119.114.0/23
203.119.128.0/19
203.119.160.0/24
@@ -3722,7 +3770,8 @@
203.223.21.0/24
204.13.175.0/24
205.198.19.0/24
-206.52.0.0/23
+206.52.0.0/22
+206.52.4.0/23
206.54.1.128/25
206.54.9.0/24
206.54.10.0/23
@@ -3978,7 +4027,8 @@
211.161.0.0/20
211.161.24.0/22
211.161.32.0/20
-211.161.60.0/22
+211.161.60.0/23
+211.161.62.0/24
211.161.97.0/24
211.161.101.0/24
211.161.102.0/23
@@ -4096,7 +4146,8 @@
219.233.0.0/16
219.234.0.0/21
219.234.16.0/20
-219.234.64.0/18
+219.234.80.0/20
+219.234.96.0/19
219.234.128.0/17
219.235.0.0/20
219.235.32.0/19
@@ -4135,7 +4186,10 @@
220.113.154.0/24
220.114.250.0/23
220.152.128.0/17
+220.154.0.0/20
+220.154.16.0/22
220.154.128.0/22
+220.154.140.0/24
220.154.144.0/24
220.160.0.0/12
220.176.0.0/14
@@ -4196,6 +4250,7 @@
221.13.0.0/16
221.14.0.0/15
221.122.0.0/16
+221.123.112.0/20
221.123.128.0/17
221.129.0.0/16
221.130.0.0/15
@@ -4246,8 +4301,7 @@
222.126.140.0/22
222.126.144.0/20
222.126.160.0/20
-222.126.178.0/23
-222.126.180.0/22
+222.126.176.0/21
222.126.184.0/22
222.126.192.0/22
222.126.196.0/23
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver
index 5f893bc20a..df0c5ad912 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip4.ver
@@ -1 +1 @@
-20250718035513
+20250808035959
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt
index 95e3740342..6ef9bd2686 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.txt
@@ -1,6 +1,7 @@
2001:250::/30
2001:254::/31
2001:256:100::/48
+2001:678:120::/48
2001:67c:ebc::/48
2001:7fa:5::/48
2001:c68::/32
@@ -12,7 +13,6 @@
2001:daa:6::/48
2001:dc7::/32
2001:dd8:1::/48
-2001:dd8:5::/48
2001:dd9::/48
2001:df0:ac40::/48
2001:df3:3a80::/48
@@ -151,7 +151,8 @@
2401:b400::/45
2401:b400:8::/47
2401:b400:11::/48
-2401:b400:14::/46
+2401:b400:14::/48
+2401:b400:16::/47
2401:b400:20::/47
2401:b680::/32
2401:be00::/32
@@ -170,6 +171,7 @@
2401:f860:88::/47
2401:f860:90::/47
2401:f860:93::/48
+2401:f860:94::/48
2401:f860:100::/40
2401:f860:f100::/40
2401:fa00:40::/43
@@ -337,7 +339,6 @@
2404:2280:1f0::/45
2404:2280:1f8::/46
2404:2280:1fd::/48
-2404:2280:1fe::/48
2404:2280:202::/47
2404:2280:204::/46
2404:2280:208::/46
@@ -350,6 +351,7 @@
2404:2280:21a::/48
2404:2280:221::/48
2404:2280:271::/48
+2404:2280:27a::/48
2404:2280:27c::/48
2404:3700::/48
2404:4dc0::/32
@@ -405,8 +407,6 @@
2405:3140:21::/48
2405:3140:31::/48
2405:3140:3a::/48
-2405:57c0::/47
-2405:57c0:100::/48
2405:66c0::/32
2405:68c0:21::/48
2405:6940::/48
@@ -440,11 +440,10 @@
2406:840:e201::/48
2406:840:e230::/44
2406:840:e260::/48
-2406:840:e2cb::/48
+2406:840:e2cf::/48
2406:840:e500::/47
2406:840:e621::/48
2406:840:e666::/47
-2406:840:e720::/44
2406:840:e80f::/48
2406:840:eb00::/46
2406:840:eb04::/47
@@ -533,6 +532,7 @@
2407:c080:5000::/37
2407:c080:6000::/36
2407:c080:8000::/36
+2407:d9c0::/32
2408:4000::/22
2408:8000::/48
2408:8000:2::/47
@@ -653,104 +653,151 @@
2408:8374::/30
2408:8378::/31
2408:837a::/32
-2408:8406::/40
+2408:8406::/42
+2408:8406:40::/43
+2408:8406:c0::/42
2408:8406:100::/41
2408:8406:180::/42
-2408:8406:c00::/40
+2408:8406:c00::/42
+2408:8406:c40::/43
+2408:8406:cc0::/42
2408:8406:d00::/41
2408:8406:d80::/42
-2408:8406:1800::/40
+2408:8406:1800::/42
+2408:8406:1840::/43
+2408:8406:18c0::/42
2408:8406:1900::/41
2408:8406:1980::/42
-2408:8406:2400::/40
+2408:8406:2400::/42
+2408:8406:2440::/43
+2408:8406:24c0::/42
2408:8406:2500::/41
2408:8406:2580::/42
-2408:8406:3000::/40
+2408:8406:3000::/42
+2408:8406:3040::/43
+2408:8406:30c0::/42
2408:8406:3100::/41
2408:8406:3180::/42
-2408:8406:3c00::/40
+2408:8406:3c00::/42
+2408:8406:3c40::/43
+2408:8406:3cc0::/42
2408:8406:3d00::/41
2408:8406:3d80::/42
-2408:8406:4800::/40
+2408:8406:4800::/42
+2408:8406:4840::/43
+2408:8406:48c0::/42
2408:8406:4900::/41
2408:8406:4980::/42
-2408:8406:5400::/40
+2408:8406:5400::/42
+2408:8406:5440::/43
+2408:8406:54c0::/42
2408:8406:5500::/41
2408:8406:5580::/42
-2408:8406:6000::/40
+2408:8406:6000::/42
+2408:8406:6040::/43
+2408:8406:60c0::/42
2408:8406:6100::/41
2408:8406:6180::/42
-2408:8406:6c00::/40
+2408:8406:6c00::/42
+2408:8406:6c40::/43
+2408:8406:6cc0::/42
2408:8406:6d00::/41
2408:8406:6d80::/42
-2408:8406:7800::/40
+2408:8406:7800::/42
+2408:8406:7840::/43
+2408:8406:78c0::/42
2408:8406:7900::/41
2408:8406:7980::/42
-2408:8406:8400::/40
+2408:8406:8400::/42
+2408:8406:8440::/43
+2408:8406:84c0::/42
2408:8406:8500::/41
2408:8406:8580::/42
-2408:8406:9000::/40
+2408:8406:9000::/42
+2408:8406:9040::/43
+2408:8406:90c0::/42
2408:8406:9100::/41
2408:8406:9180::/42
-2408:8406:9c00::/40
+2408:8406:9c00::/42
+2408:8406:9c40::/43
+2408:8406:9cc0::/42
2408:8406:9d00::/41
2408:8406:9d80::/42
-2408:8406:a800::/40
+2408:8406:a800::/42
+2408:8406:a840::/43
+2408:8406:a8c0::/42
2408:8406:a900::/41
2408:8406:a980::/42
-2408:8406:b400::/40
+2408:8406:b400::/42
+2408:8406:b440::/43
+2408:8406:b4c0::/42
2408:8406:b500::/41
2408:8406:b580::/42
2408:8407:500::/43
2408:8409::/40
-2408:8409:120::/43
-2408:8409:140::/42
+2408:8409:100::/41
2408:8409:180::/42
+2408:8409:1c0::/43
2408:8409:c00::/40
2408:8409:d00::/41
2408:8409:d80::/42
+2408:8409:dc0::/43
2408:8409:1800::/40
2408:8409:1900::/41
2408:8409:1980::/42
+2408:8409:19c0::/43
2408:8409:2400::/40
2408:8409:2500::/41
2408:8409:2580::/42
+2408:8409:25c0::/43
2408:8409:3000::/40
2408:8409:3100::/41
2408:8409:3180::/42
+2408:8409:31c0::/43
2408:8409:3c00::/40
2408:8409:3d00::/41
2408:8409:3d80::/42
+2408:8409:3dc0::/43
2408:8409:4800::/40
2408:8409:4900::/41
2408:8409:4980::/42
+2408:8409:49c0::/43
2408:8409:5400::/40
2408:8409:5500::/41
2408:8409:5580::/42
+2408:8409:55c0::/43
2408:8409:6000::/40
2408:8409:6100::/41
2408:8409:6180::/42
+2408:8409:61c0::/43
2408:8409:6c00::/40
2408:8409:6d00::/41
2408:8409:6d80::/42
+2408:8409:6dc0::/43
2408:8409:7800::/40
2408:8409:7900::/41
2408:8409:7980::/42
+2408:8409:79c0::/43
2408:8409:8400::/40
2408:8409:8500::/41
2408:8409:8580::/42
+2408:8409:85c0::/43
2408:8409:9000::/40
2408:8409:9100::/41
2408:8409:9180::/42
+2408:8409:91c0::/43
2408:8409:9c00::/40
2408:8409:9d00::/41
2408:8409:9d80::/42
+2408:8409:9dc0::/43
2408:8409:a800::/40
2408:8409:a900::/41
2408:8409:a980::/42
+2408:8409:a9c0::/43
2408:8409:b400::/40
2408:8409:b500::/41
2408:8409:b580::/42
+2408:8409:b5c0::/43
2408:840c::/40
2408:840c:200::/40
2408:840c:400::/40
@@ -1140,7 +1187,6 @@
2602:f93b:400::/38
2602:f9ba:a8::/48
2602:f9ba:10c::/48
-2602:fd92:cc0::/44
2602:feda:182::/47
2602:feda:1bf::/48
2602:feda:1d1::/48
@@ -1191,9 +1237,8 @@
2a06:1180:1000::/48
2a06:3605::/32
2a06:3606::/31
-2a06:9f81:4600::/44
+2a06:9f81:4600::/43
2a06:9f81:4640::/44
-2a06:9f81:4660::/44
2a06:a005:260::/43
2a06:a005:280::/43
2a06:a005:2a0::/44
@@ -1206,9 +1251,10 @@
2a09:b280:ff81::/48
2a09:b280:ff83::/48
2a09:b280:ff84::/47
-2a0a:2840::/30
+2a0a:2840:20::/43
+2a0a:2840:2000::/48
+2a0a:2842::/32
2a0a:2845:aab8::/46
-2a0a:2845:d647::/48
2a0a:2846::/48
2a0a:6040:ec00::/40
2a0a:6044:6600::/40
@@ -1216,10 +1262,8 @@
2a0b:2542::/48
2a0b:4340:a6::/48
2a0b:4e07:b8::/47
-2a0c:9a40:84e0::/48
2a0c:9a40:9e00::/43
2a0c:b641:571::/48
-2a0e:97c0:550::/44
2a0e:97c0:83f::/48
2a0e:9b00::/29
2a0e:aa01:1fff::/48
@@ -1236,6 +1280,7 @@
2a0e:aa07:e039::/48
2a0e:aa07:e044::/48
2a0e:aa07:e151::/48
+2a0e:aa07:e155::/48
2a0e:aa07:e160::/47
2a0e:aa07:e162::/48
2a0e:aa07:e16a::/48
@@ -1256,7 +1301,6 @@
2a0e:b107:740::/44
2a0e:b107:c10::/48
2a0e:b107:dce::/48
-2a0e:b107:16b0::/44
2a0e:b107:178d::/48
2a0e:b107:178e::/48
2a0f:5707:ac00::/47
@@ -1274,8 +1318,6 @@
2a0f:7803:fe81::/48
2a0f:7803:fe82::/48
2a0f:7d07::/32
-2a0f:85c1:816::/48
-2a0f:85c1:b3a::/48
2a0f:85c1:ba5::/48
2a0f:9400:6110::/48
2a0f:9400:7700::/48
@@ -1283,8 +1325,12 @@
2a10:2f00:15a::/48
2a10:cc40:190::/48
2a10:ccc0:d00::/46
-2a10:ccc0:d0a::/48
+2a10:ccc0:d0a::/47
2a10:ccc0:d0c::/47
+2a10:ccc6:66c6::/48
+2a10:ccc6:66c9::/48
+2a10:ccc6:66ca::/48
+2a10:ccc6:66cd::/48
2a12:f8c3::/36
2a13:1800::/48
2a13:1800:10::/48
@@ -1296,16 +1342,15 @@
2a13:a5c7:1800::/40
2a13:a5c7:2100::/48
2a13:a5c7:2102::/48
-2a13:a5c7:2110::/48
2a13:a5c7:2121::/48
2a13:a5c7:2803::/48
2a13:a5c7:3100::/43
+2a13:a5c7:31a0::/43
2a13:aac4:f000::/44
2a14:7c0:4a01::/48
2a14:4c41::/32
2a14:67c1:20::/44
2a14:67c1:70::/47
-2a14:67c1:73::/48
2a14:67c1:74::/48
2a14:67c1:702::/47
2a14:67c1:704::/48
@@ -1315,12 +1360,11 @@
2a14:67c1:a024::/48
2a14:67c1:a02a::/48
2a14:67c1:a02f::/48
-2a14:67c1:a040::/48
+2a14:67c1:a040::/47
2a14:67c1:a061::/48
2a14:67c1:a064::/48
-2a14:67c1:a090::/48
-2a14:67c1:a092::/47
-2a14:67c1:a095::/48
+2a14:67c1:a090::/46
+2a14:67c1:a094::/47
2a14:67c1:a099::/48
2a14:67c1:a100::/43
2a14:67c1:b000::/48
@@ -1332,14 +1376,15 @@
2a14:67c1:b107::/48
2a14:67c1:b130::/47
2a14:67c1:b132::/48
-2a14:67c1:b4d0::/44
+2a14:67c1:b4c0::/45
2a14:67c1:b4e0::/43
2a14:67c1:b500::/48
2a14:67c1:b561::/48
2a14:67c1:b563::/48
2a14:67c1:b566::/48
2a14:67c1:b582::/48
-2a14:67c5:1100::/40
+2a14:67c1:b588::/47
+2a14:67c1:b590::/48
2a14:67c5:1900::/40
2a14:7580:9200::/40
2a14:7580:9400::/39
@@ -1349,7 +1394,6 @@
2a14:7580:fe00::/40
2a14:7581:3100::/40
2a14:7581:9010::/44
-2a14:7584:9000::/36
2c0f:f7a8:8011::/48
2c0f:f7a8:8050::/48
2c0f:f7a8:805f::/48
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver
index 5f893bc20a..df0c5ad912 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_ip6.ver
@@ -1 +1 @@
-20250718035513
+20250808035959
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt
index 5f6453d643..bc8b2fc7c2 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.txt
@@ -127,19 +127,16 @@
016sf.com
018520.com
019103.com
-01amlink.site
01bzw.us
01bzw.xyz
01caijing.com
01dou.com
-01hklink.site
01home.com
01hour.com
01hr.com
01isp.com
01isp.net
01jinhua.com
-01jplink.site
01jzw.com
01ki.com
01p.com
@@ -147,7 +144,6 @@
01skjj.com
01studio.cc
01teacher.com
-01w.com
01wb.com
01yo.com
01yuanma.com
@@ -179,7 +175,6 @@
021-zszx.com
021.com
021.net
-0210l.com
0214.com
02156506666.net
02163.com
@@ -225,7 +220,6 @@
023dns.com
023fyy.com
023gmdk.com
-023sm.com
023up.com
023xfyy.com
023xiaoyuan.com
@@ -345,7 +339,6 @@
02yc.com
030303.com
030mall.com
-0310.co
0310it.com
0311.cc
03118888.com
@@ -356,7 +349,6 @@
0316366.com
03167.com
0316yun.com
-0318gbw.com
0328.com
033.com
033033.com
@@ -379,11 +371,9 @@
0371wang.com
037201.com
037398.com
-0376-8777777.com
0377auto.com
0378zz.com
0379home.com
-0379pfw.com
0379wan.com
0391fc.com
03964.com
@@ -499,10 +489,8 @@
0537yz.com
0539fc.com
053c.com
-054057.com
0543bbs.com
0543hr.com
-0543tuangou.com
054400.com
0546fdc.com
0546tx.com
@@ -531,7 +519,6 @@
0571crm.com
0571gszc.com
0571nh.com
-0571ok.com
0571pu.com
0571zp.com
0572h.com
@@ -578,7 +565,6 @@
0595job.com
0595qz.com
0595rc.com
-0595zf.com
0596fc.com
0597kk.com
0597music.com
@@ -589,7 +575,6 @@
0598rc.com
0598yu.com
0599yx.com
-05bk.com
05bq.com
05idc.com
05info.com
@@ -703,7 +688,6 @@
0755bdqn.com
0755bzf.com
0755caibao.com
-0755car.com
0755cts.com
0755fm.com
0755gty.com
@@ -737,7 +721,6 @@
0762uu.com
0763f.com
076650.com
-0768.gd
0768000.com
0769auto.com
0769che.com
@@ -786,7 +769,6 @@
0791look.com
0791quanquan.com
0791qzw.com
-07928888.xyz
0792jj.net
0792ju.com
0792lsly.com
@@ -829,7 +811,6 @@
0838.com
0838che.com
0839zp.com
-08447.vip
085.com
0852diaoyu.com
0853rc.com
@@ -930,13 +911,14 @@
0he0.com
0hgame.com
0i-i0.com
+0jpf7u.com
0ka.com
0kee.com
0kkkkkt.com
+0ms.one
0nu2yo.com
0pdsa.icu
0r17374.com
-0rg.pw
0rl.cc
0rz.ltd
0s8s.com
@@ -1146,10 +1128,8 @@
103153.com
10333.com
10349.com
-10419.net
1050qm.com
105mr.com
-106.com
10639888.com
1065m.com
10666114.net
@@ -1170,7 +1150,6 @@
109ya.com
10bests.com
10fang.com
-10futu.com
10gjkj.com
10gt.com
10guoying.com
@@ -1189,7 +1168,6 @@
10soo.com
10tianqi.com
10vps.com
-10xiang.net
10yan.com
110.com
11000011.com
@@ -1213,7 +1191,6 @@
111867.com
1118cctv.ltd
111com.net
-111g.com
111golf.com
111ppp999kkk.com
111tt.icu
@@ -1293,6 +1270,7 @@
115meta.com
115seo.com
115vod.com
+115wg.com
115zb.com
1163.com
1166.com
@@ -1316,7 +1294,6 @@
118inns.com
118jm.com
118pan.com
-118pc.com
118study.com
118ttc.com
118wa.com
@@ -1351,7 +1328,6 @@
11sun.com
11td123.com
11wow.com
-11wyx.com
11xotn7p.com
11yinyuan.com
11zhang.com
@@ -1372,6 +1348,7 @@
120jxxh.com
120kid.com
120kq.com
+120naotan.com
120scp.com
120sg.com
120shgc.com
@@ -1386,6 +1363,7 @@
12120.net
12123.com
121314.com
+121588.com
121ask.com
121down.com
121mai.com
@@ -1424,8 +1402,10 @@
12333si.com
12333tc.com
123366.xyz
+1233dns.com
1234.me
12341288.com
+1234567.com
123456edu.com
123456wz.com
12345b.com
@@ -1468,7 +1448,6 @@
123baofeng.com
123bo.com
123boligang.com
-123chufa.com.hk
123ds.org
123du.cc
123ems.com
@@ -1547,7 +1526,6 @@
128qd.com
128sy.com
128uu.com
-12933v.com
12988.net
129t.com
12dzx.com
@@ -1599,7 +1577,6 @@
135031.com
135139.net
135309.com
-1353j.com
135650.com
13567.com
1356789.com
@@ -1610,12 +1587,12 @@
135e.com
135editor.com
135edu.com
-135fa.com
135plat.com
135yuedu.com
136.com
1360.com
136136.com
+1362-rfwi.cc
13636.com
1366.com
13667703999.com
@@ -1757,7 +1734,6 @@
15982.com
159shouji.com
15bl.com
-15cy.org
15gg.com
15gift.com
15hr.com
@@ -1930,6 +1906,7 @@
16bus.net
16buzhi.com
16c1.com
+16ceshi.com
16ds.com
16fan.com
16first.com
@@ -2031,7 +2008,6 @@
175sf.com
175wan.com
175yo.com
-176207.com
17666.mobi
1766bbs.com
17673.com
@@ -2041,7 +2017,6 @@
176web.net
1773.com
1778.com
-177o.com
177xfb.com
178.com
178.net
@@ -2123,6 +2098,7 @@
17guagua.com
17gwx.com
17haibao.com
+17hc.com
17house.com
17hpl.com
17huahua.com
@@ -2140,7 +2116,6 @@
17jzt.com
17k.com
17kan.cc
-17kf.cc
17kgk.com
17kjs.com
17koko.com
@@ -2350,7 +2325,6 @@
18art.art
18art.com
18av.com
-18chonglou.com
18dao.info
18daxue.com
18dx.com
@@ -2409,7 +2383,6 @@
1949idc.com
194nb.com
195155.com
-195855.com
195idc.com
196g.com
197.com
@@ -2432,7 +2405,6 @@
1987yp.com
1988.tv
19888.tv
-1988zixun.com
198game.com
198game.net
1990i.com
@@ -2507,7 +2479,6 @@
1f11.com
1fangchan.com
1fatong.com
-1fenda.com
1fengxin.xyz
1fenlei.com
1flash.net
@@ -2544,6 +2515,7 @@
1j8.net
1jbest.com
1jiesong.com
+1jkbie336689.com
1jok.icu
1ju.com
1juhao.com
@@ -2580,11 +2552,11 @@
1menjin.com
1mfg.com
1miba.com
-1mirrors.com
1mishu.com
1mit.com
1mjz.com
1mm8.com
+1mmbie336689.com
1mmed.com
1more.com
1mpi.com
@@ -2611,7 +2583,6 @@
1qia.com
1qianbao.com
1qianbao.net
-1qibi.com
1qirun.com
1qishu.com
1qit.com
@@ -2632,7 +2603,6 @@
1st56.com
1stacks.net
1stchip.com
-1stjc.com
1styan.com
1szq.com
1t.gs
@@ -2675,7 +2645,6 @@
1yyg.com
1zhangdan.com
1zhanshou.com
-1zhantai.com
1zhao.org
1zhe.com
1zhengji.com
@@ -2685,7 +2654,6 @@
1zjob.com
1zr.com
1zu.com
-1zw.com
2-33.com
2-class.com
2-mm.net
@@ -2717,10 +2685,8 @@
201061.com
201201.com
2012jh.com
-2012seo.com
20130123.com
201314520.net
-2013sh.com
2014.mobi
20150.net
201551.com
@@ -2738,7 +2704,6 @@
201g.com
202014.xyz
202030.com
-2021.com
202271.xyz
2022cdnpl.com
2023.com
@@ -2753,11 +2718,14 @@
2049baby.com
2050life.com
206zz.com
+207xz.com
2080ly.com
2093hd.com
2099xs.com
20fl.com
20g0.com
+20images10.com
+20images7.com
20ju.com
20kf.com
20on.com
@@ -2773,7 +2741,6 @@
210997.com
210z.com
2113.com
-2113s.com
2114.com
2115.com
211600.com
@@ -2791,7 +2758,6 @@
21263.net
212ehae.fun
2133.com
-21335.club
2133bbs.com
21373.com
2144.com
@@ -2903,7 +2869,6 @@
21xfbd.com
21xianhua.com
21xl.info
-21xrx.com
21xuema.com
21yangjie.com
21yibiao.com
@@ -2930,8 +2895,6 @@
222tt.icu
222wy333bb.com
22336699.xyz
-2234p.com
-223600.com
2238202.com
2239.com
223969ufy.com
@@ -2982,7 +2945,6 @@
22tj.com
22vape.com
22vd.com
-22zw.com
2300sjz.com
230890.com
231083.com
@@ -3148,7 +3110,6 @@
25rk.com
25tmw.com
25un.com
-25w1.com
25wy.com
25xg.com
25xianbao.com
@@ -3210,7 +3171,6 @@
272955.com
27399.com
273u.com
-274500.com
27492.com
275.com
2755005.com
@@ -3218,6 +3178,7 @@
27813000.com
278838mcu.com
278wan.com
+279.tv
279love.com
279tt.com
279wo.com
@@ -3246,8 +3207,6 @@
2848168.com
28493.com
2850.com
-2853x.com
-2857t.com
2858999.com
285u.com
286sy.com
@@ -3278,7 +3237,6 @@
293.net
294041.com
29592.net
-29663.com
296u.com
29797.com
2980.com
@@ -3361,7 +3319,6 @@
2liang.net
2ll.co
2loveyou.com
-2lvj.com
2m2j.com
2m3m.com
2ma2.com
@@ -3474,7 +3431,6 @@
312000.net
31260939.com
312green.com
-313.com
313033.com
3131yx.com
313515.com
@@ -3546,7 +3502,6 @@
31xj.com
31xs.net
31yarn.com
-31yj.com
31yr.com
31zhi5f.xyz
320921.com
@@ -3619,6 +3574,7 @@
333.com
333056.com
33315.com
+333232.xyz
333333.com
333333.org
3335665.com
@@ -3793,7 +3749,6 @@
35pic.com
35q.com
35sf.com
-35vc.com
35xss.com
35zww.com
36-7.com
@@ -3844,7 +3799,6 @@
360doc1.net
360doc18.net
360doc2.net
-360doc21.net
360doc25.net
360doc4.net
360doc7.net
@@ -3975,6 +3929,7 @@
360zhyx.com
360zmr.com
360zqaq.com
+360zqf.com
360zuowen.com
360zuqiu.com
36130.com
@@ -3992,6 +3947,7 @@
363.com
363.net
363120.com
+363210.com
363322014.com
3636.tech
363635.com
@@ -4103,7 +4059,6 @@
36612345.com
3663.com
366300.com
-36657.cc
366666.net
36683.com
3669yx.com
@@ -4158,7 +4113,6 @@
3710167.com
37163.com
371bus.com
-371house.com
371love.com
37201.com
3721520.com
@@ -4265,7 +4219,6 @@
3937.com
3939339.com
394394.com
-3952j.com
39655.com
3975.com
3975ad.com
@@ -4312,7 +4265,6 @@
3aok.com
3apz.com
3aqj.com
-3aqyzs.com
3avox.com
3b2o.com
3bag.ru
@@ -4366,6 +4318,7 @@
3dnew.com
3doe.com
3dqvcli.xyz
+3drrr.com
3dsdce.com
3dsjw.com
3dsnail.com
@@ -4387,8 +4340,10 @@
3elife.net
3etimes.com
3eyes.org
+3fahudong.com
3fang.com
3fantizi.com
+3fcl8.net
3fda.com
3fzipper.com
3g-edu.org
@@ -4503,6 +4458,7 @@
3swg.com
3thiku.com
3tilabs.com
+3tinkers.com
3tmall.com
3treesgroup.com
3tsmh.com
@@ -4625,7 +4581,6 @@
400cx.com
400dianhua.com
400gb.com
-400gk.com
400ja.com
400jz.com
400kaoyan.vip
@@ -4643,12 +4598,13 @@
404wan.com
404youxi.com
405400.com
-406yx.com
407wan.com
4080517.com
408399.com
408399.net
40images10.com
+40images15.com
+40images16.com
40images8.com
40manhua.com
40sishi.com
@@ -4680,7 +4636,6 @@
4234cdn.com
42353.com
423down.com
-4241x.com
4243.net
425300.co
425yx.com
@@ -4747,7 +4702,6 @@
444888qq.com
44552121.com
44629.com
-4473n.com
44749.net
4480.cc
4484.win
@@ -4835,6 +4789,7 @@
49363.com
4937711.com
4948.com
+495.cc
495495.com
49644913.com
497-img.com
@@ -4932,7 +4887,6 @@
4xiaoshuo.info
4xseo.com
4xx.me
-4y2rl.cc
4y4.net
4ye.cc
4yt.net
@@ -5008,7 +4962,6 @@
510hb.com
510xds.com
510you.com
-511.la
51110.com
51119.com
5117.com
@@ -5106,7 +5059,6 @@
51870.com
5187g.com
5188.com
-5188jc.com
5188yy.com
518ad.com
518doc.com
@@ -5164,7 +5116,6 @@
51buy.com
51bxg.com
51bzi.com
-51cacg.com
51caiyou.com
51callcenter.com
51callu.net
@@ -5338,7 +5289,6 @@
51hicard.com
51hika.com
51hjk.com
-51hkx.com
51hlife.com
51hlife.net
51homemoney.com
@@ -5350,7 +5300,6 @@
51huanhuan.com
51hunningtu.com
51huoyou.com
-51hvac.com
51hwzy.com
51ibm.com
51ican.com
@@ -5530,7 +5479,6 @@
51rumo.com
51rxzc.com
51rz.org
-51rzzx.com
51sai.com
51sanhu.com
51sao.net
@@ -5611,7 +5559,6 @@
51trust.com
51tuiyi.com
51tunhuo.com
-51tuz.com
51tv.com
51tv.net
51tvbao.com
@@ -5632,11 +5579,11 @@
51vv.net
51vv2.com
51w.co
-51wan.com
51wangdai.com
51wangming.com
51wangpi.com
51wanquan.com
+51wanxue.com
51wcad.com
51wcity.com
51web.com
@@ -5786,7 +5733,6 @@
520way.com
520xiazai.com
520xp.com
-520xst.com
520xy8.com
520yidui.com
520z-2.com
@@ -5840,16 +5786,13 @@
526net.com
527100.com
52733999.com
-527578.com
5277.com
527fgame.com
527ice.com
527meeting.com
-527pk.com
527ss.com
528045.com
5281.net
-5281520.com
52841819.com
528500.com
528529.com
@@ -5952,6 +5895,7 @@
52jianpan.com
52jiaoshi.com
52jiaozhou.com
+52jiawei.com
52jingsai.com
52jinhu.com
52jisu.com
@@ -5986,9 +5930,9 @@
52mba.com
52meirong.com
52mengdong.com
+52met.com
52mhw.com
52miji.com
-52miniapps.com
52mip.com
52ml.net
52mqbiao.com
@@ -6111,12 +6055,9 @@
52zx.net
52zxw.com
52zy.com
-52zzl.com
-530.co
5300tv.com
5306.com
5308999.com
-53111xx.com
531314.com
53155.vip
531pool.com
@@ -6144,6 +6085,8 @@
537images13.com
537images20.com
537images22.com
+537images41.com
+537images42.com
537images5.com
537images7.com
538618.com
@@ -6205,7 +6148,6 @@
54pictu.com
54qj.com
54seaman.com
-54sh.com
54traveler.com
54tup.com
54watch.com
@@ -6244,7 +6186,6 @@
555bb999ww.com
555dyds.com
555edu.net
-555gk.com
555tg6s98w9d8sw.com
555yst.com
5566.net
@@ -6304,8 +6245,6 @@
56156.com
5618.co
5629.com
-563337.com
-5636.com
56360.com
564.cc
5648.cc
@@ -6427,7 +6366,6 @@
580eda.net
580jz.net
580k.com
-580plan.com
580tequan.com
58161.com
58188.com
@@ -6438,7 +6376,6 @@
583316.com
583go.com
585227ybn.com
-58553v.com
5858.com
5858xs.com
58611.net
@@ -6446,6 +6383,7 @@
5866.com
5867yh.com
586jz.com
+587image.com
5884.com
588589.com
5888.tv
@@ -6467,7 +6405,6 @@
58cgg.com
58chaiyou.com
58che.com
-58chxf.com
58cloud.com
58coin.com
58corp.com
@@ -6508,7 +6445,6 @@
58q.org
58q8.com
58qz.com
-58school.com
58shangban.com
58shuz.com
58supin.com
@@ -6527,7 +6463,6 @@
58xinrui.com
58xs.com
58xs.la
-58xs.tw
58xueche.com
58xuexi.com
58yaoji.com
@@ -6549,7 +6484,6 @@
5918656.com
5918dyw.com
591918.com
-591change.com
591con.com
591hx.com
591master.com
@@ -6567,6 +6501,7 @@
592zn.com
59370.com
5945i.com
+595.bet
5951835ccc.com
59519.com
595818.com
@@ -6585,11 +6520,9 @@
599.com
5999.tv
5999218ccc.com
-599ku.com
599x.com
59b2b.com
59baike.com
-59di.com
59dun.com
59hi.com
59iedu.com
@@ -6625,6 +6558,7 @@
5biying.com
5bjm.com
5brxi.icu
+5c84i.net
5ccic.com
5cda.com
5ce.com
@@ -6642,7 +6576,6 @@
5dfsd2.com
5dgz.com
5ding.com
-5djbb.com
5dmail.net
5dplay.net
5ds.com
@@ -6782,6 +6715,7 @@
5radar.com
5rc.com
5read.com
+5rfh44h5.cc
5ring.com
5ritt.com
5rs.me
@@ -6889,9 +6823,11 @@
607.tv
6071.com
6073168.com
+607images15.com
607images16.com
607images2.com
-608.com
+607images36.com
+607images40.com
608.vip
6080d.com
6090400.com
@@ -6948,7 +6884,6 @@
61bb.com
61bbw.com
61cloud.net
-61co.com
61diy.com
61draw.com
61ertong.com
@@ -7032,7 +6967,6 @@
648sy.com
64ba.com
64dns.com
-64ds.com
64ee.com
64foot.com
64gua.com
@@ -7052,11 +6986,12 @@
65650000.com
65656564.com
656gate.com
-6571n.com
+657192.com
658.com
65875.com
659595.com
65993zubo26633.com
+65box.com
65liuxue.com
65mhxy.com
6600.org
@@ -7084,6 +7019,7 @@
66580.com
6660333.com
666127.xyz
+666291.xyz
6665.com
666532.xyz
666546.xyz
@@ -7097,13 +7033,11 @@
6666ppt.com
6666sa.com
6666xsw.com
-66688.photo
6668dns.com
6669667.com
666aa777bb.com
666bb777ww.com
666gps.com
-666hh999gg.com
666idc.com
666j.com
666kuaishou.com
@@ -7121,7 +7055,6 @@
667744.com
667777.cc
6677cq.com
-6678net.com
66825.com
668559.com
6686.com
@@ -7175,7 +7108,6 @@
66sy.com
66team.com
66to.net
-66tv.tv
66ui.com
66wc.com
66web.com
@@ -7192,7 +7124,6 @@
67017.com
6711.com
6711img.com
-6760x.com
67623.com
6763.loan
676z.com
@@ -7214,7 +7145,6 @@
678vr.com
67az.com
67cha.com
-67gu.com
67it.com
67joy.com
67mo.com
@@ -7255,6 +7185,7 @@
68978.net
6899wan.com
68apk.com
+68bbq.com
68china.net
68design.net
68ecshop.com
@@ -7264,6 +7195,7 @@
68hanchen.com
68hlw.com
68hr.com
+68jcw.com
68ke.com
68mall.com
68play.com
@@ -7274,10 +7206,8 @@
68websoft.com
68yscw.com
68zhan.net
-68zixun.com
69.com
69090.com
-6915x.com
69260.com
692657.com
6934.net
@@ -7372,7 +7302,6 @@
6lrt.com
6ls.cc
6m5m.com
-6mao.com
6miii.com
6miu.com
6miu.net
@@ -7482,7 +7411,6 @@
714.com
715083.com
715288.com
-7152x.com
715300.com
7163.com
71683.com
@@ -7490,6 +7418,7 @@
7172737.com
7176.com
717c.com
+717down.com
71908.com
7192.com
719400.com
@@ -7539,7 +7468,6 @@
724pride.com
724pridecryogenics.com
724pridetech.com
-7253n.com
726p.com
7273.com
7280.com
@@ -7575,13 +7503,13 @@
72zhan.com
731.tv
73110010.com
-7319n.com
73232yx.com
732732.com
73336zubo25326.com
734969.com
7360.cc
737.com
+737698.xyz
73789.com
7384tv.com
738888.xyz
@@ -7694,7 +7622,6 @@
777524.com
77772121.com
7777733.com
-777aa999aa.com
777bb111ww.com
777bb555ww.com
777biubiu.com
@@ -7715,7 +7642,6 @@
778buy.com
7790.com
7794.com
-7798.com
77991.com
7799520.com
779wan.com
@@ -7788,7 +7714,6 @@
78zw.com
79-79.com
79.com
-7927n.com
793360.com
793688.com
79432.com
@@ -7818,7 +7743,6 @@
7ahr.com
7analytics.com
7b2.com
-7b3s1mgg9l.com
7c.com
7caiyun.com
7capp.com
@@ -7872,7 +7796,6 @@
7jk.com
7jsqnh.com
7juju.com
-7junshi.com
7k35.com
7k7k.com
7k8k.com
@@ -7913,6 +7836,7 @@
7road.net
7ronggame.com
7runto.com
+7sef.com
7sfashion.com
7sj.com
7sodu.net
@@ -8127,12 +8051,10 @@
81xy.com
81zhongwenx.com
81zw.com
-81zw.in
81zw.la
8203app.com
82137777.com
82158.com
-8222.com
82250856.com
822644.com
8228.tv
@@ -8157,7 +8079,6 @@
82l.net
82pk.com
830777.com
-831289.com
83133.com
83133.vip
83152222.com
@@ -8170,8 +8091,12 @@
835images21.com
835images28.com
835images3.com
+835images32.com
+835images38.com
835images48.com
+835images55.com
835images6.com
+835images61.com
83661111.net
83666.com
83692.com
@@ -8202,8 +8127,6 @@
8477.com
848.com
848.tv
-8487x.com
-848d.com
849558.com
84bus.net
84fk.com
@@ -8248,7 +8171,6 @@
86175.com
861817.com
86215.com
-8624x.com
86262.com
8633.com
863535.com
@@ -8260,10 +8182,8 @@
865211.com
86586222.com
86590.com
-866668.club
86696.cc
866ds.com
-866pic.com
8671099.com
8673h.com
867867jh.com
@@ -8385,7 +8305,6 @@
8850006.com
885210.net
88582.com
-8858924.com
8860.net
8864.com
8866.org
@@ -8404,6 +8323,7 @@
888-8.com
8880666.com
888132.com
+888484.xyz
888608.xyz
88880809.com
88883aaa.com
@@ -8437,7 +8357,6 @@
88993aaa.com
88995799.com
88999.com
-889995.cc
8899yyy.vip
889mi.com
88bank.com
@@ -8460,15 +8379,14 @@
88la.la
88lan.com
88laser.com
-88lianmengtu.com
88lmfff666.com
+88lmtupian.com
88lot.com
88meishi.com
88mf.com
88ming.net
88order.com
88pets.com
-88popo.com
88rpg.net
88sup.com
88sus.com
@@ -8499,7 +8417,6 @@
8989jt.com
8989u.com
8999.cc
-899973.cc
89dj.com
89doc.com
89ds.com
@@ -8527,7 +8444,6 @@
8dol.com
8dou.com
8dp.net
-8dream.net
8dt.com
8dudata.com
8dus.com
@@ -8545,7 +8461,6 @@
8gyu.com
8hgame.com
8hsleep.com
-8i.ink
8jdns.net
8jiaoye.com
8jie8.com
@@ -8598,7 +8513,6 @@
8tennis.com
8tgh.com
8tool.club
-8tsw.com
8tupian.com
8tupian.net
8twan.com
@@ -8617,7 +8531,6 @@
8wvlk.com
8wym.com
8x6x.com
-8xj.org
8xs.org
8xz8.com
8yao2hds35sv.com
@@ -8633,6 +8546,7 @@
9-xin.com
9-zhuce.com
9.biz
+90.cc
900.la
900.vc
9000wy.com
@@ -8647,7 +8561,6 @@
90576.com
90686.com
906you.com
-90907.com
9090cdndns.com
90ao.com
90c6.com
@@ -8710,6 +8623,7 @@
917st.com
9186.com
9188.com
+918canyin.com
918dxs.com
918haoma.com
918ka.cc
@@ -8735,7 +8649,6 @@
91bushou.com
91carnet.com
91cdkey.com
-91ceshi.com
91cha.com
91changxie.com
91chengguo.com
@@ -8827,6 +8740,7 @@
91meitu.com
91mh.me
91miaoshou.com
+91muou.icu
91muzhi.com
91ninthpalace.com
91nzh.com
@@ -8929,7 +8843,6 @@
925g.com
925ps.com
926kf.com
-92763.vip
927927.com
927953.com
927game.com
@@ -8977,7 +8890,6 @@
92txt.cc
92u93e.com
92wan.com
-92wansf.com
92wudao.com
92wx.com
92wx.la
@@ -9012,7 +8924,6 @@
9377d.com
9377df.com
9377g.com
-9377hi.com
9377j.com
9377ja.com
9377ku.com
@@ -9105,6 +9016,7 @@
95169.com
95191.com
95195.com
+951dns.com
95262.com
9527cha.com
9527cloud.com
@@ -9131,7 +9043,6 @@
95598pay.com
95599.hk
955yes.com
-955yx.com
9560.cc
95600.vip
9564.com
@@ -9199,8 +9110,6 @@
96459.com
964yx.com
965.one
-96516.net
-96520.com
96528.com
96533.com
965373.com
@@ -9210,7 +9119,6 @@
9663.com
9665.com
966599.com
-9665k.com
9665yx.com
9666666.com
9666sr.com
@@ -9229,7 +9137,6 @@
96877.net
968816.com
9688896.com
-968nft.com
968pk.com
969009.com
969368.com
@@ -9288,7 +9195,6 @@
97jz.com
97kid.com
97kks.com
-97lk.com
97lp.com
97lpw.com
97ol.com
@@ -9310,13 +9216,13 @@
980cje.com
98182.com
98187411.com
-9831428.com
984g.com
985.so
985211.link
985900.com
985923.com
985dh.com
+985hezi.com
985ks.com
985ks.net
985sy.com
@@ -9342,7 +9248,6 @@
98ep.com
98eye.com
98fp.com
-98jiankang.com
98jx.com
98k4.com
98kpm.com
@@ -9543,9 +9448,7 @@
9amts.com
9aoduo.com
9aola.com
-9appstore.com
9b11b109-ab3d-4193-ac60-79cc19b3e76d.link
-9beike.com
9bianli.com
9bt0.com
9cao9.com
@@ -9574,7 +9477,6 @@
9dwork.com
9ead.com
9earth.com
-9ehao.com
9eip.com
9ele.com
9etravel.com
@@ -9793,6 +9695,7 @@ aa360.net
aa43z7.com
aa65535.com
aa6666.com
+aa76858896.com
aa77kk.com
aa8828.com
aaalawfirm.com
@@ -9813,6 +9716,9 @@ aads-cng.net
aafanke.cc
aafns.xyz
aafxw.com
+aai07251mu.com
+aai07260mu.com
+aai07280mu.com
aakss.com
aakvtsad.shop
aaltosemi.com
@@ -9902,7 +9808,6 @@ abe-sz.com
abe-tech.com
abeacon.com
abedu.net
-abeij.com
abesmoke.com
abhouses.com
abiaogw.com
@@ -9921,7 +9826,6 @@ ablesci.com
ablesky.com
abletive.com
ablinggame.com
-ablkq.com
ablman.com
abloz.com
abmjc.com
@@ -9947,6 +9851,7 @@ abslw.com
absoloop.com
absst.com
abtd.net
+abtnetworks.com
abtt266.com
abublue.com
abuquant.com
@@ -10036,6 +9941,7 @@ acgres.com
acgsan.com
acgsky.win
acgtofe.com
+acgtubao.com
acgvideo.com
acgvr.com
acgz.xyz
@@ -10057,7 +9963,6 @@ acmcoder.com
acmec-e.com
acmemob.com
acmetranslation.com
-acmicpc.info
acmoba.com
acmsearch.com
acmturc.com
@@ -10130,7 +10035,6 @@ ad7.com
ad778.com
ad9377.com
ada-post.com
-adagaa.com
adamahf.com
adamcoder.com
adamerck.net
@@ -10207,7 +10111,6 @@ adm88888.com
adm999.com
admai.com
admaimai.com
-admaji.com
admama.com
admamax.com
admbucket.com
@@ -10319,7 +10222,6 @@ adxquare.com
adxvip.com
adxwork.com
adxyun.com
-adyea.com
adyoc.com
adyounger.com
adyuedong.com
@@ -10375,7 +10277,6 @@ aerocityholding.com
aerofugia.com
aeryt111.fun
aesdrink.com
-aesmysecurebill.com
aesoftland.com
aestheticbutler.xyz
aesucai.com
@@ -10422,7 +10323,6 @@ aftvc.com
afudan.com
afunapp.com
afuvip.com
-afxeon.com
afy.asia
afzhan.com
ag03.com
@@ -10430,7 +10330,6 @@ ag8.com
agcen.com
agcloudcs.com
agconnect.link
-age-spa.com
age.tv
age06.com
age6000.com
@@ -10485,6 +10384,7 @@ ah163.net
ah3c.com
ah5166.com
ah788.com
+ah7907.com
ah8.cc
ah9yu.com
ahacpp.com
@@ -10586,7 +10486,6 @@ ahjixi.com
ahjk.com
ahjkjt.com
ahjlcd.com
-ahjlxcl.com
ahjpgroup.com
ahjsedu.net
ahjsexam.com
@@ -10654,7 +10553,6 @@ ahsj-group.com
ahsjxjy.com
ahsjyxh.com
ahslxzj.com
-ahsmx.org
ahspxh.com
ahsqjt.com
ahssgs.com
@@ -10695,7 +10593,6 @@ ahx.asia
ahxcyy.com
ahxmgk.com
ahxunbu.com
-ahxuran.com
ahxwkj.com
ahxyol.com
ahydnet.com
@@ -10899,6 +10796,7 @@ aifengjie.com
aifengkeji.com
aifenlei.com
aifont.com
+aifoxtech.com
aifu10.com
aifu360.com
aifuturex.com
@@ -10970,7 +10868,6 @@ aijianji.com
aijiatui.com
aijiayou.com
aijieneng.com
-aijikong.com
aijingu.com
aijishu.com
aijiuku.com
@@ -11117,7 +11014,6 @@ aiqygogo.com
air-level.com
air-matters.com
air-matters.io
-air-th.com
air-world.com
air.cc
airacm.com
@@ -11148,7 +11044,6 @@ airmart.vip
airmate-china.com
airmb.com
airmobyte.com
-airmzp.com
airnut.com
airoha.com.tw
airpipetech.com
@@ -11162,7 +11057,6 @@ airstarfinance.net
airtac.com
airtofly.com
airtu.me
-airwalltech.com
airwh.com
airworksoft.com
aisaohuo.com
@@ -11182,7 +11076,6 @@ aisharenet.com
aishdxz.com
aishengji.com
aishenhua.com
-aishiguolong.com
aishuge.cc
aishuge.la
aishukong.com
@@ -11459,6 +11352,7 @@ alacun.com
aladdin-assets.com
aladdin-e.com
aladdin-reagent.com
+aladdinedu.com
aladdinnet.com
alafy.com
alai.net
@@ -11486,7 +11380,6 @@ aldsd.com
aldtop.com
aldwx.com
aledeco-hk.com
-aleelee.net
aleenote.com
alenable.com
alertover.com
@@ -11549,6 +11442,7 @@ alibabausercontent.com
alibjyun.com
alibjyun.net
alibole.com
+alibtc.com
alibtrip.com
alibuybuy.com
alic.com
@@ -11834,11 +11728,9 @@ alldobetter.com
alldragon.com
alleadprint.com
allenmarket.com
-allergy-iq.com
allfang.com
allfoodsg.com
allfootballapp.com
-allfromspain.com
allfunnies.com
allgamesky.com
allhistory.com
@@ -11914,7 +11806,6 @@ alphabole.com
alphassl.com
alphay.com
alrailpha.com
-alrightzd.com
alskbc.com
alsolife.com
alsovalue.com
@@ -11945,7 +11836,6 @@ amaiche.com
amallb2b.com
amantang.com
amanyi.com
-amaomb.com
amap.com
amapauto.com
amarsoft.com
@@ -11954,7 +11844,6 @@ amasswww.com
amateurinterracialporn.net
amaxchina.com
amayad.com
-amazeui.org
amazfit.com
amazingsys.com
amazoni2.com
@@ -12040,9 +11929,7 @@ amz520.com
amz800.com
amzcaptain.com
amzcfo.com
-amzcs.com
amzdh.com
-amzics.com
amzmm.com
amzndns-cn.biz
amzndns-cn.com
@@ -12127,7 +12014,6 @@ angel-medical.net
angel-usa.com
angelacon.com
angelarabbit.com
-angelchn.com
angelcrunch.com
angelhome.org
angeljjangnara.com
@@ -12224,6 +12110,7 @@ ankangwang.com
ankaotong.com
ankebio.com
ankelife.com
+ankeni.net
anker-in.com
ankerjiedian.com
ankevip.com
@@ -12271,12 +12158,12 @@ anonym-hi.com
anosmcloud.com
anoyi.com
anpig.com
-anpingwanzhong.com
anpu119.com
anpush.com
anpuzx.com
anqingonline.com
anqingwt.com
+anqingzhiyun.com
anqn.com
anqu.com
anquan.info
@@ -12350,6 +12237,7 @@ antgv.com
antibanads.com
antibodychina.com
anticheatexpert.com
+antilgbt.org
antiquelearn.com
antiy.com
antiy.net
@@ -12463,6 +12351,7 @@ anzhiguolv.com
anzhisoft.com
anzhitan.com
anzhixun.com
+anzhuauto.com
anzhuo.com
anzhuo.me
anzhuoapk.com
@@ -12526,12 +12415,10 @@ aokangsports.com
aokwx.com
aolai.com
aolaigo.com
-aoliday.com
aoligei.site
aolinjy.com
aolinpharma.com
aoliongame.com
-aolunsa.com
aolvyou.com
aolylcd.com
aomao.com
@@ -12545,7 +12432,6 @@ aooedu.com
aoofu.com
aoogee.com
aoohu.com
-aoomoo.com
aoongmob.com
aooooz.com
aoparking.com
@@ -12801,6 +12687,7 @@ approvebook.com
apps121.com
appscan.io
appsflower.com
+appsflyer-cn.com
appshike.com
appsimg.com
appsina.com
@@ -12981,6 +12868,7 @@ arminuntor.com
armourtires.com
armsrock.com
armsword.com
+armvm.com
armystar.com
arnstbearing.com
arocmag.com
@@ -13103,7 +12991,6 @@ asdf-bj.net
asdf010.com
asdlkjf.com
asdx.io
-asdyf.com
asean-china-center.org
aseann.com
aseanparts.com
@@ -13250,7 +13137,7 @@ astron.ac
astronergy.com
astropulsion.com
astrostanleystudio.com
-asuidnfamun.com
+asujp.com
asurada.zone
asus-sh.com
asussmart.com
@@ -13271,7 +13158,6 @@ at188.com
at317.com
at58.com
at78.com
-at851.com
at98.com
ata-edu.com
ata-test.net
@@ -13381,7 +13267,6 @@ audlabs.com
audtools.com
augix.me
augsky.com
-augth.com
augurit.com
augustcn.com
auiou.com
@@ -13394,7 +13279,6 @@ aunload.com
auoda.net
auok.run
auozzjs.lol
-auplanking.com
aupu.net
aura-el.com
auroapi.com
@@ -13442,6 +13326,7 @@ auto328.com
auto510.com
auto6s.com
auto98.com
+autoahk.com
autoai.com
autobaidu.com
autobaojun.com
@@ -13471,7 +13356,6 @@ autoij.com
autoitx.com
autojiaoyi.com
autojingji.com
-autojkd.com
autojs.org
automall365.com
autonavi.com
@@ -13497,6 +13381,14 @@ autozi.com
autumnstreetrecords.com
aux-home.com
auxgroup.com
+auy07161km.com
+auy07170km.com
+auy07180km.com
+auy07190km.com
+auy07200km.com
+auy07201km.com
+auy07211km.com
+auy07230km.com
auyou.com
av-china.com
av-ic.com
@@ -13524,7 +13416,6 @@ avgh5.com
avgnati.com
avgnatii.com
avgroft.com
-avhxnasqeo.com
aviationsnip.com
avic-acs.com
avic-apc.com
@@ -13574,7 +13465,6 @@ awemeuglang.com
awemeugsoul.com
awemeugwave.com
awfggc.com
-awfzx.com
awhouse.art
awi-intl.com
awinic.com
@@ -13770,7 +13660,6 @@ ayalm.com
ayatuan.com
aybwg.org
aycav.com
-aycdn.cc
aycgs.com
aycgu.com
aychfy.com
@@ -13808,13 +13697,13 @@ ayrq.com
aysbxxh.com
aysdt.com
ayshq.com
+aysjhod.xyz
aysjyjjh.com
aysxdp.com
ayudasalud.com
ayump.com
ayunlian.com
ayuren.com
-ayurmedicines.com
ayuwoe.com
ayuyun.com
ayw.ink
@@ -13881,7 +13770,6 @@ b-cro.com
b-eurochina.com
b-fairy.com
b-k-automation.com
-b-learn.com
b-raymedia.com
b.biz
b01.net
@@ -13917,13 +13805,10 @@ b3bos.com
b3inside.com
b3log.org
b3logfile.com
-b4882.com
-b4iwf5.com
b555b.com
b5b6.com
b5csgo.plus
b5esports.me
-b5gvpk5.com
b5m.com
b612.me
b612kaji.com
@@ -13933,6 +13818,7 @@ b7l.cc
b8kk.com
b8th-hzvac3.com
b8yx.com
+b9ad.com
ba-li.com
ba1400.com
ba7jcm.live
@@ -13954,7 +13840,6 @@ babapi.com
babaxiong.com
babedy.com
babeijiu.com
-babesters.com
babifood.com
babiguoguo.com
bablace.com
@@ -14075,7 +13960,6 @@ baidevalve.com
baideye.com
baidiapp.com
baidinet.com
-baidouya.com
baidu
baidu-bank.com
baidu-cdn.com
@@ -14093,7 +13977,6 @@ baidu.mobi
baidu.to
baidu120.cc
baidu123.com
-baidu521.com
baiduads.com
baiduapp.com
baidubaidubaidu.net
@@ -14148,6 +14031,7 @@ baifendian.com
baifubao.com
baigebao.com
baigebg.com
+baigehuidi.com
baigeseo.com
baigm.com
baigo.net
@@ -14231,6 +14115,7 @@ bailinsi.net
bailitech.com
bailitools.com
bailitop.com
+bailucloud.com
bailvanquan.xyz
baima.com
baimao-expo.com
@@ -14296,6 +14181,7 @@ baishuku.la
baishulou.net
baishunet.com
baishuyun.com
+baishuzhai.cc
baishuzhai.com
baisihan.com
baisiterzh.com
@@ -14354,6 +14240,7 @@ baiyikc.com
baiying.com
baiyinggd.com
baiyintouzi.com
+baiyishequ.com
baiyizg.com
baiyjk.com
baiyou100.com
@@ -14374,7 +14261,6 @@ baizengtech.com
baizhan.net
baizhanke.com
baizhanlive.com
-baizhi.org
baizhiedu.com
baizhouniao.com
baizhu.cc
@@ -14464,7 +14350,6 @@ bangbang.com
bangbang93.com
bangbanghuoyun.com
bangbendi.com
-bangboer.com
bangboss.com
bangbuy.com
bangcaiwu.com
@@ -14564,7 +14449,6 @@ banmeng.com
banmi.mobi
bannei.com
banner668.com.hk
-bannerbyten.com
banqumusic.com
bansha.com
banshangong.com
@@ -14579,6 +14463,7 @@ banwoyo.net
banwugongsi.com
banxiaomazaojiao.com
banxiayue.com
+banye.tech
banyiyi.com
banyuetan.org
banyuetanapp.com
@@ -14689,7 +14574,6 @@ baolansz.com
baoliannet.com
baolic.com
baolijuyuan.org
-baolimingyuefenghua.com
baolizx.com
baolong.biz
baolong.com
@@ -14847,7 +14731,6 @@ bawagon.com
bawanglongbengye.com
bawjxt.net
bawu.net
-baxi.tv
baxiami.com
baxichina.com
baxisuye.com
@@ -14889,6 +14772,7 @@ bb-hy.com
bb-pco.com
bb06.com
bb2024.com
+bb39977653.com
bbanp.com
bbaod.com
bbaqw.com
@@ -14940,7 +14824,6 @@ bbosu.com
bbphonix.xyz
bbpph.com
bbpu.com
-bbq-strainer.com
bbqcdn.com
bbqe.com
bbqk.com
@@ -14994,7 +14877,6 @@ bbwport.net
bbwrc.com
bbwse.com
bbwunisco.com
-bbwyun.com
bbxarq.com
bbxinwen.com
bbxinwen.net
@@ -15069,7 +14951,6 @@ bcsloong.com
bcsytv.com
bctdtx.com
bctest.com
-bctmo.com
bctts.com
bcty365.com
bcvbw.com
@@ -15087,7 +14968,6 @@ bczyyy.com
bd-caict.com
bd-film.cc
bd-film.co
-bd-film.com
bd-gti.com
bd-jd.com
bd-union.com
@@ -15099,10 +14979,10 @@ bdaenviro.com
bdajob.com
bdall.com
bdapark.com
-bdart.club
bdatu.com
bdbae.com
bdc-rays.com
+bdcb.cc
bdcgz.com
bdchangtujs.com
bdchina.com
@@ -15240,7 +15120,6 @@ beautifulzzzz.com
beautyplus.com
beaverbio.com
bebhmongb.com
-bebingocard.com
bechangedt.com
becker-china.com
beckwai.com
@@ -15288,7 +15167,6 @@ behr.com
behrenswatches.com
behrenswatches.shop
bei1688.com
-beianidc.com
beianw.com
beibaobang.com
beibaozq.com
@@ -15322,7 +15200,6 @@ beifangfoshifen.com
beifangjiaoyu.com
beifeng.com
beifuni.com
-beifz.com
beigangyouxuan.com
beigedi.com
beigonggroup.com
@@ -15339,7 +15216,6 @@ beihaiting.com
beihaiwuyeguanli.com
beihaiwz.com
beihan.net
-beihangonline.com
beihansoft.com
beihaobao.com
beihuasoft.com
@@ -15411,7 +15287,6 @@ beilile.com
beilin.ltd
beilinbox.com
beiliufuyang.com
-beilongcn.com
beimai.com
beimeigoufang.com
beimeihongfeng.com
@@ -15436,7 +15311,6 @@ beisencorp.com
beisenpaas.com
beisenyl.com
beismei.com
-beiso.com
beitaguoguo.com
beitaichufang.com
beitao8.com
@@ -15471,6 +15345,7 @@ belfone.com
belgiumvisacenterd.com
beliefbiomed.com
beliefy.com
+belimked.com
belle-vie.xyz
belle8.com
belletrip.com
@@ -15542,7 +15417,6 @@ benweitang.com
benweng.com
benxiang.com
benxiaoqu.com
-benxintea.com
benyh.com
benyouhui.com
benyuannet.com
@@ -15622,7 +15496,6 @@ bestdon.net
bestdosas.com
bestechnic.com
bestedm.net
-bestedm.org
besteduchina.com
bester-cn.com
bestexpresser.com
@@ -15708,7 +15581,6 @@ betterzipcn.com
beuyinm.com
beva.com
bevol.com
-bewaycare.com
bewellbio.com
bewg.net
bewgnn.com
@@ -15748,7 +15620,6 @@ bfnbgame.com
bfnxxcdn.com
bfqh.com
bfqifu.com
-bfqqsg.com
bfqtchayuan.com
bfscoc.com
bfsea.xyz
@@ -15767,6 +15638,7 @@ bfyx.net
bfzhan.com
bg45.com
bg7ywl.com
+bgbfds.com
bgbg00.fun
bgbjjtd.com
bgbk.org
@@ -15864,7 +15736,6 @@ bhhfsc.com
bhhospital.com
bhhsx.com
bhhthl.com
-bhhuasheng.com
bhhzjt.com
bhidi.com
bhjck.com
@@ -15928,7 +15799,6 @@ bi4sight.com
bi5u.com
bi8brp.com
bian-fengwei.com
-bian-min.com
bianbao.net
biancheng.net
biancui.com
@@ -15965,7 +15835,6 @@ bianzhia.com
bianzhile.com
bianzhirensheng.com
biao12.com
-biao689.com
biaobaini.com
biaoceo.com
biaodan.info
@@ -16045,7 +15914,6 @@ bieuc.icu
bieyangapp.com
bieyelighting.com
bifabu.com
-bifangpu.com
bifengxia.com
bifiv.com
biftsce.com
@@ -16365,19 +16233,16 @@ biqufu.com
biqugao.cc
biquge.info
biquge.la
-biquge.vip
biquge365.com
biquge8.com
biquge9.cc
biquge99.cc
biqugeabc.com
-biqugecdn.com
biqugeg.com
biqugegg.cc
biqugena.com
biquges.com
biqugesk.org
-biqugew.com
biqugex.com
biqugexs.com
biqugexs.la
@@ -16539,6 +16404,7 @@ bizhigq.com
bizhimiao.com
bizhiquan.com
bizhiwang.com
+bizhixia.com
bizhizj.com
bizhizu.com
bizhongchou.com
@@ -16553,7 +16419,6 @@ bizsn.com
bizsofts.com
bizvane.com
bj-big.com
-bj-bpsc.com
bj-brother.com
bj-brsf.com
bj-bts.com
@@ -16745,7 +16610,6 @@ bjgumu.com
bjguodu.com
bjgvpn.amd.com
bjgvpn2.amd.com
-bjgxhy.com
bjgxs.com
bjgymq.com
bjgyzjw.com
@@ -16992,7 +16856,6 @@ bjsrmyy.com
bjsryc.com
bjsskdn.com
bjstcc.com
-bjstcy.com
bjstjy.com
bjstt.com
bjsubway.cc
@@ -17123,7 +16986,6 @@ bjyxl.com
bjyyb.net
bjyyun.com
bjyzfjj.com
-bjyzxwl.com
bjzalaw.com
bjzaxy.com
bjzbb.com
@@ -17131,7 +16993,6 @@ bjzbkj.com
bjzcha.com
bjzcth.com
bjzg.com
-bjzg.org
bjzgh.org
bjzgh12351.org
bjzghd.com
@@ -17166,7 +17027,6 @@ bjzxsf.net
bjzy360.com
bjzybaoan.com
bjzybc.com
-bjzyca.com
bjzyjt.com
bjzyrxgs.com
bjzysx.com
@@ -17225,7 +17085,6 @@ blackshark.com
blackshow.me
blackswancake.com
blackxl.org
-blackzs.com
blakat.cc
blankshell.com
blastracshotblastmachines.com
@@ -17290,7 +17149,6 @@ blogchinese.com
blogcn.co
blogfeng.com
bloggern.com
-bloggingfor.info
bloghub.fun
blogjava.net
blogofmusic.com
@@ -17391,7 +17249,6 @@ blwire.com
blxfc.com
blxs.info
blxs.la
-bly002.com
blycctv.com
blyun.com
blzls.xyz
@@ -17408,7 +17265,6 @@ bmbn100.com
bmbqwater.com
bmc-medical.com
bmcedu.net
-bmcname.com
bmcx.com
bmdbr.com
bmdxcx.com
@@ -17453,7 +17309,6 @@ bms16.com
bmser.com
bmshow.com
bmtrip.com
-bmvps.com
bmw8033.com
bmwallpaper.com
bmwnc.com
@@ -17518,7 +17373,6 @@ boblog.com
bobmao.com
bobo.com
bobo2008.com
-bobo28.com
bobo91.com
bobobird.com
bobohome.store
@@ -17633,7 +17487,6 @@ bokecc.com
bokecs.net
bokee.com
bokee.net
-bokerb.com
bokesoft.com
bokesoftware.com
bokexia.com
@@ -17660,7 +17513,6 @@ bolejiaoxue.com
bolelink.com
bolexiaozhao.com
bolin1688.com
-boling04.com
bolink.club
bolken.com
bolo.me
@@ -17926,7 +17778,6 @@ bphxmc.xyz
bplslb.com
bpltm.com
bpmuseum.com
-bpopdjt.com
bppan.com
bpqwxsh.com
bpsemi.com
@@ -17946,7 +17797,6 @@ bqgwu.net
bqgxsw.com
bqjeep212.com
bqlcev.com
-bqldy.com
bqpoint.com
bqq8.com
bqrdh.com
@@ -18046,7 +17896,6 @@ brxtal.com
bryonypie.com
bryzq.com
bs-56.com
-bs-bz.com
bs-dolfin.net
bs-lab.com
bs-marathon.com
@@ -18120,7 +17969,6 @@ bsquant.com
bsrczpw.com
bsrkt.com
bsrmyy.com
-bsrockwool.com
bsrse.com
bssfy.com
bssgnkyy.com
@@ -18272,13 +18120,13 @@ budao24.com
budarts.com
budget-backpackers.com
budhano.com
+budiankj.com
budikeji.com
buding.tv
budingmore.com
budingscan.com
budiot.com
budou.com
-buduanwang.vip
budui.com
buduobaobao.com
bueryx.com
@@ -18369,10 +18217,8 @@ butterdogchange.com
button-nt.com
buxia.net
buxian8.com
-buxiuedu.club
buxiuga.com
buxiugangban.net
-buxiujiaoyu.com
buy-bar.com
buy-copi888.com
buy-copys888.com
@@ -18409,7 +18255,6 @@ bvfcdn2.com
bvgv.com
bvmc.cc
bvseo.com
-bvubasnf.com
bw1006.com
bw30yun.com
bw40.net
@@ -18466,7 +18311,6 @@ bxgkzy.com
bxgmmw.com
bxgshengwang.com
bxgt.com
-bxgtd.com
bxgxcl.com
bxgycfsb.com
bxhaibao.com
@@ -18495,7 +18339,6 @@ bxwst.com
bxwx.cc
bxwx.io
bxwx.tv
-bxwx520.org
bxxhtsw.com
bxxy.com
bxxyysc.com
@@ -18514,7 +18357,6 @@ by6sx.com
by899.com
byai.com
byair.cc
-bybbs.org
bybieyang.com
bybily.com
byboai.com
@@ -18802,7 +18644,6 @@ bzxz.net
bzxzk.net
bzy.net
bzy2015.com
-bzyxch.com
bzzpw.com
c-119.com
c-3.moe
@@ -18820,7 +18661,6 @@ c-estbon.com
c-fehong.com
c-fol.net
c-jet.com
-c-lh.com
c-lodop.com
c-markaudio.com
c-nin.com
@@ -18849,6 +18689,7 @@ c2h4.org
c360dn.com
c3acg.com
c3crm.com
+c3pool.org
c3x.me
c4006.com
c4008.com
@@ -18975,7 +18816,6 @@ cagoe.com
cahkms.org
cai-ba.com
cai110.com
-cai120.com
cai21.xyz
cai58t.com
cai8.net
@@ -18984,7 +18824,6 @@ caiacn.com
caiair.com
caian.net
caibangzi.com
-caibaodi.com
caibaojian.com
caibaopay.com
caibaotao.com
@@ -18992,7 +18831,6 @@ caibeike.com
caibihui.com
caibowen.net
caicao.net
-caichong.com
caidan2.com
caidao1.com
caidao8.com
@@ -19058,7 +18896,6 @@ cailianpress.com
cailiao.com
cailiaoniu.com
cailiaoren.com
-cailicai.com
cailutong.com
caimai.cc
caimaiba.com
@@ -19131,7 +18968,6 @@ cake400.com
cake6.com
cakfw.com
calab88.com
-calanovahotel.com
calawei.com
calb-tech.com
calccn.com
@@ -19306,8 +19142,8 @@ caomeishuma.com
caomeixz10.xyz
caomeixz7.xyz
caoniang.com
+caonimazuzong.com
caonmp.com
-caonv.net
caos-china.org
caoshiyabo.com
caotama.com
@@ -19330,7 +19166,6 @@ capitalip.org
capitalonline.net
capitaltoday.com
capjoy.com
-caplanking.com
cappdr.org
capsuleshanghai.com
captain-cro.com
@@ -19394,7 +19229,6 @@ carnoc.com
carodpiano.com
carp56.com
carpoly.com
-carrobot.com
carrotchou.blog
carrotchou.com
cars001.com
@@ -19531,7 +19365,6 @@ cbecok.com
cbecx.com
cbeeexpo.com
cbes21.com
-cbevent.com
cbex.com
cbfau.com
cbgcloud.com
@@ -19551,6 +19384,7 @@ cbivisa.com
cbj1998.com
cbjq.com
cbjuice.com
+cbjy520.com
cbjzw.org
cbmexpo.com
cbmf.org
@@ -19645,7 +19479,6 @@ cccdzxw.com
cccf-cloud.com
cccitu.com
cccity.cc
-cccjjj.com
cccking.com
ccckq.com
cccm-em120.com
@@ -19654,7 +19487,6 @@ cccmii.com
cccmtf.com
cccnec.com
cccovvv.com
-cccp.online
cccpan.com
cccppp.com
cccrx.org
@@ -19879,7 +19711,6 @@ ccrjw.com
ccsacacasfdghh.com
ccschangsha.com
ccscrbyy.com
-ccsdj.com
ccsedqrmyy.com
ccsfuchan.com
ccshenghuo.com
@@ -20113,7 +19944,6 @@ cdhtgs.com
cdhtrq.com
cdhuaying.com
cdhxdq.com
-cdidc.net
cdii-leasing.com
cdirs.com
cditv.tv
@@ -20131,7 +19961,6 @@ cdjtzhtc.com
cdjxjy.com
cdjzso.com
cdjzw.com
-cdjzwykj.com
cdjzzg.com
cdkeynogap.com
cdkf.com
@@ -20194,7 +20023,6 @@ cdn40.com
cdn56.com
cdn778.com
cdn86.net
-cdn88.cc
cdn90.com
cdn90.net
cdn90.org
@@ -20235,9 +20063,7 @@ cdnetworks.net
cdnexus.com
cdnf.cc
cdnff.com
-cdnfree.org
cdngia.com
-cdngogo.cc
cdngogo2.cc
cdngot.com
cdngslb.com
@@ -20395,7 +20221,6 @@ cdt-ec.com
cdt-md.com
cdt-re.com
cdtaishan.com
-cdtfn2t.icu
cdtianda.com
cdtkdw.com
cdtlev.com
@@ -20455,7 +20280,6 @@ cdzuche.com
cdzvan.com
cdzxy.com
cdzzhn.com
-cdzzxxe.com
ce-air.com
ce04.com
ce2293.com
@@ -20646,7 +20470,6 @@ cersign.com
cersp.com
certlab.org
ceruchina.com
-cervicalsurgeon.com
ceryt111.fun
ces-transaction.com
cese2.com
@@ -20814,6 +20637,7 @@ cgjoy.net
cgke.com
cgkjvip.com
cgksw.com
+cgktudr.xyz
cgllt.com
cglw.com
cglzw.net
@@ -20835,7 +20659,6 @@ cgown.com
cgpbatech.com
cgplayer.com
cgplusplus.com
-cgptwd.com
cgreentown.com
cgris.net
cgrpark.com
@@ -21046,7 +20869,6 @@ changqingshu.net
changqingteng.ltd
changqu.cc
changshabdc.com
-changshajzy.com
changshang.com
changshaship.com
changshatong.com
@@ -21086,7 +20908,6 @@ changyou.com
changyoyo.com
changyuangroup.com
changyudz.com
-changyueba.com
changyushengwu.com
changzhinews.com
chanjet.com
@@ -21097,7 +20918,6 @@ channelbeyond.com
channingsun.bid
chanpay.com
chanpin100.com
-chanpinban.com
chanpindashi.com
chansemt.com
chanshi.vip
@@ -21129,6 +20949,7 @@ chaojibuy.com
chaojicdn.com
chaojifan.com
chaojihetong.com
+chaojiping.homes
chaojituzi.net
chaojiying.com
chaojiyun.com
@@ -21168,6 +20989,7 @@ chaoxing.com
chaoxingv.com
chaoyang.com
chaoyi996.com
+chaoyinjiu.com
chaoyuesd.com
chaozhenht.com
chaozhoudaily.com
@@ -21191,7 +21013,6 @@ charmkeytextile.com
charmsunfund.com
charsesdneyse.com
chartboost-china.com
-chase-cctv.com
chaseyanyu.net
chashebao.com
chashudi.com
@@ -21257,7 +21078,6 @@ che-youhui.com
che.com
che0.com
che101.com
-che12.com
che127.com
che168.com
che168.net
@@ -21323,7 +21143,6 @@ chehejia.com
chehui.com
chejianding.com
chejingjie.com
-chekb.com
chekuaipai.com
chelaike.com
chelajanitorial.com
@@ -21428,7 +21247,6 @@ chengjianjituan.com
chengjing.com
chengjinholdinggroup.com
chengkao365.com
-chenglan.cc
chenglang.net
chenglangyun.com
chenglil.com
@@ -21453,7 +21271,6 @@ chengshiw.com
chengshu.com
chengsmart.com
chengtaijiaju.com
-chengtaizs.com
chengtay.com
chengtianxiajy.com
chengtiexinxi.com
@@ -21468,7 +21285,6 @@ chengxiangzhineng.com
chengxiaoliu.com
chengxingjicj.com
chengxinlinghang.com
-chengxinsy.com
chengxinyouxuan.com
chengxuan.com
chengyangyang.com
@@ -21486,7 +21302,6 @@ chengzhaoxi.xyz
chengzhinj.com
chengzhongmugu.ltd
chengzhongmugu.vip
-chengzhou.net
chengzijianzhan.cc
chengzijianzhan.com
chengzivr.com
@@ -21654,6 +21469,7 @@ chidaotv.com
chidd.net
chidowl.com
chidudata.com
+chidutech.com
chiefmore.com
chiefpharma.com
chieftin.org
@@ -21885,6 +21701,7 @@ china-shufan.com
china-shugaung.net
china-sites.com
china-slate.com
+china-smartech.com
china-sop.com
china-sorsa.org
china-soyea.com
@@ -21992,7 +21809,6 @@ chinaagv.com
chinaahth.com
chinaairer.com
chinaamc.com
-chinaang.com
chinaant.com
chinaant.net
chinaapper.com
@@ -22602,7 +22418,6 @@ chinaqikan.com
chinaqingtian.com
chinaqipeihui.com
chinaqjydxh.com
-chinaqking.com
chinaql.org
chinaqoe.net
chinaquickpcb.com
@@ -22629,7 +22444,6 @@ chinarun.com
chinarunau.com
chinarzfh.com
chinasaat.com
-chinasafety.net
chinasalestore.com
chinasanbai.com
chinasanc.com
@@ -22711,7 +22525,6 @@ chinataiwan.org
chinatalent.org
chinatalentgroup.com
chinatat.com
-chinatechinsights.com
chinatelecom-h.com
chinatelecom.com.hk
chinatelecom.com.mo
@@ -22807,7 +22620,6 @@ chinawebber.com
chinawebmap.com
chinaweiyu.com
chinaweizheng.com
-chinawenben.com
chinawepon.com
chinawerewolf.com
chinawie.com
@@ -23227,7 +23039,6 @@ chuangmaoshanghai.com
chuangmei8.com
chuangongsi.com
chuangqiweilaijy.com
-chuangruo8.com
chuangseo.com
chuangshiwl.com
chuangshiyuli.com
@@ -23242,7 +23053,6 @@ chuangxuan.xyz
chuangyebaba.com
chuangyehai.com
chuangyejia.com
-chuangyejmw.com
chuangyetv.com
chuangyi.co
chuangyichong.com
@@ -23259,7 +23069,6 @@ chuangzuoniu.com
chuanhai.net
chuanhuan.com
chuanjiaoban.com
-chuanjie.vip
chuanke.com
chuanloo.com
chuanmeixing.com
@@ -23297,7 +23106,6 @@ chucheng.wiki
chuchujie.com
chuchujue.com
chuchur.com
-chudian365.com
chufaba.me
chufw.com
chuge8.com
@@ -23324,7 +23132,6 @@ chukong-inc.com
chukonggame.com
chukou1.com
chukouplus.com
-chule.cc
chuleg.com
chumenwenwen.com
chun-wang.com
@@ -23348,7 +23155,6 @@ chunliao.net
chunloo.com
chunmen.com
chunmi.com
-chunmiaosh.com
chunqiuhong.com
chunshen-group.com
chunsheng.com
@@ -23407,7 +23213,6 @@ chwlsq.com
chxchips.com
chxent.com
chxin-oil.com
-chxumov.com
chxyl.com
chxyq.com
chyitech.com
@@ -23526,9 +23331,7 @@ cijiasu.com
cijiyun.com
cikelink.com
cilgroup.org
-ciliba.buzz
ciliba.life
-ciliba5.xyz
cilin.org
cilishenqi.cc
cilishiye.com
@@ -23546,7 +23349,6 @@ cimcvehiclesgroup.com
cimen.club
cimic.com
cimicgroup.com
-cimicmj.com
cimictiles.com
ciming-bj.com
ciming-sh.com
@@ -23554,7 +23356,6 @@ ciming.com
cimingaoya.com
cimingbj.com
cimingsy.com
-cimingwang.com
cimsic.com
cimtshow.com
cinacom.net
@@ -23691,6 +23492,7 @@ ciweiyuedui.com
ciwong.com
ciwong.net
ciwork.net
+cixcomputing.com
cixibank.com
cixiedu.net
cixiucn.com
@@ -23809,7 +23611,6 @@ cjyy6789.com
cjyyw.com
cjzcb.com
cjzcgl.com
-cjzkw.com
cjzsy.com
cjzww.com
cjzx.net
@@ -23818,6 +23619,7 @@ ck0771.com
ck100.com
ck180.net
ck586.com
+ck830.com
ck921.com
ckair.com
ckan.tv
@@ -23840,6 +23642,7 @@ ckjr001.com
ckjryy.com
ckpharm.com
ckplayer.com
+ckqjyjq.xyz
cksct.com
cksd888.com
cksic.com
@@ -23939,7 +23742,6 @@ cljtscd.com
cljtw8.com
cljtwr.com
cljtzycw.com
-clkwnl.xyz
cllcczx.com
clled.com
cllk.net
@@ -23966,6 +23768,7 @@ cloud-frame.com
cloud-hebi.com
cloud-hub.co
cloud-industry-delivery.site
+cloud-link.com
cloud-links.net
cloud-neofussvr.sslcs.cdngc.net
cloud-ningbo.com
@@ -24184,7 +23987,6 @@ clxsczx.com
clyiyuan.com
clyric.com
clz.me
-clzbl.com
clzd.com
clzd.fun
clzqm.com
@@ -24289,7 +24091,6 @@ cmgemooc.com
cmgn.cc
cmgos.com
cmgrasp.com
-cmhbsb.com
cmhello.com
cmhijs.com
cmia.info
@@ -24340,7 +24141,6 @@ cmt1993.com
cmt7.com
cmtauto.com
cmtdi.com
-cmtech.net
cmtopdr.com
cmtrq.com
cmtv1.com
@@ -24449,7 +24249,6 @@ cn168.com
cn18k.com
cn2030.com
cn22.net
-cn2599.com
cn2che.com
cn2rv.com
cn314.com
@@ -24683,7 +24482,6 @@ cne-motor.com
cne-om.com
cne.com
cnean.com
-cnec-tj.com
cnecc.com
cnechc.com
cnecport.com
@@ -24802,7 +24600,6 @@ cnhan.com
cnhanjia.com
cnhantide.com
cnhanxing.com
-cnhaojia.com
cnhaomen.com
cnhaoshengyi.com
cnhbql.com
@@ -25025,7 +24822,6 @@ cnmtpt.com
cnmuseum.com
cnmysoft.com
cnn100.com
-cnnage.com
cnnaihuo.com
cnnb.com
cnnbfdc.com
@@ -25116,7 +24912,6 @@ cnprs.com
cnpsec.com
cnpubc.com
cnpubg.com
-cnpusi.com
cnpv.com
cnpx.net
cnpxyy.com
@@ -25127,7 +24922,6 @@ cnqd.net
cnqiang.com
cnqichun.com
cnqifeng88.com
-cnqiuyu.com
cnqjw.com
cnqr.org
cnquanjing.com
@@ -25243,7 +25037,6 @@ cntally.com
cntan.net
cntangka.com
cntapp.com
-cntattoos.com
cntaz.com
cntc.com
cntech.com
@@ -25278,7 +25071,6 @@ cntyjt.com
cntywhcm.com
cnu.cc
cnuninet.net
-cnuniwise.com
cnuozu.com
cnur.com
cnuschool.org
@@ -25315,7 +25107,6 @@ cnwnews.com
cnwood-ipp.org
cnwsgj.com
cnwtn.com
-cnwuhu.com
cnwutong.com
cnww1985.com
cnww9.com
@@ -25368,7 +25159,6 @@ cnyouhao.com
cnypa.org
cnys.com
cnytgy.com
-cnyu.com
cnyw.net
cnywinfo.com
cnyydj.com
@@ -25387,7 +25177,6 @@ cnzhjk.com
cnzhongcha.com
cnzhongzhuan.com
cnzici.com
-cnziyun.com
cnzjdd.com
cnzjj.com
cnzjol.com
@@ -25426,7 +25215,6 @@ coach-edu.com
coach-japanese.com
coahr.net
coalcloud.net
-coalcn.com
coalstudy.com
coantec.com
coaoo.com
@@ -25445,7 +25233,6 @@ cochemist.com
cochicon.com
cochina.org
cocia.org
-cocimg.com
coco413.com
cocoachina.com
cocodiy.com
@@ -25484,7 +25271,6 @@ codebye.com
codechina.net
codecomeon.com
codedefault.com
-codedream.xin
codeeeee.com
codeflying.net
codeforge.com
@@ -25621,6 +25407,7 @@ college-ing.com
colly-pink.com
collycn.com
colobu.com
+colocess.com
color-measure.com
color365.com
colorbird.com
@@ -25704,6 +25491,7 @@ comway-mro.com
comweixin.com
comwin-sh.com
con-star.com
+con.sh
con3c.com
conan06.com
conantoptical.com
@@ -25752,7 +25540,6 @@ contentstore.htcvive.com
controlinai.com
conuo.com
convergemob.com
-convertermkv.com
convertlab.com
cony-tech.com
conyedit.com
@@ -25848,6 +25635,7 @@ coooz.com
coopcc.com
cooperningbo.com
coorain.net
+coordsx.com
coostack.com
cootek.com
cootekos.com
@@ -25878,6 +25666,7 @@ corerain.com
corex-design.com
corgichina.com
corlercar888.com
+coros.com
corp-email.com
corp.cc
corpautohome.com
@@ -26007,13 +25796,11 @@ cplamc.com
cplotus.com
cpm1000.com
cpmiao.net
-cpmp3.com
cpmrc.org
cpmwuxi.com
cpo.xyz
cpo2o.com
cpolar.com
-cpolar.io
cpolive.com
cpooo.com
cpp-prog.com
@@ -26029,7 +25816,6 @@ cpph.com
cppinfo.com
cpplay.com
cppoly.com
-cpppc.org
cpppf.org
cppszw.com
cpqrmyy.com
@@ -26089,7 +25875,6 @@ cq8.com
cq96868.com
cq9yuan.com
cqaaa.com
-cqaca.com
cqace.com
cqaflopack.com
cqai.vip
@@ -26149,7 +25934,6 @@ cqcmxy.com
cqcoal.com
cqcp.net
cqcpt.com
-cqcqcq.com
cqcrane.com
cqcrossmobil.com
cqcsic.com
@@ -26273,14 +26057,12 @@ cqhnbsb.com
cqhncd.com
cqhongshuangda.com
cqhouse.net
-cqhpoldi.com
cqhrjd.com
cqhsgy.com
cqhsjs.com
cqhtu.com
cqhushan.com
cqhwr.com
-cqhwsw.com
cqhwzs.com
cqhxdbj666.com
cqhxeye.com
@@ -26314,7 +26096,6 @@ cqiter.com
cqiti.com
cqitic.com
cqivc.com
-cqivip.com
cqjat.com
cqjbrc.com
cqjchg.com
@@ -26465,7 +26246,6 @@ cqpfjt.com
cqpfmz.com
cqph.com
cqphar.com
-cqpinjian.com
cqpix.com
cqpost.com
cqpump.com
@@ -26478,7 +26258,6 @@ cqqcjzsj.com
cqqgsafe.com
cqqgx.com
cqqianggu.com
-cqqigao.com
cqqiujing.com
cqqiyi.com
cqqjyy.com
@@ -26622,7 +26401,6 @@ cqwenbo.com
cqwest.com
cqwin.com
cqwlg.com
-cqwlln.com
cqwlzz.com
cqwsnews.net
cqwsrmyy.com
@@ -26701,7 +26479,6 @@ cqysgyy.com
cqysp.com
cqysxx.com
cqysxy.com
-cqytbfc.com
cqyti.com
cqytjt.com
cqytjzgc.com
@@ -26710,8 +26487,8 @@ cqytu.com
cqytyk.com
cqyu.com
cqyuanjing.com
-cqyuelai.com
cqyuhong.com
+cqyunshi.com
cqyuxing.com
cqyuzhoujx.com
cqyx999.com
@@ -26784,7 +26561,6 @@ craim.net
crandom.com
crane-china.cc
crane-net.com
-cranebbs.com
cranewh.com
crash.work
cravatar.com
@@ -26858,7 +26634,6 @@ crecu.com
cred.com
credibleglass.com
credit100.com
-credit315.org
creditcn.com
credithc.com
creditrepairjournal.com
@@ -26871,7 +26646,6 @@ creo-support.com
crep-led.com
crepcrep.com
creplus.net
-cresqoirz.com
crestv.com
cret-bio.com
crewchina.net
@@ -26906,7 +26680,6 @@ crl.kaspersky.com
crlf0710.com
crlg.com
crlintex.com
-crlsxny.xyz
crm.cc
crm1001.com
crmch.com
@@ -26948,6 +26721,7 @@ crtc-hr.com
crtdri.com
crtg.com
crtrust.com
+crtyhr.com
crucg.com
cruelcoding.com
cruhut.com
@@ -26980,6 +26754,7 @@ cs27.com
cs2c.com
cs2ccloud.com
cs30.net
+cs451.com
cs48.com
cs528.com
cs53.com
@@ -27011,7 +26786,6 @@ cscec1b-bj.com
cscec1b.net
cscec5b3.com
cscec7b.com
-cscec7bhb.com
cscec81.com
cscec8bud.com
cscecbjadi.com
@@ -27021,7 +26795,6 @@ cscjedu.com
csclc.com
cscmgg.com
csct-china.com
-cscxgjzx.com
csd568.com
csdc.info
csdcfvgf4.fun
@@ -27054,7 +26827,6 @@ csfreezer.com
csftyy.com
csfudu.com
csfybjy.com
-csg99.com
csgasgroup.com
csgcjxxh.com
csgcyy.com
@@ -27257,7 +27029,6 @@ cswszy.com
csxbank.com
csxcdj.com
csxdf.com
-csxdzx.com
csxiangfeng.com
csxingfutemple.org
csxingya.com
@@ -27386,6 +27157,7 @@ ctjin.com
ctjituan.com
ctjl.net
ctjsoft.com
+ctkon.com
ctkq.com
ctlcdn.com
ctldl.windowsupdate.com
@@ -27407,7 +27179,6 @@ ctongonline.com
ctoutiao.com
ctpdd.com
ctqcw.com
-ctquan.com
ctracer.net
ctrcw.net
ctrip-ttd.hk
@@ -27498,7 +27269,6 @@ cugstore.com
cuhnj.com
cui1000.com
cuihuan.net
-cuijia.net
cuijiahua.com
cuilai.com
cuiniaoedu.com
@@ -27514,7 +27284,6 @@ cuixingreen.com
cuixueshe.com
cuiyongjian.com
cuiyouxuan.com
-cujin.org
cujs.com
cuketest.com
cul-studies.com
@@ -27570,7 +27339,6 @@ cutemidi.com
cuteng.com
cutepet-hk.com
cutieshop153.com
-cutoch.com
cutowallpaper.com
cutv.com
cuuhn.com
@@ -27578,7 +27346,6 @@ cuumo.com
cux.cc
cuz.cx
cuzz.site
-cvammby.com
cvc898cvc.com
cvchina.info
cvchome.com
@@ -27641,6 +27408,7 @@ cx930.net
cxacg.com
cxas.com
cxaxdfsbw.com
+cxbbattery.com
cxbiji.com
cxbio.com
cxbsx.com
@@ -27703,6 +27471,7 @@ cxszdi.com
cxta.com
cxthhhhh.com
cxtld.com
+cxtrip.cc
cxtuku.com
cxumol.com
cxvlog.com
@@ -27750,7 +27519,6 @@ cy-scm.com
cy-ymtw.com
cy.com
cy0go.com
-cy123.cc
cy2009.com
cy365.com
cy52.com
@@ -28050,7 +27818,6 @@ czzy-edu.com
czzyc.com
czzyvideo.com
czzzbwg.com
-czzzly.com
d-controls.com
d-ctrip.com
d-d.design
@@ -28087,7 +27854,6 @@ d1xn.com
d1xny.com
d1xz.net
d1y.cc
-d2cmall.com
d2core.com
d2film.com
d2kdi2ss.com
@@ -28120,7 +27886,6 @@ d7w.net
d80438960.com
d8th.com
d99net.net
-d9ad.com
d9js.com
d9k99.com
d9ym.com
@@ -28151,6 +27916,7 @@ dabanke.com
dabao123.com
dabaoge.host
dabaoku.com
+dabapiao.com
dabaqian.com
dabeiduo.com
dabiaoji.info
@@ -28198,7 +27964,6 @@ dadaojiayuan.com
dadaqipai.com
dadasasa.com
dadasou.com
-dadatuwz.com
dadayou.com
dadclab.com
daddybaby.com
@@ -28233,9 +27998,7 @@ dafmgroup.com
dafork.com
dafosi.org
dagangcheng.com
-dage.cc
dagongcredit.com
-dagonglang.com
dagongnet.com
dagongtech.com
daguan.com
@@ -28308,7 +28071,6 @@ daidongxi.com
daief.tech
daigege.com
daigou.com
-daiguaji.com
daihaobiao.com
daihing.com
daijuchuang.net
@@ -28316,7 +28078,6 @@ daijun.com
daikandq.com
daikela.com
daikuan.com
-daikuanlilv.com
daili321.com
dailianmama.com
dailianqun.com
@@ -28406,7 +28167,6 @@ dakao8.net
dakapath.com
dakaruanwen.com
dakasi.com
-dakawm.cc
dakedakedu.com
dakejie.com
dakekj.com
@@ -28519,7 +28279,6 @@ dangbei.net
dangbeiprojector.com
dangbiao.com
dangcdn.com
-dangd.net
dangdaiyiyao.com
dangdang.com
dangdj.com
@@ -28674,7 +28433,6 @@ daoyu8.com
daoyumiao.com
daozhao.com
dapai8.com
-dapaizixun.com
dapan.com
dapei.cc
dapenggangguanchang.com
@@ -28713,7 +28471,6 @@ darknight.games
darmao.com
darongcheng.com
darryring.com
-darseek.com
dartchina.com
dartou.com
dartzon.com
@@ -28727,7 +28484,6 @@ dashangu.com
dashen520.com
dashen8.com
dashengji.com
-dashenglaile.com
dashengpan.com
dashengzuji.com
dashenquan.com
@@ -28877,7 +28633,6 @@ daxuewang.com
day66.com
dayaguqin.com
dayainfo.com
-dayalihome.com
dayang.group
dayangjt.com
dayangliangyou.com
@@ -28899,6 +28654,7 @@ daydayup123.com
daydx.com
daye.hk
dayee.com
+dayehome.com
dayemarathon.com
dayesmart.com
dayezheng.com
@@ -28953,7 +28709,6 @@ dayustudy.com
dayutukun.com
dayuzy.com
daza168.com
-dazhan123.com
dazhangfang.com
dazhangqiu.com
dazhantai.com
@@ -29004,6 +28759,7 @@ dbankcloud.ru
dbankedge.asia
dbankedge.net
dbanote.com
+dbaobao.com
dbatmb.com
dbbqb.com
dbc2000.net
@@ -29024,6 +28780,7 @@ dbmailserver.com
dbmaiyan7.com
dbmall.com
dbnuo.com
+dbpan.com
dbparking.com
dbqf.xyz
dbqgg.com
@@ -29058,6 +28815,7 @@ dcg.microsoft.com
dcg123.com
dcgqt.com
dcgsi.com
+dcgstd.com
dchotel.net
dcic-china.com
dcits.com
@@ -29114,7 +28872,6 @@ ddahr.net
ddbiquge.cc
ddbiquge.com
ddbiu.com
-ddc888.com
ddcdn.com
ddcheshi.com
ddcits.com
@@ -29182,10 +28939,10 @@ ddpai.com
ddpoc.com
ddqcw.com
ddsaas.com
+ddsiojf.xyz
ddsk.la
ddsm.com
ddstarapp.com
-ddswcm.com
ddsy.com
ddtk.vip
ddtsg.com
@@ -29205,7 +28962,6 @@ ddwjs.com
ddxhx.com
ddxhyl.com
ddxq.mobi
-ddxs.cc
ddxsku.com
ddxstxt8.com
ddyjapp.com
@@ -29220,6 +28976,7 @@ ddzf.cc
ddzhj.com
ddzl.net
ddzls.net
+ddzn.tech
ddznzj.com
ddztv.com
ddzui.com
@@ -29407,7 +29164,6 @@ delunyk.com
deluxewatchbox.com
deluxworld.com
deluya.com
-delv029.com
demage.com
demanmedical.com
demark-jgkj.com
@@ -29511,7 +29267,6 @@ deskpool.com
desktop-calculator.com
desktopcal.com
deskwc.com
-desmonsur.com
desnerboats.com
desoonproduct.com
destoon.com
@@ -29591,7 +29346,6 @@ deyayk.com
deyecloud.com
deyeehome.com
deyerchem.com
-deyetown.com
deyi.com
deyi.net
deyicc.com
@@ -29655,7 +29409,6 @@ dfmc.com
dfmcastrol.com
dfmingya.com
dfnzhp.com
-dfpk.com
dfpost.com
dfpz.net
dfqcmy.com
@@ -29699,7 +29452,6 @@ dfysgs.com
dfysscy.com
dfysw.net
dfyuan.com
-dfyxs.com
dfyyc.com
dfyzx.com
dfzbsh.com
@@ -29722,11 +29474,9 @@ dg688.com
dgaefi.org
dgaiia.com
dgbaineng.com
-dgbap.com
dgbgw.com
dgbia.com
dgcct.com
-dgchangan.com
dgchenghe.com
dgcia.com
dgcpkl.com
@@ -29818,7 +29568,6 @@ dgtungwah.com
dgtuoyue.com
dgtzjt.com
dgujayx.com
-dgvbla.com
dgw888.com
dgwap.com
dgweierwj.com
@@ -29870,7 +29619,6 @@ dh978.com
dhaitun.com
dhaof.com
dhasgf.com
-dhaxhsa325.com
dhb.hk
dhb168.com
dhboy.com
@@ -30002,7 +29750,6 @@ dianlanyibiao.com
dianli.com
dianli08.com
dianli100.com
-dianliang8.com
dianlinet.com
dianluo-tech.com
dianlut.com
@@ -30055,6 +29802,7 @@ dianwantu.com
dianwo98.com
dianwoba.com
dianwoda.com
+dianwolf.com
dianwoyou.com
dianxian.net
dianxian8.com
@@ -30066,6 +29814,7 @@ dianxin.com
dianxin.net
dianxinnews.com
dianxinos.com
+dianyacloud.com
dianyinghai.cc
dianyingshow.com
dianyingwenxue.com
@@ -30112,7 +29861,6 @@ diaoyu365.com
diaoyuren.com
diaoyuwang.com
diaoyuweng.com
-diaoyy.com
diary365.net
diaxue.com
diazha.com
@@ -30154,7 +29902,6 @@ didi-trip.com
didi.xin
didialift.com
didiapp.com
-didiar.com
didichuxing.com
dididadidi.com
dididapiao.com
@@ -30175,7 +29922,6 @@ diducoder.com
die4beats.com
diebian.net
dieclock.com
-diemameishi.com
diemoe.net
diemz.com
dieniao.com
@@ -30295,6 +30041,7 @@ dingdingdan.com
dingdingdoctor.com
dingdingkaike.com
dingdingtingche.com
+dingdingzn.com
dingdone.com
dingdongcloud.com
dingdongebusiness.com
@@ -30305,6 +30052,7 @@ dingefactory.com
dingertai.com
dingfubang.com
dingge.cc
+dinggebaojian.com
dinggou.org
dinggu.net
dinghaiec.com
@@ -30379,7 +30127,6 @@ diomasce.com
dionly.com
diopic.net
dious-f.com
-dious.cc
dipan.com
dipephoto.com
dipont.com
@@ -30443,7 +30190,6 @@ diwork.com
diwuyuan.com
dixinkj.com
dixintong.com
-dixonsdelight.com
diy10.com
diyahz.com
diyamh.com
@@ -30478,7 +30224,6 @@ diynova.com
diyosl.com
diypda.com
diyring.cc
-diywoju.com
diyyh.com
diyzhen.com
dizalpharma.com
@@ -30578,8 +30323,6 @@ djzyg.com
dk-lexus.com
dk517.com
dk8s.com
-dkasdeerw.xyz
-dkasffredf.xyz
dkashop.com
dkdangle.com
dkdgroup.com
@@ -30622,7 +30365,6 @@ dl321.net
dl56.net
dl8z.com
dlairport.com
-dlangchina.com
dlbaohuang.com
dlbbdk.com
dlbbs.com
@@ -30763,7 +30505,6 @@ dmicrobe.com
dmiug.com
dmjk120.com
dmjnb.com
-dmjuups.com
dmjvip.com
dmlei.com
dmm.ink
@@ -30781,6 +30522,7 @@ dmrta.com
dmrtb.com
dms365.com
dmssc.net
+dmtemp.com
dmtg.com
dmtgy.com
dmu-1.com
@@ -30792,7 +30534,6 @@ dmzgame.com
dmzj.com
dmzlcn.com
dmzlpf.com
-dmzshequ.com
dmzx.com
dmzzbjb.net
dn.com
@@ -30955,7 +30696,6 @@ dnzh.org
dnzhuti.com
dnzjds.com
dnzp.com
-dnzs678.com
do-global.com
do-shi.com
do-won.com
@@ -30978,7 +30718,6 @@ docer.com
docexcel.net
docin.com
docin.net
-docin365.com
dockerinfo.net
dockerone.com
dockerproxy.com
@@ -31310,6 +31049,7 @@ doseeing.com
doserv.com
doservice.com
doshome.com
+dosilicon.com
dosk.win
dosnap.com
dospy.com
@@ -31396,7 +31136,6 @@ doulaidu8.cc
doule-ref.com
douleyun.net
doulongyun.com
-douluodalu3.com
doumenqu.com
doumi.com
doumiip.com
@@ -31426,9 +31165,7 @@ douyabo.com
douyacun.com
douyadaili.com
douyaobuy.com
-douyapu.com
douyar.com
-douyi.com
douyin.com
douyin766.com
douyinact.com
@@ -31547,7 +31284,6 @@ dplslab.com
dpma.cc
dpn.net
dpqct.com
-dpqhf.com
dptech.com
dptechnology.net
dpurat.com
@@ -31613,6 +31349,7 @@ dragon-hotel.com
dragonarea.com
dragonballcn.com
dragonest.com
+dragonfgame.com
dragonfly.fun
dragonlab.org
dragonlcm.com
@@ -31641,7 +31378,6 @@ drdwy.com
dre8.com
dream-loft.com
dream-marathon.com
-dream-universe.org
dream.ren
dream211.com
dreamad.mobi
@@ -31696,7 +31432,6 @@ drouma.com
drp321.com
drpika.com
drry.site
-drs-cs.com
drscrewdriver.com
drscrm.com
drsmilehealth.com
@@ -31788,6 +31523,7 @@ dsrepark.com
dss.hk
dssddf33.fun
dsspinfo.com
+dsssp.com
dsstudio.tech
dssz.com
dst.gov.mo
@@ -31795,10 +31531,7 @@ dstcar.com
dstfsbc.com
dstguanwang.com
dsti.net
-dsvfdsf-bnigfo-sdkkg.com
dsw6.com
-dswenda.com
-dswenku.com
dswjcms.com
dswljt.com
dswmt.com
@@ -31814,7 +31547,6 @@ dsxys.pro
dsyqt.com
dsyun.com
dsz.cc
-dszan.com
dt-paint.com
dt-stor.com
dt0j.icu
@@ -31852,7 +31584,6 @@ dtstack.com
dtstatic.com
dtston.com
dttc-icp.com
-dttnsq.com
dttt.net
dtuosh.com
dtuyun.com
@@ -31860,7 +31591,6 @@ dtwave.com
dtxmw.com
dtxn.net
dtxww.com
-dtxxhh.com
dtxxjq.com
dtyhgj.com
dtysky.moe
@@ -31894,7 +31624,6 @@ duanxb.com
duanxiansen.com
duanxianxia.com
duanxin.com
-duanxin321.com
duanxin520.com
duanxindao.com
duanzaixian.vip
@@ -32177,7 +31906,6 @@ dushudaren.com
dushuge.net
dustess.com
dustglobal.com
-dustit.me
dusulang.com
dute.me
dutenews.com
@@ -32217,7 +31945,6 @@ dvbcn.com
dvbei.com
dvd2017.com.tw
dvdc100.com
-dvdduplicationphoenix.net
dvidc.com
dvmama.com
dvmission.com
@@ -32245,7 +31972,6 @@ dwjoy.com
dwjpwf.com
dwjxz.com
dwmoniqi.com
-dwmqg.com
dwntme.com
dwoke.com
dwq.com
@@ -32255,22 +31981,18 @@ dwsgases.com
dwstatic.com
dwstock.com
dwt.life
-dwtedx.com
dww11.com
dwwin.com
-dwxw.net
dwxyamaha.com
dwyeuy.com
dwywood.com
dwywooden.com
-dwz.date
dwz.lc
dwzjd.com
dx-job.com
dx-marine.com
dx-tech.com
dx00.net
-dx021.com
dx10000.com
dx2008.com
dx286.com
@@ -32313,7 +32035,6 @@ dxqyy.com
dxr.com
dxrc.com
dxs8.com
-dxsabc.com
dxsaxw.com
dxsbb.com
dxsclass.com
@@ -32364,9 +32085,9 @@ dy2018.com
dy2066.com
dy3j.com
dy558.com
+dyaobo2029.com
dybeta.com
dycar.net
-dycars.com
dyccb.net
dycdn.com
dycic.net
@@ -32388,7 +32109,6 @@ dyee.org
dyemp.com
dyets-cn.com
dyfc.net
-dyfcw.com
dyfgp.com
dyfm200.com
dyg-hec.com
@@ -32404,7 +32124,6 @@ dyhjw.com
dyhongshun.com
dyhuidong.com
dyhxgame.com
-dyie.net
dyjdcz.com
dyjqd.com
dyjqlrj.com
@@ -32413,7 +32132,6 @@ dyjw.info
dyjxjt.com
dyjxsj.com
dyjymy.com
-dyketai.net
dykszx.com
dykz66.com
dylc.com
@@ -32455,7 +32173,6 @@ dytt7899.com
dytt8.com
dytt8.net
dytt89.com
-dyttcdn.com
dyvideotape.com
dywcc.com
dywuyuan.com
@@ -32554,7 +32271,6 @@ dzpezp.com
dzpk.com
dzpklite.com
dzpknews.com
-dzqc.link
dzqrmyy.com
dzqu.com
dzqxj.com
@@ -32610,7 +32326,6 @@ e-10031.com
e-adcon.com
e-ande.com
e-bidding.org
-e-bq.com
e-buychina.com
e-byte.com
e-cbest.com
@@ -32670,7 +32385,6 @@ e0453.com
e0514.com
e0575.com
e0734.com
-e0744.com
e0838.com
e0hhk12.xyz
e12345.com
@@ -32698,18 +32412,15 @@ e399.com
e3j.co
e3ol.com
e4008.com
-e4221.com
e4l4.com
e53w.com
e5413.com
-e5618.com
e5865f69dee0.xyz
e5hc.com
e5n.com
e5sj.com
e5tech.com
e600.com
-e64.fun
e656gps.com
e65u.com
e68cname.com
@@ -32728,7 +32439,6 @@ e7z.net
e836g.com
e890.com
e8d7.icu
-e9377f.com
e9797.com
e9898.com
e99999.com
@@ -32768,6 +32478,7 @@ eanfang.com
eanmed.com
eap2.net
eapchina.net
+ear0.com
eardatek.com
earlytrip.fun
earth-science.net
@@ -32780,6 +32491,7 @@ easck.com
eascs.com
easea.net
easebar.net
+easecation.net
easeconvert.com
easefun.info
easeheal.com
@@ -33039,7 +32751,6 @@ ecco-market.com
eccpos.com
ecdag.net
ecdnx.com
-ecdpower.net
ecduo.com
ece-global.com
eceibs.com
@@ -33049,7 +32760,6 @@ ecej.com
ecer.com
ecerdns.com
ecerimg.com
-ecezt.com
ecf-gov.com
ecgci.com
ecgoods.com
@@ -33087,9 +32797,9 @@ eciticcfc.com
ecjobhome.com
ecjson.com
eckwai.com
+eclipium.xyz
ecloud-gdu.com
ecloud.hk
-ecmagnet.com
ecmc-nj.com
ecmoban.com
ecmould.com
@@ -33154,7 +32864,6 @@ ecv360.com
ecvv.com
ecwan77.net
ecydm.com
-ecyj.net
ecyti.com
ecyzm.com
ed-textile.com
@@ -33297,7 +33006,6 @@ edumq.com
edumsys.com
eduour.com
edupm.com
-eduppw.com
edurck.com
edushi.com
edusoho.com
@@ -33375,9 +33083,9 @@ eei168.com
eeio99.com
eeioe.com
eeju.com
+eekgame.com
eelly.com
eeloves.com
-eelve.com
eema.info
eenzo.com
eeook.com
@@ -33408,7 +33116,6 @@ eezml.com
ef-cdn.com
ef360.com
ef360.net
-ef9377.com
efala.net
efang.tv
efangcdn.com
@@ -33420,6 +33127,7 @@ efashioncloud.com
efchina.org
efe.cc
efengji.org
+efengqing.com
efesco.com
eff-soft.com
effapp.com
@@ -33620,15 +33328,12 @@ ejsoon.win
ejtieyi.com
eju.com
ejudata.com
-ejuen.com
ejuhome.com
-ejujiu.com
ejunshi.com
ejustcn.com
ejy365.com
ek-edu.com
ek1ng.com
-ek6.com
ekaid.com
ekaidian.com
ekan001.com
@@ -33644,7 +33349,6 @@ ekimmigration.com
eking-tech.com
ekingair.com
ekingtopwood.com
-ekltes.xyz
ekoooo.com
eks0451.com
ekuaibao.com
@@ -33715,7 +33419,6 @@ elimautism.org
eling.me
elingka.com
elingyun.com
-elinkhost.com
elinzy.com
elitecrm.com
elitenexusgroup.com
@@ -33857,6 +33560,7 @@ emwan.com
emyard.com
en.tm
en51.com
+en5static.com
en8848.com
en998.com
enacdn.biz
@@ -33898,6 +33602,7 @@ engeniustec.com
engeyuan.com
engkoo.com
engley.com
+englibrary.com
english163.com
englishdict.cc
englishmasterclub.com
@@ -33912,6 +33617,7 @@ enianteam.com
enicn.com
eniu.com
enjerr.com
+enjlink.com
enjoy.link
enjoy1992.com
enjoy3c.com
@@ -33984,6 +33690,7 @@ enwto.com
enxicled.com
enyamusical.com
enzj.com
+eo-edgefunctions7.com
eoaluminium.com
eoaoo.com
eoeandroid.com
@@ -34028,7 +33735,6 @@ epay.com
epaynfc.com
epbiao.com
epchina.com
-epchung.com
epcnn.com
epcservicio.com
epcsw.com
@@ -34230,7 +33936,7 @@ esenagro.com
esensoft.com
esfimg.com
esgforum.com
-esgweb.net
+esgz.com
eshangle.com
eshare.cc
esheep.com
@@ -34244,7 +33950,6 @@ eshow365.com
eshufa.com
eshuizong.com
eshukan.com
-eshuu.com
eshzp.com
esie-expo.com
esilk.net
@@ -34274,7 +33979,6 @@ esou.biz
esoua.com
esound.vip
esouou.com
-esoyu.com
esp8266.com
espeedpost.com
esplus.club
@@ -34319,6 +34023,7 @@ eswincomputing.com
eswlnk.com
eswxj.com
eswzx.com
+esxlt.com
esy.org
eszmall.com
esztsg.org
@@ -34330,7 +34035,6 @@ et-fine.com
et001.com
et363.com
et59.com
-et998.com
etagrfid.com
etagri.com
etang.com
@@ -34343,7 +34047,6 @@ etccenters.com
etcchebao.com
etcgsx.com
etchcb.com
-etchcomponents.com
etcsd.com
etcsx.com
etczs.net
@@ -34417,7 +34120,6 @@ etsc-tech.com
etsingshan.com
etsoon.com
etsstar.com
-etstock.net
ett-cn.com
ett.cc
ettabiotech.com
@@ -34489,6 +34191,7 @@ evcard.com
evcard.vip
evcrrc.com
evdays.com
+evdo.vip
eve.moe
evebattery.com
evefashion.com
@@ -34541,6 +34244,7 @@ evileyesaint.com
evilleaker.com
evilwind.fun
evinchina.com
+evisa99.com
evisionics.com
evisugo.com
evketang.com
@@ -34585,7 +34289,6 @@ eweirong.com
eweis.com
ewemt.com
ewen.co
-ewenchina.com
ewenyan.com
ewhnzmqncm7.com
ewidecloud.com
@@ -34657,7 +34360,6 @@ exchen.net
excm.net
excoino.com
exd.design
-exdak.com
exdoll.com
exeedcars.com
exexm.com
@@ -34766,7 +34468,6 @@ eye0777.com
eye0779.com
eyeabc.com
eyee.com
-eyejin.com
eyeofcloud.com
eyeofcloud.net
eyepetizer.net
@@ -34788,7 +34489,9 @@ eyouct.com
eyoumb.com
eyoungindustry.com
eyourbusiness.com
+eyouwx.com
eyprint.com
+eyspwkg.com
eyuangong.com
eyuconnect.com
eyugame.com
@@ -34805,6 +34508,7 @@ eywedu.org
eyy168.com
eyy8.vip
eyyyye.com
+eyz.ink
ez-leaf.com
ez01.com
ezagoo.com
@@ -34845,6 +34549,7 @@ ezpro.pro
ezreal.cool
ezrent.hk
ezrpro.com
+ezsuperfans.com
eztcn.com
eztest.org
eztvnet.com
@@ -34885,6 +34590,7 @@ f3322.org
f3knp1j.xyz
f41g.com
f4h90.cyou
+f526.cc
f52o04oylrbmfw.com
f537.com
f5432.com
@@ -34895,7 +34601,6 @@ f5sd.com
f5yx.com
f5zv2.icu
f64532081.com
-f6991.com
f6yc.com
f7777.net
f7chinavip.com
@@ -35124,7 +34829,6 @@ fangtangtv.com
fangte.com
fangtian.net
fangtong.com
-fangtoon.com
fangtx.com
fangwei315.com
fangweima.com
@@ -35317,7 +35021,6 @@ farennews.com
farerdak.com
farfir.com
farisl.com
-farmanl.com
farmasino.com
farmkd.com
farmsec.com
@@ -35446,7 +35149,6 @@ fc-smartsystem.xyz
fc0531.com
fc0633.com
fc169.net
-fc187.com
fc571.com
fc62.com
fc811.com
@@ -35507,6 +35209,7 @@ fcln.net
fclouddns.net
fcloudpaas.com
fcnes.com
+fcnode.net
fcpawn.com
fcpiao.com
fcport.com
@@ -35519,6 +35222,7 @@ fcsccz.com
fcsdzly.xyz
fcseiko.com
fcstor.com
+fcsubcn.cc
fctaiwan.com
fcuit.com
fcvvip.com
@@ -35604,7 +35308,6 @@ feel-bar.com
feelcars.com
feelchat.net
feelec.net
-feelingmarine.com
feelnowtrip.com
feelsoar.com
feemoo.com
@@ -35622,7 +35325,6 @@ feheadline.com
fehelper.com
fehorizon.com
fei580.com
-fei65.com
feiair.com
feiauto.com
feibajiasu.com
@@ -35704,7 +35406,6 @@ feilu.cc
feilvway.com
feimalv.com
feimao666.com
-feimaolihao.com
feimaoweb.com
feimaoyun.com
feimayun.com
@@ -35771,7 +35472,6 @@ feixiong.tv
feixue666.com
feixuege.com
feixueteam.net
-feixunvip.xyz
feiyang.com
feiyang.hk
feiyang233.club
@@ -35841,6 +35541,7 @@ fengbohan.com
fengbolive.com
fengbuy.com
fengcaijiaju.com
+fengchaoyuan.com
fengche.us
fengchengroup.com
fengchizixun.com
@@ -35894,7 +35595,6 @@ fengli.su
fengliankeji.com
fenglichem.com
fengligroup.com
-fenglil.com
fenglingroup.com
fenglinjiu.com
fenglinlab.com
@@ -35927,7 +35627,6 @@ fengtao365.com
fengtaochanglai.com
fengtianz.com
fengtingsmart.com
-fengtouwang.com
fengtupic.com
fengwanyx.com
fengwatch.com
@@ -35973,7 +35672,6 @@ fenjiji.net
fenjj.com
fenke.com
fenking.club
-fenlei.biz
fenlei168.com
fenlei265.com
fenleidao.com
@@ -36030,6 +35728,7 @@ fevte.com
feydj.com
feyer-tc.com
ff112222.com
+ff14.cloud
ff54.ink
ff63.com
ff8828.com
@@ -36052,7 +35751,6 @@ ffmobi.com
ffmomola.com
ffnmu.com
ffpedia.com
-ffphb.com
ffpw1688.com
ffquan.com
ffreeslott.com
@@ -36075,13 +35773,11 @@ fggyw.com
fghi34.com
fgi90.com
fgidna.com
-fgjsxg.com
fgkj.cc
fglt.net
fgnwct.com
fgo.wiki
fgowiki.com
-fgt120.com
fgtxnews.com
fgvisa.net
fh01.com
@@ -36100,6 +35796,7 @@ fheb-four.com
fheb-six.com
fhfxys.com
fhgame.com
+fhgjds.com
fhguotai.com
fhl05161ps.com
fhldns.com
@@ -36143,7 +35840,6 @@ ficochina.net
ficowshen.com
fiehff.com
fieldcommunicator.net
-fieldschina.com
fiezaits.com
fifa666.com
fifaschool.com
@@ -36304,7 +36000,6 @@ fiui.org
fivecakes.com
fivedo.net
fiveplus.com
-fivestarcompanions.com
fivestarsolar.com
fivision-tech.com
fix666.com
@@ -36335,7 +36030,6 @@ fjber.com
fjbgwl.com
fjbiopharma.com
fjbk.org
-fjblq.com
fjbyjs.com
fjc001.com
fjce.com
@@ -36351,8 +36045,8 @@ fjctyz.net
fjcyl.com
fjcyl.org
fjdaily.com
+fjdaze.com
fjdc.xyz
-fjdexing.com
fjdf.vip
fjdfxy.com
fjdh.com
@@ -36393,6 +36087,7 @@ fjjcled.com
fjjianxin.com
fjjltgyl.com
fjjnsn.com
+fjjoyz.com
fjjsp01.com
fjjszg.com
fjjyt.net
@@ -36610,7 +36305,6 @@ flowtechgd.com
flowtechsh.com
flpsz.com
flpwb.com
-flqhd.com
flqrmyy.com
flrcw.com
flsrp.com
@@ -36702,7 +36396,6 @@ fminers.com
fmkefu.com
fmkpharm.com
fmmob.com
-fmncz.com
fmpan.com
fmscm.com
fmsdlb.com
@@ -36787,7 +36480,6 @@ fogcloud.io
foguanghui.org
fohohr.com
foidn.com
-foioo.com
foisonad.com
foisongroup.com
fojiaonet.com
@@ -36930,7 +36622,6 @@ fotao9.com
fotile.com
fotileglobal.com
fotilestyle.com
-fotoe.com
fotomore.com
fotoplace.cc
fotosay.com
@@ -36954,7 +36645,6 @@ founderpod.com
foundersc.com
foundertech.com
foundertype.com
-foundgroup.net
founpad.com
four-faith.com
fourco-inc.com
@@ -36962,6 +36652,7 @@ fourfaithwater.com
fovmy.com
fovtedt.com
fow.ink
+fowep.com
fox-studio.net
fox008.com
foxconn.com
@@ -36974,6 +36665,7 @@ foxphp.com
foxqq.com
foxtable.com
foxuc.com
+foxugame.com
foxwaf.com
foxwho.com
foxwq.com
@@ -36994,7 +36686,6 @@ fpga-china.com
fpgabbs.com
fpgakey.com
fpgaw.com
-fpgqh.com
fphis.com
fphs.cc
fphs5.com
@@ -37006,10 +36697,8 @@ fpsace.com
fpsjk.com
fpstt.com
fpwap.com
-fpwjq.com
fpxz.net
fpyy120.com
-fq-top-v-fast.com
fq688.com
fqapps.com
fqfilm.com
@@ -37216,12 +36905,10 @@ fs0757.com
fs121.com
fs1982.com
fs31.com
-fs315.org
fs58.com
fs7000.com
fsabwy.com
fsaii.com
-fsauto.org
fsbankonline.com
fsbldjd.com
fsbqgd.com
@@ -37252,7 +36939,6 @@ fsgcw.com
fsgechao.com
fsggb.com
fsgplus.com
-fsguangjun.com
fsgzhg.com
fshczf.com
fshd.com
@@ -37389,6 +37075,7 @@ ftzn.net
ftzx.com
fu-guan.com
fu-rui.com
+fu2zu.com
fu57.com
fu62.vip
fuanna.com
@@ -37444,7 +37131,6 @@ fuhai360.com
fuhaikj.com
fuhancapital.com
fuhanziben.com
-fuhaodaquan.cc
fuhaodaquan.org
fuhaoku.com
fuhefu.com
@@ -37520,6 +37206,7 @@ fun.tv
fun2ex.com
fun4go.com
funcdn.com
+funcrea.com
functionads.com
functionaltextilesshanghai.com
functioncool.com
@@ -37636,6 +37323,7 @@ fuxinews.com
fuxinghf.com
fuxingtech.com
fuxingwang.com
+fuxuanji-jp.com
fuxunpay.com
fuyang.com
fuyang.net
@@ -37705,9 +37393,8 @@ fwsfwef2.fun
fwt0.com
fwtoys.com
fwvv.net
+fwwevez.xyz
fwxgx.com
-fwzjia.com
-fx-jgworks.com
fx-plc.com
fx120.net
fx168api.com
@@ -37918,7 +37605,6 @@ fzjdct.com
fzjingzhou.com
fzjxr.com
fzjxw.com
-fzjyxy.com
fzkjg.com
fzl7.com
fzlawyers.net
@@ -37971,6 +37657,7 @@ g-medon.com
g-spin.com
g-tar.com
g-var.com
+g052m43e2ghn.com
g1080.com
g11edashb1.fun
g12345.com
@@ -37980,7 +37667,6 @@ g188.net
g1c5.com
g1d.net
g1f5.com
-g1jnmyj2yu.com
g1yx.com
g2.link
g20chn.org
@@ -38020,7 +37706,6 @@ gaaamee.com
gaapqcloud.com
gac-capital.com
gac-nio.com
-gaccode.com
gacfca.com
gacfcasales.com
gacfiatauto.com
@@ -38029,10 +37714,8 @@ gaclib.net
gacmotor.com
gacrnd.com
gacsofinco.com
-gadanhua.com
gadlee.com
gae-pro.com
-gae-yfeigaggoagjag.com
gaeadata.com
gaeamobile-inc.net
gaeamobile.net
@@ -38045,7 +37728,6 @@ gagaga.icu
gagaga.tech
gagahi.com
gagaslklxjasdkafj.com
-gahejiao.com
gahwilertaxservice.com
gai.net
gaiabiohx.com
@@ -38066,6 +37748,7 @@ gaintop.com
gairuo.com
gaisen.ltd
gaishichina.com
+gaishitongshu.com
gaitu.com
gaituba.com
gaitubao.com
@@ -38090,7 +37773,7 @@ galaxydreams.site
galaxyfont.com
galaxyinfo.com
galaxymagnets.com
-galaxyns.net
+galaxyoversea.com
galileo.work
galsun.com
galudisu.info
@@ -38178,7 +37861,6 @@ gamerstorm.com
gamesh.com
gameshr.com
gamesifu.com
-gamestarfield.com
gametanzi.com
gametaptap.com
gametdd.com
@@ -38441,7 +38123,6 @@ gatewang.com
gateweb3.cc
gateweb3.io
gather-dns.com
-gatherfind.com
gaugan.com
gaush.com
gavill.com
@@ -38473,7 +38154,6 @@ gbiac.net
gbicdn.com
gbicom.com
gbictc.com
-gbieg.com
gblhgk.com
gbma.org
gbndash2.fun
@@ -38490,7 +38170,6 @@ gbt88.com
gbtranswins.com
gbvh.com
gbw114.com
-gbym.net
gc-zb.com
gc0771.com
gc1616.com
@@ -38641,7 +38320,6 @@ gdccus.org
gdcdsh.com
gdceg.com
gdcgkg.com
-gdchain.org
gdchanbo.com
gdchess.com
gdchjt.com
@@ -39196,6 +38874,7 @@ geekxue.com
geekzhao.me
geekzl.com
geelevel.com
+geely-auto-gtm.com
geely-test.com
geely.com
geely.pe
@@ -39274,7 +38953,6 @@ genchim.com
gendan5.com
gendantong.com
gendone.com
-genebiotec.com
genegeo.com
geneliunx.com
genelotus.com
@@ -39409,7 +39087,6 @@ getu.fun
getui.com
getui.net
getui.vip
-getulab.com
getvidi.co
geuba.xyz
gewala.com
@@ -39423,7 +39100,6 @@ gewuer.com
gewuzhixiang.com
gexiao.me
gexiaocloud.com
-gexincn.com
gexinda.com
gexing.com
gexing.me
@@ -39477,10 +39153,8 @@ gfnormal00ar.com
gfnormal01ab.com
gfnormal01ad.com
gfnormal01aj.com
-gfnormal02ak.com
gfnormal02ap.com
gfnormal03ae.com
-gfnormal04an.com
gforward.org
gfoxsoft.net
gfren.org
@@ -39493,17 +39167,14 @@ gftuan.com
gfun.me
gfund.com
gfvip00ae.com
-gfvip00an.com
gfvip01am.com
gfvip02aj.com
gfvip05aj.com
gfvip06ae.com
gfvip06as.com
-gfvip06at.com
gfvip07am.com
gfvip07ao.com
gfvip08ah.com
-gfvip08am.com
gfxaa.com
gfxcamp.com
gfxtr1.com
@@ -39527,7 +39198,6 @@ ggbondtech.com
ggbygx.com
ggcimbar.com
ggcj.com
-ggcname.com
ggcx.com
ggcykf.com
ggdata.com
@@ -39579,7 +39249,6 @@ ggmsw.com
ggmymy.com
ggnops.com
ggnqmy.com
-ggo.la
ggo.net
ggoplay.com
ggowan.com
@@ -39619,7 +39288,6 @@ ggxue.com
ggxx.net
ggy.net
ggy775.com
-ggyoupinshu.com
ggyouyu.com
ggysc.com
ggysfw.com
@@ -39765,7 +39433,6 @@ giiso.com
gijsq.com
gildata.com
gilieye.com
-gillmoversuae.com
giltbridge.com
giltworld.com
gimcyun.com
@@ -39777,11 +39444,12 @@ ginde.com
ginfon.com
gingerbreadstudio.cc
gingyan.com
-ginihbg.com
ginlong.com
ginshio.org
ginwa.com
gio.ren
+gio07231rp.com
+gio07250rp.com
gioccc.com
giocdn.com
gionee.com
@@ -39794,7 +39462,6 @@ giraff3.com
girdear.net
girl13.com
girls-frontline.com
-girls007.com
girlsfighters.com
girlsheaven-job.net
girlw.net
@@ -39835,7 +39502,6 @@ giyu8.com
gizaworks.com
gizlnr.com
gizwits.com
-gj-robotics.com
gj555.net
gj62.com
gjbaek.ren
@@ -39865,15 +39531,14 @@ gjmbwxpt.com
gjmbwxzx.com
gjmedashb0.fun
gjmrk.com
-gjnbf.com
gjnlyd.com
gjpdh.com
gjrwls.com
gjsc.info
gjsj.com
gjsun.com
+gjtmu.com
gjtt.net
-gjtxwh.com
gjw.com
gjw123.com
gjwl123.com
@@ -39923,7 +39588,6 @@ gkshanghai.com
gkshuju.com
gktianshanjd.com
gkwo.net
-gkx.com
gkxd.com
gkxs.com
gkxx.com
@@ -39957,11 +39621,9 @@ glab.online
gladcc.com
gladdigit.com
glafamily.com
-glajzl.com
glamever.com
glamourred.com
glamourtrains.com
-glandpackingindia.com
glanimaltrade.com
glanu.com
glaproject.com
@@ -40006,7 +39668,6 @@ glfdfcyy.com
glflyy.com
glfpii.com
glfund.com
-glfyfs.com
glfyjg.com
glgangyu.com
glgcsj.com
@@ -40033,7 +39694,6 @@ glhcoptical.com
glhdq.com
glhfmy.com
glhfsy.com
-glhmgs.com
glhmmr.com
glhnkj.com
glhospital.com
@@ -40102,6 +39762,7 @@ glmmodels.com
glncn.com
glnewstar.com
gloamingtechnology.com
+global-dba.com
global-download.acer.com
global-harbor.com
global-idc.net
@@ -40140,6 +39801,7 @@ globalsourcingbiz.com
globalstech.com
globalston.com
globaltradecoo.com
+globalvisa888.com
globalx-nest.com
globebill.com
globecancer.com
@@ -40251,7 +39913,6 @@ glzyjt.com
glzzjy.com
gm-scm.com
gm016.com
-gm1.cc
gm193.com
gm3.win
gm35.com
@@ -40273,6 +39934,7 @@ gmcc.net
gmcchina.net
gmcinnov.com
gmcmonline.com
+gmdt9b.com
gmdun.com
gmecn.com
gmed.cc
@@ -40458,7 +40120,6 @@ gohong.com
going-link.com
gojiaju.com
gojira.net
-gojiscm.com
gokaigai.com
goke.com
gokols.com
@@ -40501,7 +40162,6 @@ goldenname.com
goldenseaair.com
goldenthroat.com
goldentom.com
-goldenwoner.com
goldfoil.com
goldgov.com
goldgrid.com
@@ -40566,7 +40226,6 @@ gongchu.com
gongfubb.com
gongfudou.com
gongfugw.com
-gongheshengshi.com
gongji58.com
gongjiao.com
gongjiao160.com
@@ -40574,7 +40233,6 @@ gongjiaomi.com
gongjiyun.com
gongju.com
gongju5.com
-gongjuji.net
gongjux.com
gongkaohub.com
gongkaoleida.com
@@ -40641,6 +40299,7 @@ gongzuoshouji.net
gongzuoyun.org
gonsun.com
gonvvama.net
+gonxt.com
gonyn.com
goo17.com
gooagoo.com
@@ -40705,11 +40364,11 @@ goodwillcis.com
goodwillresource.com
goodwyee.com
goodyoungtea.com
-goodyw.com
goodzuji.com
goodzuo.com
goofish.com
googcc.net
+google-hub.com
google-play.mobi
google444.com
googlebbs.net
@@ -41089,7 +40748,6 @@ grksc.com
grmxdy.com
grnuo.com
groad.net
-grondrens.com
gronhi.com
groovymedicine.com
grouk.com
@@ -41163,6 +40821,7 @@ gsfrj.com
gsfybjy.com
gsfycloud.com
gsfzb.com
+gsgltz.com
gsgs10086.com
gsgundam.com
gshangju.com
@@ -41177,6 +40836,7 @@ gsicpa.net
gsidy.com
gsjb.com
gsjie.com
+gsjkjt.com
gsjqtv.com
gsjt-cn.com
gsjt56.com
@@ -41197,6 +40857,7 @@ gsmgw.com
gsmpers.com
gsmuban.com
gsmxjy.com
+gsnhcg.com
gsnytz.com
gsp11-cn.ls.apple.com
gsp12-cn.ls.apple.com
@@ -41215,7 +40876,6 @@ gsrwfyy.com
gss56.com
gssag.com
gssbh.com
-gssdlv.com
gsseo.net
gssey.com
gsshylsh.com
@@ -41224,6 +40884,7 @@ gsskyst.com
gssltxrmyy.com
gsslxh.com
gsstargroup.com
+gsstic.com
gsstock.com
gsstsdgs.com
gsswtz.com
@@ -41379,7 +41040,6 @@ gtm-i2d9.com
gtm-we.com
gtm.pub
gtmlufax.com
-gtmm.net
gtmsh.com
gtn9.com
gtobal.com
@@ -41410,7 +41070,6 @@ gu166.com
gu360.com
gua123.com
guabu.com
-guaguasheng.com
guaguay.com
guahao-inc.com
guahao.com
@@ -41484,6 +41143,7 @@ guangjipharm.com
guangjiubusiness.com
guangjiucompany.com
guangju123.com
+guangjuke.com
guangka.com
guangkatf.com
guangli88.com
@@ -41611,7 +41271,6 @@ guanyezipper.com
guanyierp.com
guanyinshan.com
guanyiyun.com
-guanyou.ltd
guanzhongrc.com
guanzhu.mobi
guanzhulian.com
@@ -41684,7 +41343,6 @@ guifan.cc
guifancha.com
guifanku.com
guifeng.net
-guifudi.com
guifun.com
guigang688.com
guiganganlan.com
@@ -41762,7 +41420,6 @@ guizhougames.com
guizhougas.com
guizhounaishili.com
guizhoushengyang.com
-guizhouxinsheng.com
guizhutanglao.com
guj6.com
gujianba.com
@@ -41791,14 +41448,12 @@ gumade.com
gumang.com
gumaor.com
gumeng.net
-gumengya.com
gumiji.com
gumingnc.com
gumo.pro
gumodels.com
gumpmall.com
gundambattle.com
-gungahlinproperty.com
gunshitech.com
gunsuo.com
gunxueqiu.com
@@ -41872,7 +41527,6 @@ guojing-tech.com
guojiseka.com
guojiwuye.com
guojixiao.com
-guojixuexiao.com
guojixuexiao.net
guojixuexiao.org
guojiyujiaxueyuanzongbu.com
@@ -41970,7 +41624,6 @@ guoyuejituan.com
guoyunjc.com
guoyusec.com
guoyutec.com
-guoyuwo.com
guozaoke.com
guozeyu.com
guozh.net
@@ -42019,7 +41672,6 @@ gushiji.cc
gushiju.net
gushiwen.org
gushufang.com
-gusiyuan.com
gusspro.com
gusucaishui.com
gususoft.com
@@ -42040,7 +41692,6 @@ guwu121.com
guxiang.com
guxunw.com
guyaheng.com
-guyiying.com
guyizisha.com
guyuehe.com
guyuehome.com
@@ -42170,7 +41821,6 @@ gxanchen.com
gxankao.com
gxantu.com
gxany.com
-gxaohua.com
gxaoma.com
gxar.com
gxarl.com
@@ -42180,7 +41830,6 @@ gxawjmy.com
gxaxjy.com
gxaxpc.com
gxayn.com
-gxazfw.com
gxb.io
gxbaichen.com
gxbaidu.net
@@ -42232,7 +41881,6 @@ gxbrm.com
gxbs.net
gxbscbh.com
gxbsfj.com
-gxbsjsgc.com
gxbsky.com
gxbsnx.com
gxbssyy.com
@@ -42351,7 +41999,6 @@ gxcznews.com
gxcznews.net
gxczrc.com
gxdadu.com
-gxdahua.com
gxdairy.com
gxdajin.com
gxdajixiong.com
@@ -42509,7 +42156,6 @@ gxfzpg.com
gxfzyjs.com
gxg1978.com
gxgaia.com
-gxgama.com
gxgangji.com
gxgangxin.com
gxgangyuan.com
@@ -42571,7 +42217,6 @@ gxgljy.com
gxglkg.com
gxglnykj.com
gxglory.com
-gxgltzjt.com
gxglyl.com
gxglys.com
gxglzj.com
@@ -42704,7 +42349,6 @@ gxhhmed.com
gxhhzsjt.com
gxhigreen.com
gxhis.net
-gxhiyuan.com
gxhjbw.com
gxhjjt.net
gxhjky.com
@@ -42773,10 +42417,8 @@ gxhuaen.com
gxhuahui.com
gxhuanbaojt.com
gxhuapei.com
-gxhuaqi.com
gxhuaqu.com
gxhuar.com
-gxhuashuo.com
gxhuaxing.com
gxhuaxintech.com
gxhui.com
@@ -42802,7 +42444,6 @@ gxhyey.com
gxhygg.com
gxhyhs.com
gxhykglass.com
-gxhym.com
gxhyq.com
gxhyscl.com
gxhysm.com
@@ -42875,7 +42516,6 @@ gxjhcj.com
gxjhgczx.com
gxjhgd.com
gxjhgs.com
-gxjhgy.com
gxjhjcw.com
gxjhjdsb.com
gxjhjs.com
@@ -42902,7 +42542,6 @@ gxjigeng.com
gxjigeyuan.com
gxjihu.com
gxjinan.com
-gxjinchahua.com
gxjingsheng.com
gxjingu.com
gxjinhai.com
@@ -42931,7 +42570,6 @@ gxjkhj.com
gxjkjg.com
gxjkjyjc.com
gxjkwy.com
-gxjkzx.com
gxjl99.com
gxjla.com
gxjlbw.com
@@ -43079,7 +42717,6 @@ gxlanco.com
gxlancogroup.com
gxlanlian.com
gxlansheng.com
-gxlanta.com
gxlbang.com
gxlbbwg.com
gxlbgf.com
@@ -43130,7 +42767,6 @@ gxliri.com
gxlituo.com
gxliuhang.com
gxliuqiaojidian.com
-gxliuyuan.com
gxlixin.com
gxliyugs.com
gxljgc.com
@@ -43179,7 +42815,6 @@ gxlvjian.com
gxlvtong.com
gxlvwang.com
gxlwdsslgy.com
-gxlwjx.com
gxlwlc.com
gxlwt.com
gxlxgg.com
@@ -43197,7 +42832,6 @@ gxlycyxh.com
gxlyghy.com
gxlygyl.com
gxlyhbkj.com
-gxlyjs.com
gxlyjt.com
gxlzbbw.com
gxlzck.com
@@ -43335,17 +42969,14 @@ gxnxdb.com
gxnxgd.com
gxnydq.com
gxnymt.com
-gxnzf.com
gxnzjz.com
gxnzzy.com
gxoc168.com
gxoem.com
gxok.com
gxosjc.com
-gxostec.com
gxota.com
gxota.net
-gxotsc.com
gxouguan.com
gxoulian.com
gxouwen.com
@@ -43364,8 +42995,6 @@ gxpgy.com
gxphc.com
gxphd.com
gxphj.com
-gxpiao.com
-gxpikaqiu.com
gxpingen.com
gxpinn.com
gxpjzs.com
@@ -43434,7 +43063,6 @@ gxqzxw.com
gxqzxyd.com
gxqzyz.com
gxqzzy.com
-gxrahswhysg.com
gxrasafety.com
gxrayhome.com
gxrc.com
@@ -43450,7 +43078,6 @@ gxrczc.net
gxrdgroup.com
gxrdjy.com
gxrenheng.com
-gxrfy.com
gxrfys.com
gxrgjd.com
gxrgwl.com
@@ -43500,10 +43127,8 @@ gxsckj.net
gxscq.com
gxscse.com
gxscsw.com
-gxscwy.com
gxscyg.com
gxsd.net
-gxsddz.com
gxsdem.com
gxsdkj.com
gxsdpx.com
@@ -43551,7 +43176,6 @@ gxshudao.com
gxshuibao.com
gxshuixie.com
gxshunxiu.com
-gxshwlw.com
gxshxc.com
gxshxf.com
gxshxlpx.com
@@ -43639,7 +43263,6 @@ gxtfmy.com
gxtfxx.com
gxthcpa.com
gxthxxkj.com
-gxthy168.com
gxthyy.com
gxtianlan.com
gxtianmiao.com
@@ -43662,7 +43285,6 @@ gxtnc.com
gxtodo.com
gxtonghui.com
gxtongji.com
-gxtongpai.com
gxtongtai.com
gxtongyin.com
gxtongzhu.com
@@ -43771,7 +43393,6 @@ gxwzyl.com
gxxbx.com
gxxbysy.com
gxxbzm.com
-gxxbzs.com
gxxdbp.com
gxxdit.com
gxxdpc.com
@@ -43799,7 +43420,6 @@ gxxhtax.com
gxxhtsj.com
gxxhtx.com
gxxhtzp.com
-gxxhyjjt.com
gxxhz.com
gxxhzp.com
gxxiangxing.com
@@ -43879,7 +43499,6 @@ gxyasuoji.com
gxybsw.com
gxybyy.com
gxyc.net
-gxycdp.com
gxycjy.com
gxycwh.com
gxycwy.com
@@ -43927,7 +43546,6 @@ gxyingyue.com
gxyinniyuan.com
gxyintian.com
gxyinyulanyingguigang.com
-gxyipin.com
gxyixin.com
gxyiz.com
gxyj.com
@@ -43951,7 +43569,6 @@ gxyls.com
gxylsjsp.com
gxylswkj.com
gxympay.com
-gxymyl.com
gxynjx.com
gxynlts.com
gxyoj.com
@@ -43983,7 +43600,6 @@ gxyuanfeng.com
gxyuansheng.com
gxyuanyun.com
gxyuchuan.com
-gxyuehe.com
gxyuheju.com
gxyunhua.com
gxyunsen.com
@@ -44134,7 +43750,6 @@ gxzydl.com
gxzyfs.com
gxzygygs.com
gxzyhb.com
-gxzyhjd.com
gxzyjl.com
gxzyjsgc.com
gxzyky.com
@@ -44217,7 +43832,6 @@ gypzkat.com
gyqcw.com
gyqqd.com
gyqrmyy.com
-gyqzby.com
gyr.cc
gyrcw.com
gyrmyy.com
@@ -44398,7 +44012,6 @@ gzdtcy168.com
gzdtg.com
gzduguo.com
gzdysx.com
-gzdzbj.com
gzebpubservice.com
gzedu.com
gzeic.com
@@ -44600,7 +44213,6 @@ gzmeichang.com
gzmiden.com
gzminjia.com
gzmiyuan.com
-gzmjhzs.com
gzmlfcyy.com
gzmofa.com
gzmould.com
@@ -44649,6 +44261,7 @@ gzpydlc.com
gzpyxz.net
gzqbd.com
gzqdedu.com
+gzqgdg.com
gzqiche.com
gzqixun-tech.com
gzqljxd.com
@@ -44829,6 +44442,7 @@ gzxzjy.com
gzyajs.com
gzyancheng.com
gzyangai.com
+gzybao.com
gzycdy.com
gzych.vip
gzycsjgs.com
@@ -44848,7 +44462,6 @@ gzyouai.com
gzyowin.com
gzyqtlxs.com
gzyqwl.net
-gzysbpay.com
gzysnkyy.com
gzytgf.com
gzyucai.com
@@ -44931,7 +44544,6 @@ h3ue2s.com
h3wog.com
h3yun.com
h4088.com
-h4532.com
h4k5.com
h4sud3rr4pmu.com
h5-share.com
@@ -44940,7 +44552,6 @@ h5-yes.com
h5.net
h51.com
h51h.com
-h5495.com
h554.com
h55u.com
h576.com
@@ -45081,7 +44692,6 @@ haibaoyouxi.com
haibeinews.com
haibeishangmao.com
haibian.com
-haiboinvest.com
haibowh.com
haiboyi.com
haica.cc
@@ -45114,6 +44724,7 @@ haier.hk
haier.net
haiercash.com
haierfinancial.com
+haiermoney.com
haiershequ.com
haiershui.com
haiersmarthomes.com
@@ -45259,7 +44870,6 @@ haitangw.cc
haitangw.net
haitao.co
haitao.com
-haitao369.com
haitaohub.com
haitaoj.com
haitaolab.com
@@ -45366,12 +44976,9 @@ halcyonz.com
halead.com
halfrost.com
halfsug.com
-halidown.com
haligame.com
-halihali6.com
halihali9.com
halixun.com
-haliyy.com
haljl.com
halloar.com
hallofix.com
@@ -45392,6 +44999,7 @@ han-ju.cc
hanamichi.wiki
hanas.com
hanascitygas.com
+hanbi.live
hanbige.com
hanboshi.com
hanbridge.org
@@ -45415,13 +45023,11 @@ handongkj.com
handongruanjian.com
handpk.com
handsfree.work
-handtrip.com
handu.com
handuyishe.com
handyfriendship.com
hanenyunxiao.com
hanergy.com
-hanergymobileenergy.com
hanex.cc
hanfakg.com
hanfan.cc
@@ -45454,7 +45060,6 @@ hangjizulin.com
hangkong.com
hangkongxx.com
hanglorygroup.com
-hangmaquan.com
hangongjk.com
hangpai.org
hangpu-topsys.com
@@ -45491,13 +45096,11 @@ hangzhouweifeng.com
hangzhouyiyao.com
hangzhouyq.com
hangzhouzehe.com
-hangzyuyuan.com
hanhai.net
hanhaiqikan.com
hanhanfx.com
hanhanmanhua.com
hanhe-cable.com
-hanhengtanhuang.com
hanhongchina.com
hanhoo.com
hanhua.com
@@ -45506,10 +45109,8 @@ hanhuilvshi.com
hanihanrf.com
hanjea.com
hanjianbing.org
-hanjiangsanguo.com
hanjiaying.com
hanjie.biz
-hanjimeixue.com
hanjjl.com
hanju-tv.org
hanjuejituan.com
@@ -45635,7 +45236,6 @@ hao120.cc
hao123-hao123.com
hao123.com
hao123.com.sg
-hao123.lt
hao123.net
hao123.ph
hao123.sh
@@ -45650,7 +45250,6 @@ hao1cm.com
hao22.com
hao222.com
hao222.net
-hao224.com
hao2345.com
hao24.com
hao245.com
@@ -45683,7 +45282,6 @@ haoayi.xyz
haobangkj.com
haobangni.com
haobangscm.com
-haobanyi.com
haobiaoke.com
haobtc.com
haocaa.com
@@ -45705,7 +45303,6 @@ haochimei.com
haochu.com
haochuguo.com
haocw.com
-haodadachina.com
haodai.com
haodanku.com
haodaquan.com
@@ -45774,7 +45371,6 @@ haohaozhu.com
haohaozhu.me
haohead.com
haohexinxing.com
-haohongfan.com
haoht123.com
haohuan.com
haohuanjiao.com
@@ -45782,7 +45378,6 @@ haohuo.xin
haohuoa.com
haohuoyuan.com
haohxs.com
-haoib.com
haointl.com
haoinvest.com
haoji.me
@@ -45866,7 +45461,6 @@ haoqixingstem.com
haoqq.com
haoqu.net
haoqu99.com
-haor233.com
haoranbio.com
haorantech.com
haorc.com
@@ -46056,6 +45650,7 @@ happyplaygame.net
happysky.org
happystudy.cc
happytimenet.com
+happyvalley.link
happywalk.net
happyya.com
hapying.com
@@ -46111,6 +45706,7 @@ hassbian.com
hassfull.com
hasstatic.com
hastenpharma.com
+hasuhasu.com
hatanggame.com
hatangqp.com
hatangyx.com
@@ -46226,11 +45822,13 @@ hbcljyc.com
hbclqcw.com
hbclzq.com
hbcoal.com
+hbcof.com
hbcofco.com
hbcourt.org
hbct-wiremesh.com
hbctgs.com
hbcthotels.com
+hbctic.com
hbctjk.com
hbctjt.com
hbcwt.com
@@ -46386,8 +45984,6 @@ hblhfrp.com
hblhnykj.com
hbliti.com
hblq.com
-hblryz.com
-hblszzs.com
hblszzyy.com
hbltyh.com
hbltzb.com
@@ -46593,7 +46189,6 @@ hbzh.net
hbzhan.com
hbzhjxzz.com
hbzhonghai.com
-hbziwei.com
hbzjjk.com
hbzjrx.com
hbzjzb.com
@@ -46643,14 +46238,12 @@ hcclhealthcare.com
hccoeutg.com
hccpcba.com
hcdamai.com
-hcdblg.com
hcdiy.com
hcdyhr.com
hceia.com
hcenc.com
hcepay.com
hcfac888.com
-hcfang.net
hcfc168.com
hcftyy.com
hcgaokong.com
@@ -46865,7 +46458,6 @@ hdzuoye.com
hdzxyy.com
he-edu.com
he-ku.com
-he-nan.com
he-one.com
he17.com
he1j.com
@@ -46893,6 +46485,7 @@ healthjd.com
healthr.com
healthybaike.com
healthych.com
+healthydigitallife.com
healzentx.com
heanyo.com
hearstchina.com
@@ -46904,6 +46497,7 @@ heating-sh.com
heatingtrace.com
heavenlywind.cc
heavenonearthhealingalternatives.com
+heavly1.com
hebangdianzi.com
hebbank.com
hebbc.org
@@ -46999,7 +46593,6 @@ heclife.com
heclouds.com
hecoe.com
hecpharm.com
-hedaenergy.com
hedaoapp.com
hedaozi.com
hedasudi.com
@@ -47050,7 +46643,6 @@ heibai.org
heibaicao.com
heibaige.com
heibailianmeng.com
-heibaimanhua.com
heibaimeng.com
heibaixiaoyuan.com
heibandongcha.com
@@ -47078,6 +46670,7 @@ heijin.org
heike07.com
heilanhome.com
heilei.com
+heilifun.com
heilongjianggames.com
heiluo.com
heima.com
@@ -47102,7 +46695,6 @@ heiniufeiye.com
heinote.com
heinw.com
heirenlei.com
-heisener.com
heisha.net
heishao.net
heishenhua.com
@@ -47127,11 +46719,9 @@ heiyanimg.com
heiying.cc
heiyu.cc
heiyu.space
-heiyuewan.com
heiyunxitong.com
heizhushoes.com
hejia-china.com
-hejiadianshang.com
hejiang.com
hejiangroup.com
hejiantech.com
@@ -47160,7 +46750,6 @@ helipay.com
helishun.com
helitzc.com
heliuyan.com
-helixph.com
hello-fpga.com
hello-inc.com
hello1010.com
@@ -47257,6 +46846,7 @@ henanrc.com
henansha.com
henanshengtang.com
henansyj.com
+henanxinjiang.com
henanyikayi.com
henanyixue.com
henanzhulongjx.com
@@ -47340,7 +46930,6 @@ hengyagongshui.com
hengyan.com
hengyankeji.com
hengyemould.com
-hengyi-optics.com
hengyi.com
hengyimining.com
hengyishihua.com
@@ -47373,7 +46962,6 @@ hepan.org
hepartshome.com
hepatox.org
hepingdao.net
-hepingtieli.com
hepmall.com
hepost.com
hepu123.com
@@ -47392,6 +46980,7 @@ herdpcdn.com
herdsric.com
here120.com
here325.com
+herecdn.com
heredlift.com
herenit.com
hereseo.net
@@ -47477,6 +47066,7 @@ hexinchemical.com
hexindai.com
hexinli.org
hexinwanjia.com
+hexiny.com
hexinyu.com
hexmeet.com
hexsen.com
@@ -47501,7 +47091,6 @@ heyiguoyuan.com
heyimiao.com
heyingcn.com
heyingedu.com
-heyinguanli.com
heyinshiliu.com
heyix.com
heymeo.net
@@ -47518,7 +47107,6 @@ heytapdownload.com
heytapimage.com
heytapmobi.com
heytapugc.com
-heytea-co.com
heytea.com
heythings-iot.com
heytime.com
@@ -47575,7 +47163,6 @@ hfbcjt.com
hfbeta.com
hfbtv.com
hfbz.com
-hfcanxin.com
hfcentury.com
hfchosp.com
hfchzyy120.com
@@ -47638,7 +47225,6 @@ hfrcbc.com
hfrh-emc.com
hfrqh.com
hfrsggff.com
-hfrtsm.com
hfsava.com
hfshec.com
hfsia.com
@@ -47661,7 +47247,6 @@ hfx.net
hfxcfiberoptic.com
hfxczj.com
hfxg.net
-hfxyjx.com
hfyestar.com
hfykd.com
hfykt.com
@@ -47707,7 +47292,6 @@ hgitv.com
hgj.com
hgj668.com
hgjart.com
-hgjiancai.com
hgjl.net
hgjob.com
hgjtcn.com
@@ -47956,6 +47540,7 @@ hifishuo.com
hifiveai.com
hifkw.com
hifkw.xin
+hifleet.com
hifly.mobi
hifly.tv
hifpga.com
@@ -47983,7 +47568,6 @@ highlightoptics.com
highlionceramic.com
highlm.com
highly.cc
-highpriceddatinguk.com
highsharp.com
highstar.com
hightac.com
@@ -48068,7 +47652,6 @@ himengyou.com
himetoo.com
himile.com
himin.com
-himisw.com
himmpat.com
himorfei.com
hin.cool
@@ -48090,6 +47673,7 @@ hiphi.com
hiphop8.com
hiphotonics.com
hipiao.com
+hipole.com
hippoanimation.com
hippter.com
hipu.com
@@ -48161,7 +47745,6 @@ hitqs.com
hitrip.info
hitsame.com
hitui.com
-hitutu.com
hitv.com
hiusers.com
hiv888.com
@@ -48287,7 +47870,6 @@ hk-xin.com
hk.uy
hk0523.com
hk2875.com
-hk515.net
hk603.hk
hk662.com
hk8668.com
@@ -48305,11 +47887,11 @@ hkcgart.com
hkcna.hk
hkcoalition.com
hkcpr.com
+hkctgbus.com
hkcts.com
hkctshotels.com
hkctsmembers.com
hkcwdc.com
-hkdcn.com
hkdfc.com
hkdfgroup.com
hkdqgroup.com
@@ -48446,7 +48028,6 @@ hljradio.com
hljrcc.com
hljsdm.com
hljsek.com
-hljsfjy.com
hljsjtzy.com
hljsph.com
hljszjxhw.com
@@ -48455,12 +48036,10 @@ hljtcm.com
hljtv.com
hljtx.com
hljucm.net
-hljwmcx.com
hljxgs.com
hljyestar.com
hljyqnj.com
hljyushi.com
-hljyzy.com
hljzc.net
hljzl.icu
hlkd.pro
@@ -48510,7 +48089,6 @@ hlyiq.com
hlytec.com
hlyy8.com
hlyykp.com
-hlzad.com
hlzaojia.com
hlzq.com
hlzqgs.com
@@ -48539,7 +48117,6 @@ hmervjk.com
hmf-china.com
hmfxw.com
hmgbtv.com
-hmgfair.com
hmgj.com
hmgreat.com
hmhliot.com
@@ -48590,7 +48167,6 @@ hmzs.net
hmzx163.com
hn-binglang.com
hn-cbec.com
-hn-coach.com
hn-fa.com
hn-hwqjxh.com
hn-medical.com
@@ -48693,13 +48269,13 @@ hnfapiao.com
hnfcis.com
hnfcjr.com
hnfck.com
-hnfcly.com
hnfdx.com
hnfjz.com
hnfles.com
hnfudu.com
hnfyqmj.com
hnfysg.com
+hngajs.com
hngangjiegou.com
hngbjy.com
hngbw.com
@@ -48798,7 +48374,6 @@ hnlis.com
hnlshm.com
hnltcw.com
hnlxq.com
-hnlyy.com
hnlzhd.com
hnlzw.net
hnmangshan.com
@@ -48817,7 +48392,6 @@ hnmsg.com
hnmsw.com
hnmudi.com
hnmuseum.com
-hnmyhk.com
hnmyjt.com
hnmzbg.com
hnmzmy.com
@@ -49085,7 +48659,6 @@ hogatoga.net
hogesoft.com
hoghu.com
hogon17.com
-hogyp.com
hoho123.com
hoho666.com
hohode.com
@@ -49212,7 +48785,6 @@ hongdou.com
hongdoufm.com
hongdoulive.com
hongen.com
-hongene.com
hongfasi.net
hongfeihr.com
hongfengye.com
@@ -49221,7 +48793,6 @@ hongganshebei.net
hongguogame.com
hongguoyouxi.com
honghaibengye.com
-honghaihouse.com
honghailt.com
honghaish.com
honghe-tech.com
@@ -49253,7 +48824,6 @@ hongkun-tech.com
hongkunjinfu.com
honglan123.com
honglans.com
-hongligroup.com
honglimfg.com
honglimingbiao.com
honglipai.net
@@ -49266,7 +48836,6 @@ hongmeiti.net
hongmen.cc
hongmen.com
hongmingbus.com
-hongmitech.com
hongmo.xyz
hongmoka.com
hongmu.com
@@ -49277,7 +48846,6 @@ hongpig.com
hongqi.tv
hongqiangmjg.com
hongqiaochina.com
-hongqimold.com
hongqipharma.com
hongqipress.com
hongrenyiyuan.com
@@ -49298,7 +48866,6 @@ hongsenlin.com
hongshan.com
hongshang-led.com
hongsheng-group.com
-hongshengxieye.com
hongshi88.com
hongshigroup.com
hongshikai.com
@@ -49357,7 +48924,6 @@ hongyikun.com
hongyimarine.com
hongyimro.com
hongyirong.com
-hongyitang.com
hongyu-qi.com
hongyuanpharm.com
hongyuanqh.com
@@ -49458,6 +49024,7 @@ horion.com
horionsw.com
horizon-china.com
horizon.ai
+horizon.auto
horizon.cc
horizonfuelcell.com
horizonlawyers.com
@@ -49732,7 +49299,6 @@ hqsgw.com
hqshuaimi.com
hqsmartcloud.com
hqsoft.cc
-hqstreams.net
hqswuye.com
hqthw.com
hqts.com
@@ -49844,7 +49410,6 @@ hroot.co
hroot.com
hrpackage.com
hrqxy.com
-hrrlzy.com
hrrsj.com
hrs100.com
hrsalon.org
@@ -49895,7 +49460,6 @@ hschina.net
hscn.com
hscode.net
hscode123.com
-hsd588.com
hsdatalab.com
hsdbg.com
hsdcw.com
@@ -49965,7 +49529,6 @@ hsrc.tv
hsrcw.com
hsrexpo.com
hsrjtk.com
-hsrnsw.com
hsrtd.club
hssdk.com
hssdtest.com
@@ -49980,6 +49543,7 @@ hsszfx.com
hst.com
hst1966.net
hstars.net
+hstbroker.com
hstczkj.com
hstd.com
hstong.com
@@ -50004,7 +49568,6 @@ hsxhr.cc
hsxjjs.com
hsxt.com
hsxt.net
-hsxxad.com
hsy188.com
hsyaguanjg.com
hsyanyi.com
@@ -50018,7 +49581,7 @@ hsyymusic.com
hsyzg.net
hszhizhen.net
hszk.org
-hszpfk.com
+hszq6.com
hszq8.com
hszsb.org
hszsfz.com
@@ -50040,7 +49603,6 @@ ht-tech.com
ht-valve.com
ht0775.com
ht1832.com
-ht500.com
ht88.com
ht9.com
htai51.com
@@ -50223,7 +49785,6 @@ huadian360.com
huadiansc.com
huadie.com
huadihealth.com
-huadingxuan.com
huadiplan.com
huadonghospital.com
huadongmedia.com
@@ -50280,9 +49841,9 @@ huahuaka.com
huahuamaoyi.com
huahuan.com
huahuihealth.com
+huahuizhineng.com
huahuo.com
huai.gg
-huai365.com
huaian.com
huaiangj.com
huaiansgyy.com
@@ -50293,13 +49854,11 @@ huaicai.cc
huaien.com
huaigang.com
huaihai.tv
-huaihaigufen.com
huaihaixiang.com
huaijiufu.com
huaimg.com
huaimi.com
huain.com
-huainanhai.com
huainanhy.com
huainannet.com
huainanren.net
@@ -50434,7 +49993,6 @@ huangli8.com
huangliangbo.com
huanglong.com
huangma.com
-huangmeixi.cc
huangpucn.com
huangqi1688.com
huangshaotian.com
@@ -50575,7 +50133,6 @@ huashi.cc
huashi6.com
huashibus.com
huashichang.com
-huashideh.com
huashidongman.com
huashijie.art
huashilm.com
@@ -50690,7 +50247,6 @@ huaxincem.com
huaxing.com
huaxingas.com
huaxingchem.com
-huaxingku.com
huaxinhz.com
huaxinorthop.com
huaxinpark.com
@@ -50710,7 +50266,6 @@ huayaocc.com
huayaody.com
huaye.com
huayi-faucet.com
-huayi-ks.com
huayicn.com
huayidiaosu.com
huayielec.com
@@ -50829,7 +50384,6 @@ hufangyun.com
hufe.cc
hufqekp.com
hugane.com
-hugao8.com
hugcar.com
hugd.com
hugecdn168.com
@@ -50861,7 +50415,6 @@ hui10.com
hui10.net
hui100.com
hui43.com
-hui712.com
hui800.com
hui800.net
huians.com
@@ -50962,6 +50515,7 @@ huijitrans.com
huijiwiki.com
huiju.cool
huijucn.com
+huikao8.com
huikex.com
huikundz.com
huila88.com
@@ -51011,7 +50565,6 @@ huimwang.com
huinaimei.com
huing.net
huinkj.net
-huinongtx.com
huion.com
huiqia.net
huiqianfan.com
@@ -51116,7 +50669,6 @@ huiyicq.net
huiyihealth.com
huiyijh.com
huiyingdai.com
-huiyingde.com
huiyinxun.com
huiyizhuo.com
huiyou.com
@@ -51129,7 +50681,6 @@ huiyuanyy.com
huiyucn.com
huiyuehz.com
huiyumedia.com
-huiyunsec.xyz
huiyutools.com
huize.com
huizecdn.com
@@ -51174,7 +50725,6 @@ hulianfang.com
hulianmaibo.com
hulianwangchuangye.com
hulichuang.mobi
-huliku.com
hulinhong.com
hulixin.com
huliyx.com
@@ -51199,7 +50749,6 @@ humanrights-china.org
humanwellcaps.com
humanwellhb.com
humaotec.com
-humbletg.com
humblit.com
humengyun.com
humensec.com
@@ -51219,6 +50768,7 @@ hunaniptv.com
hunanjz.com
hunanpea.com
hunantv.com
+hunanxingxin.com
hunanyuneng.com
hunanzp.com
hunanzy.com
@@ -51264,6 +50814,8 @@ huo07100hy.com
huo07110hy.com
huo07120hy.com
huo07140hy.com
+huo07150hy.com
+huo07160hy.com
huoas.com
huoban.com
huobanbot.com
@@ -51289,6 +50841,7 @@ huochehuan.com
huochepiao.com
huochepiao.net
huocheso.com
+huocms.com
huodao.hk
huodong.org
huodong.store
@@ -51563,7 +51116,6 @@ hwxc.com
hwxda.com
hwxfc.com
hwxjp.com
-hwxlawyer.com
hwxnet.com
hwxuanliuqi.com
hwyton.com
@@ -51608,6 +51160,7 @@ hxdec.com
hxdi.com
hxdkfp.com
hxdkj88.com
+hxdrisk.com
hxdsbgg.com
hxdspa.com
hxdtekf.com
@@ -51709,7 +51262,6 @@ hxxkw.org
hxxl6.com
hxxlm.com
hxxsljd.com
-hxy365.com
hxycxx.com
hxyd.cc
hxydup.com
@@ -51718,11 +51270,9 @@ hxys.com
hxytea.com
hxytw.com
hxyxt.com
-hxyyad.com
hxyyw.com
hxz.ink
hxzlsgs.com
-hxzq.net
hy-china.com
hy-express.com
hy-f.com
@@ -51894,11 +51444,9 @@ hywater.net
hywaternet.com
hywh1999.com
hywjjz.com
-hywly.com
hywx.com
hyx1927.com
hyxiang888.xyz
-hyxny888.com
hyxrmt.com
hyxt.com
hyy99.com
@@ -51933,7 +51481,6 @@ hz-kedi.com
hz-moon.com
hz-pharm.com
hz-polar.com
-hz-shoes.com
hz-spring.net
hz-tire.com
hz-tt.com
@@ -51941,7 +51488,6 @@ hz-winone.com
hz-xiaofei.com
hz-xin.com
hz-zhuce.com
-hz-zjsh.com
hz-zq.com
hz2jx.com
hz2y.com
@@ -52012,7 +51558,6 @@ hzcnc.com
hzcollege.com
hzcopyright.com
hzcourse.com
-hzcphotonics.com
hzctjs.com
hzctkj.com
hzctxh.com
@@ -52038,7 +51583,6 @@ hzdx.com
hzebang.com
hzecsemir.com
hzeeec.com
-hzefjs.com
hzeg.com
hzelec.com
hzepd.com
@@ -52287,6 +51831,7 @@ hzsnowcom.com
hzsource.com
hzsp.com
hzspeed.com
+hzsports.net
hzsqhb.com
hzsqsmart.com
hzsswjt.com
@@ -52523,7 +52068,6 @@ i7gg.com
i7ol.com
i7play.com
i7txt.cc
-i7txt.com
i8001.com
i8956.com
i8cn.com
@@ -52851,6 +52395,7 @@ ichennan.com
icheruby.net
icheshi.com
ichezhan.com
+ichhlj.com
ichika.cc
ichinaceo.com
ichinaenergy.com
@@ -52920,6 +52465,7 @@ icolor8.com
iconntech.com
icoolby.com
icoolxue.com
+icoonal.xyz
icoou.com
icoremail.net
icos8.com
@@ -52944,7 +52490,6 @@ icphu.com
icpisp.net
icpkuaiban.net
icplishi.com
-icpmii.com
icqone.com
icrazyidea.com
ics-sec.com
@@ -52982,8 +52527,8 @@ icver.com
icvip.com
icxbk.com
icxinli.com
-icxuqjw.com
icy-capital.com
+icytown.com
icyuyan.net
icz.com
iczhiku.com
@@ -52995,7 +52540,6 @@ ida-a.org
idachu.com
idacn.org
idadt.com
-idafen.com
idaguang.com
idailycar.com
idaima.com
@@ -53120,7 +52664,6 @@ idlegog.com
idloves.com
idmchina.net
idmzj.com
-idn100.com
idname.com
idnscloud.com
ido-love.com
@@ -53215,7 +52758,6 @@ ieforever.com
iefrd.com
iefxz.com
iegcom.com
-iegee.net
iegourl.com
ieh-hz.com
iehou.com
@@ -53226,7 +52768,6 @@ ieltsabc.com
ieltschn.com
ieltsonlinetests.com
iemailforce.com
-iemate.com
iemblog.com
iemiq.com
iemnet.xyz
@@ -53334,7 +52875,6 @@ iflyrec.com
iflyresearch.com
iflysec.com
iflytek.com
-iflytekin.com
iflytektstd.com
iflytoy.com
ifmtech.com
@@ -53345,7 +52885,6 @@ ifonelab.net
ifonts.com
iforce-ad.com
iforce-media.com
-iforestbox.com
ifoxfactory.com
ifoxhui.com
ifqcihp.com
@@ -53412,6 +52951,7 @@ igoomall.com
igou.com
igoyx.com
igps123.com
+igpsport.com
igptex.com
igreatdream.com
igrs.org
@@ -53523,7 +53063,6 @@ ihuipao.com
ihuisida.net
ihuman.com
ihumand.com
-ihungyi.com
ihuntto.com
ihuoli.com
ihuoqiu.com
@@ -53532,7 +53071,6 @@ ihuoshanlive.com
ihuoshanstatic.com
ihuoshanvod.com
ihuoyan.com
-ihupai.com
ihupo.com
ihush.com
ihuyi.com
@@ -53567,7 +53105,6 @@ iieii.com
iiesz.com
iieye.cc
iigs9.com
-iigushi.com
iii80.com
iiiaaa.com
iiiddd.com
@@ -53741,7 +53278,6 @@ ilianwo.com
ilianyue.com
ilibrand.com
ilidubj.net
-ilieqi.net
ilifesmart.com
ilikecp.com
ilikemanga.com
@@ -53965,6 +53501,7 @@ imlazy.ink
imlb2c.com
imlianai.com
imliuyi.com
+imlizhi.com
immeee.com
immersivetranslate.com
immfast.com
@@ -53991,6 +53528,7 @@ imoemh.com
imofan.com
imoffice.com
imohu.com
+imok.run
imoke.org
imolive.tv
imomoe.com
@@ -54072,6 +53610,7 @@ imzego.com
imzhanghao.com
imzhongxin.com
imzhuomo.com
+imzudian.com
imzy.ink
in-cen.com
in-driving.com
@@ -54214,8 +53753,10 @@ inibiru.com
inicoapp.com
inidc.net
ininin.com
+initcc.com
initff.com
initialview.com
+initkk.com
initpp.com
initroot.com
initvv.com
@@ -54361,7 +53902,6 @@ internationalbrand.net
internbird.com
internetke.com
internettrademark.com
-interotc.net
intertid.com
interval.im
intimerent.com
@@ -54443,6 +53983,7 @@ ioqoo.com
iorca.net
iornnl.xyz
ios-auto.net
+ios114.com
ios222.com
ios98.com
iosask.com
@@ -54457,6 +53998,7 @@ iosyyds.com
ioszc.com
ioszn.com
iot-cas.com
+iot-dc.com
iot.moe
iot0.net
iot1001.com
@@ -54784,7 +54326,6 @@ iseedog.com
iseekids.com
isellerpal.com
isenruan.com
-isenxwsc.com
iseoku.com
isf.ink
isfashion.com
@@ -55018,7 +54559,6 @@ itcpn.net
itczh.com
itdabao.com
itdai.com
-itdaogou.com
itdayang.com
itdcw.com
itdevnow.com
@@ -55089,7 +54629,6 @@ itit.io
itjoy.net
itjspx.com
itjuzi.com
-itkoudai.com
itkuku.com
itlic.com
itlog.vip
@@ -55110,7 +54649,6 @@ itnb.cc
itnec.org
itnihao.com
itnxs.com
-ito-co.com
itoec.org
itoegd.com
itogame.com
@@ -55179,7 +54717,6 @@ itto100.com
ittribalwo.com
ituad.com
ituchong.com
-itugo.com
ituite.com
ituopeng.com
iturco.com
@@ -55241,7 +54778,6 @@ iv06.com
iv2i.com
iva-schmetz.com
ivali.com
-ivanli.cc
ivban.com
ivcheng.com
ivdchina.org
@@ -55292,7 +54828,6 @@ iwangzha.com
iwanoutdoor.com
iwanshow.com
iwanws.com
-iwanyl.com
iwapan.com
iwatani-gz.com
iwatch365.com
@@ -55311,7 +54846,6 @@ iweidu.net
iweixiu120.com
iweju.com
iwellen.com
-iweme.net
iwen1.com
iwenan.com
iwencai.com
@@ -55365,7 +54899,6 @@ ixianlai.com
ixiaochengxu.cc
ixiaoma.com
ixiatxt.com
-ixiede.com
ixigua.com
ixiguapi.com
ixiguavideo.com
@@ -55417,7 +54950,6 @@ iyaya.com
iyaya.info
iyb.tm
iybtv.com
-iycdm.com
iycsky.com
iycwl.com
iydsj.com
@@ -55553,7 +55085,7 @@ j2ee.cc
j2up.com
j3cx.com
j4321.com
-j45.xyz
+j4lpr.com
j5.cc
j5757.com
j5k6.com
@@ -55562,7 +55094,6 @@ j7c16.icu
j8j9.com
j95a.com
j99h8.com
-j9dq.com
j9pic.com
ja-cloud.com
jaadee.com
@@ -55637,6 +55168,7 @@ jarhu.com
jarods.org
jarvisw.com
jasangroup.com
+jasminer.com
jasolar.com
jason-z.com
jason5.xyz
@@ -55728,6 +55260,7 @@ jbzyw.com
jc-ai.com
jc-dl.net
jc-hr.com
+jc-pcba.com
jc-saas.com
jc0531.com
jc170.com
@@ -55817,7 +55350,6 @@ jcno.net
jcodecraeer.com
jcpeixun.com
jcpesz.com
-jcqm001.com
jcqzw.com
jcrb.com
jcrcw.com
@@ -56014,6 +55546,7 @@ jdphone.net
jdplay.com
jdpta.com
jdpz44.com
+jdreader.net
jdrns.com
jdrpr.com
jdrq.net
@@ -56029,7 +55562,6 @@ jdt-precision.com
jdtiot.com
jdtjy.com
jdtxgc.com
-jduiv.com
jdunion.com
jdv794.vip
jdvisa.com
@@ -56071,7 +55603,6 @@ jdzol.net
jdzrcw.com
jdzs.com
jdzwang.com
-jea-asia.com
jeacar.com
jean.cd
jeanphy.online
@@ -56292,7 +55823,6 @@ jhfsata.com
jhgolfcarts.com
jhgroup525.com
jhgtgb.com
-jhgujia.com
jhgykt.com
jhhospital.com
jhhygl.com
@@ -56327,7 +55857,6 @@ jhsddjd.com
jhsjttz.com
jhspa6.com
jhszyy.com
-jhtcgroup.com
jhtmsf.com
jhtong.net
jhuishou.com
@@ -56555,7 +56084,6 @@ jiangpaipinpai.com
jiangping.fyi
jiangpinjiangxin.com
jiangqiaomuye.com
-jiangqimeixue.com
jiangque.com
jiangruyi.com
jiangshancpa.com
@@ -56689,7 +56217,6 @@ jianxi-materials.com
jianxinchemical.com
jianxinyun.com
jianxiyasi.com
-jianxuzuo.com
jianyanjia.com
jianyechina.com
jianyefans.com
@@ -56865,7 +56392,6 @@ jiazhao7.com
jiazhaoba.com
jiazhi.online
jiazhichem.com
-jiazhongkeji.com
jiazhoulvke.com
jiazhua.com
jiazhuang.com
@@ -56933,10 +56459,12 @@ jiefu.com
jiefu.net
jiefuku.com
jiegames.com
+jiege.pro
jiegeng.com
jiegon.com
jiehua-chem.com
jiehua.com
+jiehualv.com
jiehuapharma.com
jiehuigroup.com
jiehun021.com
@@ -57088,7 +56616,6 @@ jikegou.net
jikeiot.cloud
jikejiang.com
jikejiazhuang.com
-jikejidi.com
jikejishu.com
jikeq.com
jiketuchuang.com
@@ -57124,7 +56651,6 @@ jimay.com
jimei-cn.com
jimeilm.com
jimeisilk.com
-jimeius.com
jimeng.com
jimeng.mobi
jimetec.com
@@ -57201,7 +56727,6 @@ jindidata.com
jindidq.com
jinding.cc
jindingfm.com
-jindongneng.com
jindongsoft.com
jindoushiqi.com
jinducw.com
@@ -57218,7 +56743,6 @@ jinfanda.com
jinfangka.com
jinfapharma.com
jinfengcx.com
-jinfenghl.com
jinfengpaint.com
jinfengwine.com
jinfh.net
@@ -57251,7 +56775,6 @@ jingdaka.com
jingdapcb.com
jingdata.com
jingdeyx.com
-jingdiancha.net
jingdianhuayu.com
jingdianju.com
jingdianlaoge.com
@@ -57271,7 +56794,6 @@ jinggeng.net
jinggon.com
jinggong-auto.com
jinggongvalve.com
-jinggu-ag.com
jingguan.ai
jinggui.com
jinggumofang.com
@@ -57397,7 +56919,6 @@ jingyitech.com
jingyiyiyao.com
jingyougz.com
jingytech.com
-jingyu.com
jingyuan.com
jingyuelaw.com
jingyuetang.com
@@ -57432,7 +56953,6 @@ jinhuo.net
jinhusns.com
jinhutour.com
jinianbi.com
-jinianbishequ.com
jiniance8.com
jinianri.com
jining.com
@@ -57452,7 +56972,6 @@ jinjiaomh.com
jinjie.tech
jinjiedu.com
jinjieshengwu.com
-jinju8.com
jinkaijia.com
jinkan.org
jinkanghospital.com
@@ -57475,7 +56994,6 @@ jinlaijinwang.com
jinlangbo.com
jinlanqihua.com
jinlanzuan.com
-jinleijx.com
jinletx.com
jinlianchu.com
jinling.com
@@ -57495,7 +57013,6 @@ jinlvkeji.com
jinlyb.com
jinma-int.com
jinmabrand.com
-jinmacy.com
jinmajia.com
jinmalvyou.com
jinmao-ti.com
@@ -57522,6 +57039,7 @@ jinpin.xyz
jinpu.com
jinpupvc.com
jinqi2023.com
+jinqiang.online
jinqiangjc.com
jinqianguan.com
jinqianma.com
@@ -57559,7 +57077,6 @@ jinrongren.net
jinrui-tech.com
jinruimedical.com
jinruism.com
-jinruitc.com
jinrunsoft.com
jins-cn.com
jinse.com
@@ -57704,6 +57221,7 @@ jishicn.com
jishigou.net
jishigu.com
jishirili.com
+jishitailai.com
jishiyuboke.com
jishubai.com
jishuchi.com
@@ -57792,7 +57310,6 @@ jiuchutong.com
jiucool.org
jiudafu.com
jiudaifu.com
-jiuday.com
jiudianhudong.com
jiudianjiu.com
jiudianrong.com
@@ -57802,7 +57319,6 @@ jiudingcapital.com
jiudinggroup.com
jiudingref.com
jiufengsuye.com
-jiufuquan.com
jiugang.com
jiugangbid.com
jiuguijiu000799.com
@@ -57890,7 +57406,6 @@ jiuwanshan.net
jiuwei.net
jiuweick.com
jiuweige.com
-jiuwo123.com
jiuxian.com
jiuxianfeng.com
jiuxiaobao.vip
@@ -57955,7 +57470,6 @@ jixiew360.com
jixiewz.com
jixinbbd.com
jixinet.com
-jixinhuanjing.com
jixixx.com
jixuanw.com
jixueedu.com
@@ -57983,7 +57497,6 @@ jiyuntang.com
jiyusi.com
jizhan.com
jizhangla.com
-jizhangzhuce.com
jizhaotang.com
jizhazha.com
jizhiba.com
@@ -58102,7 +57615,6 @@ jjxyls.com
jjy118.com
jjycc.cc
jjycw.net
-jjydp.com
jjygym.com
jjypyz.com
jjys188.com
@@ -58141,7 +57653,6 @@ jkcsjd.com
jkd.com
jkdsz.com
jkelec.com
-jkfwvip.com
jkfy5.com
jkh-ym.com
jkhapp.com
@@ -58267,7 +57778,6 @@ jljzzs.com
jlkfapp.com
jlkgj.com
jlkj.cc
-jlkja.com
jlkjgroup.com
jllihua.com
jllyzxyy.com
@@ -58322,6 +57832,7 @@ jlxhyy.com
jlxtxny.com
jlxzt.com
jlylwater.com
+jlyr2.com
jlysgjzx.com
jlytzk.com
jlywkj.com
@@ -58465,7 +57976,6 @@ jnjpkj.com
jnjszl.com
jnjtsc.com
jnkason.com
-jnkbmy.com
jnky.com
jnlab.com
jnlc.com
@@ -58541,7 +58051,6 @@ job1998.com
job225.com
job2299.com
job250.com
-job256.com
job263.com
job36.com
job369.com
@@ -58597,14 +58106,12 @@ jocund-gift.com
jodoll.com
joe92.com
joessem.com
-joey-rose.com
jogjamedianet.com
johhan.com
johnlz.com
johnmedia.com
johogames.com
johome.com
-johope.com
johouse.com
joiest.com
joinchitchat.com
@@ -58732,7 +58239,6 @@ joyncleon.com
joynext.com
joyochem.com
joyocosmetics.com
-joyog.com
joyoget.com
joyoucnc.com
joyoung.com
@@ -58801,7 +58307,6 @@ jpmsg.com
jpnettech.com
jpnlink.xyz
jpnxcn.com
-jpplanking.com
jpqgxy.com
jprtyun.com
jpsdk.com
@@ -58901,7 +58406,6 @@ jrszw.com
jrtaiji.net
jrteck.com
jrtgroup.net
-jrtkse.com
jrtx.site
jrwenku.com
jrxtp.com
@@ -58920,7 +58424,6 @@ js-cxjt.com
js-dw.com
js-emap.com
js-exp.com
-js-fangyuan.com
js-gear.com
js-gojo.com
js-haiyao.com
@@ -58936,7 +58439,6 @@ js-rongzheng.com
js-seeker.com
js-shenghang.com
js-talents.com
-js-tengda.com
js-weilong.com
js-xny.com
js-ym.com
@@ -58944,7 +58446,6 @@ js-zk.com
js.design
js04999.com
js0573.com
-js11183.com
js118114.com
js165.com
js178.com
@@ -59001,7 +58502,6 @@ jschunxing.com
jschy.com
jscj-elec.com
jscj.com
-jsckjqr.com
jsckw.org
jsclearing.com
jscmjt.com
@@ -59286,7 +58786,6 @@ jsnol.com
jsnovel.com
jsntg.com
jsntgas.com
-jsntzsgs.com
jsnx.net
jsnxs.com
jsnydefy.com
@@ -59297,7 +58796,6 @@ jsomick.com
jsonin.com
jsososo.com
jsp158.com
-jsp51.com
jspaint.com
jspang.com
jspatch.com
@@ -59350,7 +58848,6 @@ jssalt.com
jssbaoxian.com
jssbjt.com
jssc.cc
-jsscsj.com
jssczxh.com
jssdezyy.com
jssdh.com
@@ -59394,7 +58891,6 @@ jssuty.com
jssuwei.com
jsswordshop.com
jssyj.com
-jssylawfirm.com
jssytc.com
jssyyy.net
jstcm.com
@@ -59413,7 +58909,6 @@ jstlcyy.com
jstlgn.com
jstljs.com
jstore.site
-jstour.com
jstoys.net
jstsks.com
jstti.com
@@ -59544,7 +59039,6 @@ jsyxep.com
jsyxh.org
jsyxrcb.com
jsyypump.com
-jsyyzz.net
jsyzht.com
jsz120.com
jszbtb.com
@@ -59665,7 +59159,6 @@ ju33.com
ju3x3so.com
ju51.com
ju53.com
-ju81.cc
juaiyou.com
juanbao.com
juandou.com
@@ -59859,7 +59352,6 @@ junanres.com
junanshengwu.com
junao147.com
junaotiyu.com
-juncaiqh.com
junce.com
juncyun.com
jundacheng.com
@@ -59960,7 +59452,6 @@ jurcc.net
juren.com
jurenqi.com
jurilisheng.com
-juroku.net
jurongfangchan.com
jurongrencai.com
jurp.net
@@ -60025,7 +59516,6 @@ juwang.com
juwangmedia.com
juwanhezi.com
juwanshe.com
-juwanzhuan.com
juwed.com
juweixin.com
juxia.com
@@ -60065,6 +59555,7 @@ juzhen.io
juzhentech.com
juzhenyun.org
juzhi720.com
+juzhiliang.com
juzhiyuan.com
juzhongjoy.com
juzicon.com
@@ -60133,7 +59624,6 @@ jwzykg.com
jx-189.com
jx-amc.com
jx-bank.com
-jx.la
jx09.com
jx116114.com
jx139.com
@@ -60227,6 +59717,7 @@ jxjdgy.com
jxjee.com
jxjia.net
jxjianwei.com
+jxjktzjt.com
jxjmzc.com
jxjob.net
jxjrw.com
@@ -60530,6 +60021,7 @@ jz68888.com
jzb.com
jzbar.net
jzbdc.com
+jzbull.com
jzcbank.com
jzchou.com
jzcmfw.com
@@ -60572,6 +60064,7 @@ jzkjjt.com
jzkoo.net
jzlt100.com
jzmbti.com
+jzmjtjn.xyz
jzmlzy.com
jzmob.com
jzmsmj.com
@@ -60618,12 +60111,12 @@ jzwcom.com
jzwl66.com
jzwxfrp.com
jzx.com
+jzxian.com
jzxjcf.com
jzxs.com
jzygczx.com
jzyqyb.com
jzyqzypg.com
-jzysjt.com
jzyx.com
jzzfyw.com
jzzhw.com
@@ -60631,6 +60124,7 @@ jzzls.com
jzzx.com
jzzypt.com
k-boxing.com
+k-dyn.com
k-kbox.com
k-res.net
k.biz
@@ -60695,7 +60189,6 @@ kacper.fun
kada.com
kada163.com
kadang.com
-kadingding.com
kaeryun.com
kafangtech.com
kafeng.com
@@ -60788,7 +60281,6 @@ kaiteer17.com
kaitianad.com
kaitiancloud.com
kaiting.cc
-kaivps.com
kaiwenda.com
kaiweneducation.com
kaiwind.com
@@ -60956,10 +60448,8 @@ kanguo.com
kanguowai.com
kangxi55wlsf.com
kangxiang.com
-kangxiangjituan.com
kangxidi.com
kangxin.com
-kangxinzhiyuan.com
kangyang51.com
kangyiqiye.com
kangyuntang.com
@@ -61008,7 +60498,6 @@ kansea.com
kanshangjie.com
kanshijie.cc
kanshu.com
-kanshu.la
kanshu5.net
kanshu58.cc
kanshuge.com
@@ -61065,6 +60554,7 @@ kaopenhs.com
kaopu001.com
kaopubao.com
kaopubao.net
+kaopujinfu.com
kaopuyun.com
kaopuyun.net
kaoqin.com
@@ -61101,7 +60591,6 @@ kaoyanjun.com
kaoyanking.com
kaoyanmiji.com
kaoyannanda.com
-kaoyanne.com
kaoyansiji.com
kaoyanwin.com
kaoyaya.com
@@ -61156,6 +60645,7 @@ kbao123.com
kbcdn.com
kbcmw.com
kbcool.com
+kbddftp.com
kbdfans.com
kbgogo.com
kbgok.com
@@ -61198,17 +60688,14 @@ kcjyyjzzs.com
kcloudidc.com
kcm120.com
kcouxp.com
-kcpseo.com
kcqcjt.com
kcrcb.com
kcrea.cc
-kcsgx.com
kctgov.com
kcwiki.org
kcyuri.com
kczhaosheng.com
kczjlb.com
-kd-hw.com
kd010.com
kd100.com
kd120.com
@@ -61282,6 +60769,7 @@ keda.com
keda.fun
kedabai.com
kedacom.com
+kedaifu.com
kedang.net
kedanm.com
kedaotech.com
@@ -61544,10 +61032,10 @@ keylol.com
keymantek.com
keymedbio.com
keymoe.com
+keyoo.com
keyoou.com
keyray-hk.com
keyshot.cc
-keyshot.pro
keytherapharma.com
keyto168.com
keytoix.vip
@@ -61613,7 +61101,6 @@ kgimg.com
kgipr.com
kgnmkj.com
kgogame.com
-kgou.cc
kguaq.com
kgzyy.com
kh-zx.com
@@ -61822,6 +61309,7 @@ kitstown.com
kituin.fun
kivend.net
kivo.fun
+kivo.wiki
kiwa-tech.com
kiwenlau.com
kiwifarms.net
@@ -61899,6 +61387,7 @@ kk-china.com
kk1.vip
kk169.com
kk18.com
+kk1bie336689.com
kk30.com
kk30.net
kk3g.net
@@ -61918,6 +61407,7 @@ kkdgroup.com
kkdict.com
kkdnsv1.com
kkdownload.com
+kkdzpt.com
kkeji.com
kkfesw.com
kkffdns.com
@@ -61941,6 +61431,7 @@ kkmar.com
kkmh.com
kkmicro.com
kkmop.com
+kkong.vip
kkpan.com
kksmg.com
kksofts.com
@@ -62041,11 +61532,11 @@ kmdcwt.com
kmdn.net
kmdns.net
kmeecc.com
+kmeila.com
kmeitu.com
kmf.com
kmfengli.com
kmg-jd.com
-kmgcpf.net
kmgdgs.com
kmgg88.com
kmguolv.com
@@ -62058,6 +61549,7 @@ kmimall.com
kmjt.net
kmlcl.com
kmlhh.com
+kmljexb.xyz
kmljk.com
kmmama.com
kmmdkj.com
@@ -62108,7 +61600,6 @@ knbmotor.com
knewbi.com
knewone.com
knewsmart.com
-kneyvz.xyz
knfeco.com
knight-un.com
knightli.com
@@ -62278,7 +61769,6 @@ koudaigou.net
koudaili.com
koudaionline.com
koudaionline.net
-koudaipe.com
koudaitiku.com
koudaitong.com
koudashijie.com
@@ -62291,7 +61781,6 @@ kouke5.com
koukousky.com
koukuko.com
koumakan.cc
-kouming.net
kouqiangba.com
koushare.com
kouss.com
@@ -62306,14 +61795,13 @@ kowa103.com
kowloonhospital.com
kox.moe
koyuki.cc
-kpanda.wiki
kpblw.com
+kpbyd.com
kpdhk.com
kpfans.com
kpfcw.com
kpfqg.com
kphm88.com
-kphrs.com
kphwchem.com
kpjushi.com
kpkpw.com
@@ -62371,7 +61859,6 @@ kriweb.com
krones-group.com
krones.com
krpano.tech
-krplanking.com
krqcitie.com
krszf.com
krtdl.com
@@ -62447,6 +61934,7 @@ ksops.com
ksord.com
ksosoft.com
kspays.com
+kspeeder.com
kspkg.com
ksrc001.com
ksren.com
@@ -62467,6 +61955,7 @@ kstao.com
kstengcai.com
kstnjscl.com
kstore.space
+kstore.vip
kstv.com
ksudi.com
ksupdate.com
@@ -62551,7 +62040,6 @@ ku6cdn.com
ku6img.com
ku82.com
ku90.com
-ku9377.com
ku968.com
ku987.com
kua365.com
@@ -62673,7 +62161,6 @@ kuaishouba.com
kuaishougroup.com
kuaishoupay.com
kuaishouzt.com
-kuaishu.net
kuaishuru.net
kuaisouwifi.com
kuaisu.com
@@ -62728,7 +62215,6 @@ kuajingzhushou.com
kuajinzhifu.com
kuakao.com
kuakao.net
-kuake666.com
kuake8.com
kuamarketer.com
kuaming.com
@@ -62758,8 +62244,8 @@ kuark.com
kuashou.com
kuashuonk.com
kuayuegroup.com
-kubady2.com
kubercloud.com
+kubesre.xyz
kubey.cc
kubikeji.com
kuboluo.com
@@ -62949,9 +62435,7 @@ kutinai.com
kutj.com
kutongji.com
kutuan.com
-kuuad.com
kuuke.com
-kuv97t.xyz
kuvun.com
kuwan8.com
kuwanapp.com
@@ -62986,7 +62470,6 @@ kuzhengame.com
kuzu.com
kv-kva.com
kvenjoy.com
-kvfumdr.com
kvhee.com
kviso.com
kvogues.com
@@ -63028,7 +62511,6 @@ kwimgs.com
kwinbon.com
kwise-log.com
kwkf.com
-kwmachineworks.com
kwniu.com
kwong-tech.com
kws123.com
@@ -63045,7 +62527,6 @@ kx001.com
kx139.com
kx1978.com
kx1d.com
-kx2222.com
kx778.com
kx7p.com
kxapps.com
@@ -63180,6 +62661,7 @@ l1yu.com
l2cn.com
l2h.site
l2t7.cc
+l2z4l.net
l3gt9.com
l68.net
l7audiolab.com
@@ -63230,9 +62712,9 @@ ladymetro.com
ladyol.com
ladyw.com
ladyw.net
+laecloud.com
laey.net
laf.run
-lafacw.xyz
lafaso.com
lafayettewines.com
lafy.org
@@ -63331,7 +62813,6 @@ laizhouba.com
laizhouba.net
laizhoujob.com
laizi.net
-lajixs.com
lajoson.com
lakala.com
lakecn.com
@@ -63477,7 +62958,6 @@ langxi.org
langxi.xyz
langxingys.com
langxiyuyou.com
-langyabang.com
langzezs.com
lanh.love
lanhaicaijing.com
@@ -63510,8 +62990,6 @@ lanlingtuliao.com
lanlv.com
lanmaiedu.com
lanmao.com
-lanmao88.hk
-lanmao99.hk
lanmaokeji.com
lanmaos.com
lanmicloud.com
@@ -63522,7 +63000,6 @@ lanohotel.com
lanosso.com
lanou3g.com
lanovamedicines.com
-lanpanpan.com
lanpiankeji.com
lanpuele.com
lanpv.com
@@ -63590,6 +63067,7 @@ lanying.site
lanyingwang.com
lanyu.net
lanyue.com
+lanyun.net
lanyunbrand.com
lanyuncloud.com
lanyuncms.com
@@ -63769,7 +63247,6 @@ laschina.org
lascn.net
laser-dhc.com
laser568.com
-laserboltland.com
laserfair.com
laserjg.com
lashou.com
@@ -63796,6 +63273,7 @@ lavago.com
lavandehotels.com
lavapm.com
lavaradio.com
+lavdrzv.xyz
law-lib.com
law-star.com
law01.net
@@ -63955,7 +63433,6 @@ lcfgjs.com
lcfile.com
lcfw.co
lcgdbzz.org
-lcgfpt.mobi
lcgjcj.com
lcgod.com
lchot.com
@@ -63983,6 +63460,7 @@ lcpumps.com
lcqixing.com
lcqjsjxxx.com
lcqwdz.com
+lcrc.ltd
lcrcbank.com
lcrq.net
lcsepu.com
@@ -64042,6 +63520,7 @@ ldkj-zs.com
ldkqyy.com
ldmap.net
ldmnq.com
+ldoooo.com
ldplayer.net
ldqxn.com
ldrcw.com
@@ -64209,7 +63688,6 @@ lee-tieguo.com
leeaon.com
leeco.com
leefanmr.com
-leehomcn.com
leehon.com
leeleo.vip
leenzee.com
@@ -64385,6 +63863,7 @@ lengyankj.com
lengzzz.com
leniugame.com
leniy.org
+lenmy.com
lenogo.com
lenosoft.net
lenovator.com
@@ -64482,6 +63961,7 @@ lestcg.com
letabc.com
letang666.com
letao.com
+letaoedu.com
letaofang.net
letaoren.com
letbonchina.com
@@ -64576,7 +64056,6 @@ leyixue.com
leyonb.com
leyoo.com
leyoujia.com
-leyouquan.com
leyu.com
leyuanhr.com
leyue100.com
@@ -64696,7 +64175,6 @@ lhasa.icu
lhave.com
lhbbj.com
lhbgchina.com
-lhbye.com
lhconst.com
lhcreditevaluation.com
lhcy168.com
@@ -64971,6 +64449,7 @@ lichimedicine.com
lichiwei.com
lichong.work
lichuang.ren
+licic.net
lickeji.com
lickscreen.com
licomsh.com
@@ -65049,7 +64528,6 @@ lifanfc.com
lifebook.red
lifediary.shop
lifeeu.com
-lifegatemedicine.com
lifegc.com
lifegreenmedical.com
lifeinjungle.com
@@ -65310,7 +64788,6 @@ lingtong.info
lingtool.com
lingtu.com
lingtuan.com
-lingualeo.com
lingumob.com
linguoguang.com
lingw.net
@@ -65479,7 +64956,6 @@ linuopv.com
linuoshi.com
linuottc.com
linuozhiyao.xyz
-linuser.com
linux-code.com
linux-ren.org
linux.zone
@@ -65599,6 +65075,7 @@ listenpa.com
listentide.com
listentoworld.com
listenvod.com
+listno1.com
listong.com
lisure.com
lisz.me
@@ -65647,7 +65124,6 @@ liu-kevin.com
liu16.com
liuayuan.com
liubaocha.com
-liubo.live
liucao.vip
liuchengguanli.com
liuchengming.com
@@ -65767,13 +65243,13 @@ liuyimin4.com
liuyixiang.com
liuyua.xyz
liuyuechuan.com
-liuyun.name
liuyunliumeng.com
liuyuntian.com
liuzaoqi.com
liuzekang.com
liuzhihang.com
liuzhixiang.com
+liuzhiyugzs.com
liuzhosoft.com
liuzhoufushan.com
liuzhoukaichuang.com
@@ -65795,6 +65271,7 @@ liveapp.ink
livecdnstatic.com
livechina.com
livecourse.com
+livehwc4.com
liveinau.com
liveincy.com
livejh.com
@@ -65890,7 +65367,6 @@ liyuplay.com
liyx.fun
liyx.net
lizaike.com
-lizhaoblog.com
lizhehaozhongyi.com
lizhenauto.com
lizhenglai.com
@@ -65916,13 +65392,13 @@ lizikeji.vip
lizilaw.com
liziqiche.com
lizitongxue.com
+liziwl.com
liziwu.net
lizixin.cool
liziyuan.com
lizq.host
lj-audio.com
lj-bank.com
-lj-group.com
lj168.com
ljbao.net
ljbbj.com
@@ -66028,11 +65504,13 @@ llinkslaw.com
lljgame.com
lljsq.net
lljyx.com
+llkk.cc
llku.com
lllcn.com
llllx7.com
lllomh.com
lllpv.com
+llmtrend.com
llmworld.net
llongwill.com
llqsq.com
@@ -66058,7 +65536,6 @@ llxj119.com
llxx.cc
llxzl.com
llxzu.com
-llycloud.com
llyj.net
llyweb.com
llyy.org
@@ -66078,7 +65555,6 @@ lmbhfsgfjs.com
lmbus.com
lmdk01.com
lmdouble.com
-lmeee.com
lmengcity.com
lmeurbnjs.com
lmfdt.com
@@ -66128,6 +65604,7 @@ lncmcc.com
lncmxy.com
lncnw.com
lnddhxq.com
+lndhbv.com
lndhdx.com
lndnw.com
lndwkj.com
@@ -66196,7 +65673,6 @@ lnvipsoft.com
lnwgms.com
lnwish.com
lnwoo.com
-lnxldkj.com
lnxmt.com
lnxysf.com
lnxzj.com
@@ -66219,6 +65695,7 @@ loansliml.com
local-ip.online
locatran.com
locez.com
+locimg.com
lockchat.app
lockfans.com
lockin.com
@@ -66278,7 +65755,6 @@ logwirecloud.com
lohaa.com
lohalink.com
lohand.com
-lohas-art.com
lohasor.com
lohjs.com
lohkahhotels.com
@@ -66399,6 +65875,7 @@ longmen-pharma.com
longmen.net
longmenedutech.com
longmeng.com
+longmenshuju.com
longming.com
longmingdns.com
longnanke.com
@@ -66452,6 +65929,7 @@ longygo.com
longyi-uav.com
longyin.net
longyinok.com
+longyistudio.com
longyiyy.com
longyu.cc
longyucq.com
@@ -66643,7 +66121,6 @@ lpgjkd.com
lph119.com
lpllol.com
lpou.online
-lppoll.com
lppsw.com
lppz.com
lppzimg.com
@@ -66707,7 +66184,6 @@ lricn.com
lrist.com
lrkdzx.com
lrkj.net
-lrlvs.com
lrlz.com
lrmation.com
lrnya.com
@@ -66734,6 +66210,7 @@ lsbankchina.com
lsbbf3.com
lsbchina.com
lsbin.com
+lsbj365.com
lsbtly.com
lsccb.com
lscstz.com
@@ -66778,7 +66255,6 @@ lsldjyw.com
lslfs.com
lslgzn.com
lslihai.com
-lslkkyj.com
lsmaps.com
lsmtjy.com
lsmzt.cc
@@ -66826,7 +66302,6 @@ lswfw.com
lswgy.com
lswld.com
lswqw.com
-lsxjbxx.com
lsxnm.com
lsxrmtzx.com
lsxuantong.com
@@ -66881,7 +66356,6 @@ ltoit.com
ltopto.com
ltp-cloud.com
ltp.ai
-ltplayer.com
ltplighting.com
ltpower.net
ltsbbs.com
@@ -66904,6 +66378,7 @@ lty.fun
ltyears.com
ltzsjt.com
ltzxw.com
+ltzz666.com
lu.com
lu0.com
lu17996.com
@@ -66953,7 +66428,6 @@ luckincoffeecdn.com
lucklnk.com
luckmail.net
luckup.cc
-luckwt.com
luckxh.com
lucky286.com
lucky8k.com
@@ -67024,7 +66498,6 @@ lujiazuiforum.org
lujingtao.com
lujiya.com
lujun9972.win
-lujuncn.com
lukachen.com
lukafei.com
lukechina.com
@@ -67064,7 +66537,6 @@ lunhuaxiei.com
lunkuokeji.com
lunlunapp.com
lunt.cx
-lunwen000.com
lunwenf.com
lunwengo.net
lunwenlib.com
@@ -67142,7 +66614,6 @@ luoxue.com
luoyangdx.com
luoyangkeji.com
luoyangmalasong.com
-luoye.cc
luoyechenfei.com
luoying66.com
luoyingsh.com
@@ -67154,7 +66625,6 @@ lup2p.com
lupaworld.com
luping.com
luqidong.com
-luqq.net
lure123.com
lurefans.com
lurefq.com
@@ -67201,7 +66671,6 @@ luxianpo.com
luxiao.com
luxiaoche.com
luxichemical.com
-luxinyingcheng.com
luxiwang.com
luxiyue.com
luxshare-ict.com
@@ -67284,7 +66753,6 @@ lvjieplus.com
lvjinsuo.com
lvjitangbao.com
lvjiwang.com
-lvjoe.pw
lvjuelaw.com
lvjuf.com
lvjunzx.com
@@ -67347,6 +66815,7 @@ lvyestudy.com
lvyetong.com
lvyidoor.com
lvyinba.com
+lvyinbar.com
lvyou168.net
lvyou521.com
lvyoubei.com
@@ -67357,7 +66826,6 @@ lvyouw.net
lvysz.com
lvyuanjj.com
lvyuanpam.com
-lvyuanzl.net
lvyuetravel.com
lvzeep.com
lvzheng.com
@@ -67436,7 +66904,6 @@ lxhuwai.com
lxhuwai.net
lxhz-avionics.com
lxi.me
-lxin007.com
lxjapp.com
lxjiasu.com
lxkj.info
@@ -67458,7 +66925,6 @@ lxtuyou.com
lxway.com
lxway.net
lxwlcn.com
-lxx-inc.com
lxxarq.com
lxxdyzx.com
lxxm.com
@@ -67508,7 +66974,6 @@ lyckw.com
lycs-arc.com
lycua.com
lyd-china.com
-lyd56.co
lyd6688.com
lydaas.com
lydezx.net
@@ -67595,7 +67060,6 @@ lylangchao.com
lyldhg.com
lylhkq.com
lylme.com
-lylseo.com
lylxjxc.com
lymarathon.com
lymy1684.com
@@ -67622,7 +67086,6 @@ lyrcw.com
lyreqiqiu.com
lyric-robot.com
lyrics.run
-lyrunxiang.com
lysafety.com
lyscjc.com
lyshangdu.com
@@ -67867,7 +67330,6 @@ lztb.com
lztdzy.com
lzteli.com
lztlcyxx.com
-lztuteng.com
lztv.tv
lztvnet.com
lztx123.com
@@ -67959,6 +67421,7 @@ m1xia.com
m2ez.com
m2mlib.com
m2mzy.com
+m2time.net
m3-cloud.com
m3guo.com
m3kaiye.com
@@ -68093,7 +67556,6 @@ magewell.com
magfx-jbkk.com
magi.com
magic-school.com
-magicdata.io
magich5page.com
magicleaders.com
magicneko.com
@@ -68190,7 +67652,6 @@ maimaiche.com
maimaidx.cc
maimaigongkong.com
maimaimaiw.com
-maimaitee.com
maimaiyouhuiquan.com
maimemo.com
maimemostatus.com
@@ -68201,7 +67662,6 @@ mainlandip.com
mainlandmed.com
mainone.com
mainshe.com
-mainstreethhi.com
maintao.com
mainwww.com
maipu.com
@@ -68434,7 +67894,6 @@ manpowergrc.com
manrong.win
manshaoco.com
manshijian.com
-manshitea.com
manshuo.ink
mantachina.com
mantewei.com
@@ -68627,7 +68086,6 @@ masikkk.com
masinen.com
masjfc.com
masjinquan.com
-maslimin.com
maslink.com
maslong.com
mason-led.com
@@ -68642,7 +68100,6 @@ massestech.com
masszxyy.com
masteam.com
master-home.com
-master-ioowe-iwww.com
mastercardnucc.com
masterchefworks.com
masterfy.com
@@ -68884,6 +68341,7 @@ mchat.com
mchifi.com
mchim.net
mchose.pro
+mchost.guru
mchpk.com
mchweb.net
mchxx.net
@@ -68908,9 +68366,9 @@ mcohmygod.com
mcoo.cc
mcooks.com
mcool.com
-mcpeach.cc
mcpemaster.com
mcpmaid.com
+mcq93.app
mcqy.net
mcsafebox.com
mcsgis.com
@@ -68961,7 +68419,6 @@ mdhky.com
mditie.com
mdj2y.com
mdjgjjt.com
-mdjrcw.com
mdkj1.com
mdl.ink
mdlf.xyz
@@ -69006,6 +68463,7 @@ mebhaoya.com
mebo.com
mebtf.com
mebyk.com
+mechanic10.xyz
mechatim.com
mechina.org
mechr.com
@@ -69029,6 +68487,7 @@ meddatas.com
medebound.com
medejob.com
medeming.com
+media.paperclipclub.net
mediastory.cc
mediatek.com
mediav.com
@@ -69130,7 +68589,6 @@ meican.com
meicanstatic.com
meichen.cc
meichengchongdian.com
-meichengkaifa.com
meichenindustry.com
meichibao.com
meichuanchuan.com
@@ -69342,6 +68800,7 @@ meitukiss.com
meitumail.com
meitumob.com
meitumobile.com
+meitumv.com
meitun.com
meituncdn.com
meitupaipai.com
@@ -69572,7 +69031,6 @@ metastonecorp.com
metastudioxr.com
metastudy.vip
metasyun.com
-metatai.xyz
metatube.pro
metavatar.cc
metaversemolecule.com
@@ -69603,13 +69061,13 @@ meu95otw4967t.com
meuicat.com
meutu.com
mevionchina.com
+mevyyk.com
mew.fun
mewx.art
mexicopanama.com
meximexi.me
mexingroup.com
mexontec.net
-mexue.com
mexxum.com
meyet.net
meyoufreight.com
@@ -69619,7 +69077,6 @@ mezw.com
mf-y.com
mf08s.com
mf1288.com
-mf910.com
mf999.com
mfbrjc.com
mfbuluo.com
@@ -69693,7 +69150,6 @@ mgslb.com
mgslb.net
mgslb.org
mgsp.fun
-mgszl.com
mgtv.com
mgtv2025.com
mgw999.com
@@ -69739,7 +69195,6 @@ mhtclub.com
mhtes.com
mhtyd.com
mhtzjt.com
-mhukasx.com
mhv2.net
mhw315.com
mhwck.com
@@ -69780,7 +69235,6 @@ miancp.com
miandanbx.com
mianfeiic.com
mianfeiquming.com
-mianfeissl.com
mianfeiwendang.com
mianfeiwucan.org
mianfeiziti.com
@@ -69807,14 +69261,12 @@ miaodongbar.com
miaogongzi.cc
miaogongzi.net
miaohuiyanyi.com
-miaojiangdaoshi.net
miaojibrand.com
miaokaikeji.com
miaokaiyun.com
miaokan.com
miaokan100.com
miaolaoshi.com
-miaole1024.com
miaolianyunapp.com
miaolingbio.com
miaomaicar.com
@@ -69853,7 +69305,6 @@ miaozanba.com
miaozao.com
miaozhan.com
miaozhen.com
-miaozhu888.com
miaozhun.com
miaozhunjing.net
miaozuo.com
@@ -69908,6 +69359,7 @@ micronetpay.com
microrui.net
microsate.com
microsoft-ware.com
+microsoftsa.com
microsoftuwp.com
microstarsoft.com
microstern.com
@@ -69932,6 +69384,7 @@ midainc.com
midanyi.com
midasbuy.com
midea-buy.com
+midea-group.com
midea-hotwater.com
midea.com
midea.com.tr
@@ -69951,6 +69404,7 @@ midingdong.com
midita.com
midiyinyue.com
midlele.com
+midonglab.com
midongtech.com
midongtech.xyz
midu.com
@@ -70038,7 +69492,6 @@ mijwed.com
mika123.com
mike-x.com
mikeauth.com
-mikechee.com
mikechen.cc
mikecrm.com
mikemessiha.com
@@ -70048,7 +69501,6 @@ mikesent-awareness-04.com
mikesent.net
mikeyouxi.com
mikge.com
-mikger.com
mikika.com
miko007.com
mikoshu.me
@@ -70091,6 +69543,7 @@ milo-star.com
miloktv.com
miloli.info
milphets.com
+milsay.com
milu.com
milu.ink
milubtyx.com
@@ -70115,9 +69568,7 @@ mimoprint.com
mimouse.net
mimvp.com
minapp.com
-mincache.com
mincdn.com
-minchengjx.com
mincoder.com
mind-home.net
mindai.com
@@ -70134,7 +69585,6 @@ mindshow.fun
mindsun.com
mindway-sz.com
minebbs.com
-minecraft.kim
minecraftxz.com
minecraftzw.com
minegoods.com
@@ -70154,7 +69604,6 @@ mingbianji.com
mingbiao001.com
mingbiaohao.com
mingcalc.com
-mingcha.org
mingchao.com
mingchaoonline.com
mingchaoyouxi.com
@@ -70225,7 +69674,6 @@ mingtian.com
mingtou.com
mingxf.com
mingxigu.com
-mingxingbobbin.com
mingxingku.com
mingxinglai.com
mingxuan.store
@@ -70307,7 +69755,6 @@ minovapharma.com
minpayment.com
minqiao.com
minra.com
-minrank.com
minretail.com
minshangjie.com
minshengec.com
@@ -70396,7 +69843,6 @@ misuland.com
misunly.com
mitalk.com
mitang.com
-mitangbao.com
mitangtuan.com
mitao.bar
mitaoping.com
@@ -70541,7 +69987,6 @@ ml-kq.com
mlabc.com
mlairport.com
mlbaikew.com
-mlbuy.com
mlc.cc
mldgoing.com
mlexpo.com
@@ -70566,7 +70011,6 @@ mlj194.com
mlj36.com
mlj55.com
mlj93.com
-mljr.com
mljydoors.com
mlkmba.com
mllj.net
@@ -70668,7 +70112,6 @@ mmsccn.com
mmscoo.com
mmsfw.com
mmsk.com
-mmssai.com
mmstat.com
mmt3000.com
mmtch.com
@@ -70699,7 +70142,6 @@ mnjj.group
mnkan.com
mnnmnn.com
mnpc.net
-mnptinibfbv.com
mnwww.com
mnxhj.com
mo-co.com
@@ -70781,7 +70223,6 @@ mocache.com
mocafilm.com
mocartoon.com
moccaanimation.com
-mocdn.xyz
mochafengbao.com
mochai.store
mochateam.com
@@ -70855,7 +70296,6 @@ moejp.com
moeking.me
moeli123.com
moemiao.net
-moeqy.com
moerlong.com
moetu.club
moetu.org
@@ -70882,7 +70322,6 @@ mofazhu.com
moffettai.com
mofile.com
mofishgames.com
-mofmicrosoft.com
mofoun.com
mofunenglish.com
mogao.com
@@ -70955,7 +70394,6 @@ molefitting.com
molegu.com
molerose.com
molesdn.com
-moliao.biz
molibaike.com
molifan.net
molihe.cc
@@ -70968,9 +70406,7 @@ moliplayer.com
molipy.com
moliqiji.com
molixiangce.com
-molizm.com
mollervilla.com
-molpmh.xyz
molwater.com
molygoo.com
mom001.com
@@ -71030,6 +70466,7 @@ moomoo.com
moomooequity.com
moomootrustee.com
moomv.com
+moon-insight.com
moonbasa.com
moonbio.com
moonbitlang.com
@@ -71207,7 +70644,6 @@ moxingfans.com
moxingyun.com
moxiu.com
moxiu.net
-moxiwh4.com
moxuangenet.com
moyangmoyang.com
moyann.com
@@ -71376,6 +70812,7 @@ msjpay.com
msjy123.com
mskjf.com
mskoo.com
+mslmc.net
msltbio.com
mslzk.com
msm.moe
@@ -71396,7 +70833,6 @@ mstchina.com
mstxx.com
msudz.com
msunland.com
-msvod.com
msweekly.com
msxf.com
msxf.net
@@ -71427,6 +70863,7 @@ mt77.com
mt888vip.com
mtadvert.com
mtadx.com
+mtaokj.com
mtavip.com
mtblj.com
mtchome.com
@@ -71471,7 +70908,6 @@ mtmssdn.com
mtmssdn0.com
mtmt.tech
mtmyw.com
-mtn-db.com
mtnets.com
mtnets.net
mtoou.info
@@ -71573,6 +71009,7 @@ muniao.com
munling.com
munue.com
muomou.com
+muouso.fun
mupao.com
mupceet.com
muqianyun.com
@@ -71624,7 +71061,6 @@ muwai.com
muwaifanzhiliao.com
muwenxi.com
mux5.com
-muxell.com
muxia.fun
muxin.fun
muxiulin.com
@@ -71706,6 +71142,7 @@ mxbc.com
mxbc.net
mxbiao.com
mxbsy.com
+mxceyjj.com
mxchip.com
mxddp.com
mxde.com
@@ -71727,6 +71164,7 @@ mxhichina.com
mxhthw.com
mxifund.com
mxitie.com
+mxitres.com
mxivi.com
mxj.cx
mxjd.com
@@ -71778,6 +71216,7 @@ my120.org
my147.com
my1616.net
my22.fun
+my22.info
my2852.com
my2space.com
my2w.com
@@ -71816,6 +71255,7 @@ mybaby100.com
mybabya.com
mybarrefitness.com
mybdqn.com
+mybj.com
mybjx.net
mybosc.com
myboyan.com
@@ -71830,7 +71270,6 @@ mycar58.com
mycaraok.com
mycarbar.com
mycardgame.net
-mycdn-cache.com
mychery.com
mychery.net
mychinaevent.com
@@ -71944,7 +71383,6 @@ myie9.com
myimis.com
myip.la
myiplay.com
-myipw.com
myir-tech.com
myiroom.com
myirtech.com
@@ -72036,6 +71474,7 @@ mypx.org
myqcloud.com
myqcloud.net
myqee.com
+myqqdd.com
myqqjd.com
myr9.com
myra2.com
@@ -72047,7 +71486,6 @@ myrice.com
myrightone.com
myroome.com
myrqjt.com
-myrrcar.cc
myrrcar.com
myrtb.net
myrunners.com
@@ -72056,6 +71494,7 @@ mysecretrainbow.com
mysemlife.com
myseot.com
myshipjob.com
+myshopex.com
myshoptago.com
myshou.com
myshow360.net
@@ -72247,7 +71686,6 @@ n9z.net
na.ci
na2sib.com
na7.cc
-naadou.com
naaln.com
nabluemedia.com
naboyi.com
@@ -72272,7 +71710,6 @@ nahuiyi.com
nahuo.com
nahuo8.com
nahuo9.com
-nai.si
naibabiji.com
naibago.com
naicha99.com
@@ -72358,6 +71795,7 @@ nanguache.com
nanguakexue.biz
nanguakexue.com
nangualin.com
+nanguaxia.vip
nanguowl.com
nangxia.com
nanhaibank.com
@@ -72492,7 +71930,6 @@ narkii.com
narochina.com
narrowad.com
naruto.red
-narutom.com
narwal.com
narwaltech.com
nas-ya.com
@@ -72559,7 +71996,6 @@ nb-jiale.com
nb-medicalsystem.com
nb0817.com
nb160.com
-nb301.xyz
nb591.com
nba98k.com
nbabm.com
@@ -72610,7 +72046,6 @@ nbgjwl.com
nbgodo.com
nbgong.com
nbgree.com
-nbgroupllc.com
nbgy.com
nbhailan.com
nbhao.org
@@ -72658,7 +72093,6 @@ nbocc.com
nbosco.com
nbpmia.com
nbpolytheatre.com
-nbpyx.com
nbqixing.com
nbqwrc.com
nbrawwater.com
@@ -72681,7 +72115,6 @@ nbslxh.com
nbsmjt.com
nbsp99.com
nbsqbank.com
-nbstbz.com
nbsti.net
nbstjt.com
nbstrans.com
@@ -72690,6 +72123,7 @@ nbszgd.com
nbt.ren
nbtlwl.com
nbtobacco.com
+nbttbn.com
nbtzjd.com
nbtzsh.com
nbuci.com
@@ -72709,7 +72143,6 @@ nbwhg.com
nbwskj666.com
nbxdjt.com
nbxiaoshi.net
-nbxlxcl.com
nbxmz.com
nbxry.com
nbxsjg.com
@@ -72766,7 +72199,6 @@ ncpqh.com
ncpssd.org
ncq8.com
ncqiche.com
-ncreal.fun
ncsdyyy.com
ncshxd.com
ncsjhf.com
@@ -72813,7 +72245,6 @@ ndgzy.com
ndhx.net
ndhys.com
ndiip.com
-ndj-china.com
ndj520.com
ndjtwl.com
ndkhn.com
@@ -72858,7 +72289,6 @@ neep.shop
neeq.cc
neets.cc
neeu.com
-nefertitiware.com
nefficient.co.kr
nei-mao.com
nei.tm
@@ -72869,7 +72299,6 @@ neihancommunity.net
neihandiantai.com
neihanfly.com
neihanshequ.com
-neihuang.cc
neimaowang.com
neimenggugames.com
neisha.cc
@@ -72893,7 +72322,6 @@ nengrui.com
nengshida.com
nengshouwangluo.com
nengyuanxx.com
-nenske.com
nenufm.com
nenup.com
nenzei.com
@@ -72983,7 +72411,6 @@ netinfi.com
netinfi.net
netingcn.com
netitest.com
-netjue.com
netkao.com
netman123.com
netnoease.com
@@ -73141,7 +72568,6 @@ newsmy.com
newsmyshop.com
newsn.net
newspluse.com
-newspress.name
newssc.net
newssc.org
newstarpress.com
@@ -73198,7 +72624,6 @@ nextpcb.com
nextrt.com
nextstudios.com
nexttao.com
-nexttix.net
nextvid.net
nextworkshop.net
nextyu.com
@@ -73226,7 +72651,6 @@ nfdx.net
nffq.net
nffund.com
nfgjhr.com
-nfkos.com
nflchina.com
nflsxl.com
nfmedia.com
@@ -73270,7 +72694,6 @@ ngctransmission.com
ngcz.tv
ngedu.net
ngfcyy.com
-nggift.com
ngh6.com
nghmesc.com
ngicer.com
@@ -73443,7 +72866,6 @@ nikkiup2u2.com
nikkon-china.com
nilai.com
nileloan.com
-nilend.com
nimitzvac.com
nimolife.com
nimotion.com
@@ -73713,7 +73135,6 @@ njfk.net
njfkdq.com
njfklngl.com
njflt.com
-njfmyd.com
njfmz.com
njforge.com
njfuruisi.com
@@ -74048,7 +73469,6 @@ njxizebio.com
njxjjsjt.com
njxkyy.net
njxlhd.com
-njxlmz.com
njxlxx.com
njxnjt.com
njxsmz.com
@@ -74121,6 +73541,7 @@ njzxxyy.com
njzychemical.com
njzztyl.com
nk-sh.com
+nk8686.com
nkf-pharma.com
nkiec.com
nkjy.com
@@ -74145,7 +73566,6 @@ nlscan.com
nlteck.com
nlttms.com
nlww168.com
-nlxfybjy.com
nlxn.com
nlyiren.com
nlypx.com
@@ -74162,7 +73582,6 @@ nmbxd1.com
nmbyh.com
nmcoo.com
nmcpo.com
-nmcysp.com
nmdhzs.com
nmet168.com
nmgatdj.com
@@ -74234,7 +73653,6 @@ nn22772.com
nn22882.com
nn2fy.com
nn2yy.com
-nn33.com
nn3yy.com
nn4yy.com
nn4z.com
@@ -74466,7 +73884,6 @@ nnqtc.com
nnrbsoa.com
nnrc.net
nnrfjc.com
-nnridangwu.com
nnrig.com
nnrkz.com
nnrongjie.com
@@ -74497,7 +73914,6 @@ nnsmk.com
nnsmy.com
nnsqr.com
nnsrjsnzp.com
-nnsssss.com
nnssyjs.com
nnstbss.com
nnsugar.com
@@ -74556,7 +73972,6 @@ nnyarun.com
nnybf.com
nnybskq.com
nnych.com
-nnydcb.com
nnydcs.com
nnyfjc.com
nnyfyfy.com
@@ -74571,7 +73986,6 @@ nnylhz.com
nnynrc.com
nnyongzhou.com
nnysart.com
-nnytty.com
nnyunying.com
nnyy17.com
nnyypc.com
@@ -74631,7 +74045,6 @@ nocode.com
nod32jihuoma.com
node-is.green
node1link.xyz
-nodeasy.com
nodefu.net
nodeing.com
nodejs999.com
@@ -74725,7 +74138,6 @@ noposion.com
nor-land.com
noratechpharma.com
norchem-pharma.com
-nordfxs.com
nordicic.com
nordicways.com
nordikr.com
@@ -74765,7 +74177,6 @@ note52.com
notedeep.com
notetao.com
notetech.org
-notidc.com
notification-list.com
notonlymoon.com
notrisk.com
@@ -74780,7 +74191,6 @@ novastargame.net
novaxinli.com
novel-supertv.com
novelbio.com
-noveless.com
novelfm.com
novelfmpic.com
novelfmstatic.com
@@ -74788,7 +74198,6 @@ novelfmvod.com
novell.me
novelquickapp.com
novelquickapppic.com
-novelsee.com
novemideas.com
novo-auto.com
novo-biotech.com
@@ -74872,7 +74281,6 @@ nri-beijing.com
nrisc.com
nrmchina.com
nrmtc.com
-nrnr.cc
nrsfh.com
nrsg.net
nruan.com
@@ -75052,6 +74460,9 @@ nuctech.com
nuedc-ti.com
nuedcchina.com
nufans.net
+nug08010lu.com
+nug08030lu.com
+nug08031lu.com
nuhcpf.com
nuhighbio.com
nuist.pro
@@ -75068,7 +74479,6 @@ nuobeiliao.com
nuobeirack.com
nuobz.com
nuocdn.com
-nuocx.com
nuodaguandao.com
nuodefund.com
nuodepharm.com
@@ -75088,7 +74498,6 @@ nuonuo.com
nuoshell.com
nuoshou2023.com
nuosike.com
-nuotaii.com
nuoyahao.com
nuoyasite.com
nuoye.xyz
@@ -75107,6 +74516,7 @@ nutriera.com
nutrilite-farm.com
nutsbp.com
nutspace.com
+nutstart.com
nutstore.net
nutstorehq.com
nutzam.com
@@ -75136,7 +74546,6 @@ nvsheng.com
nvshengjie.com
nvshuyun.com
nvsip.com
-nvwangg.com
nvwu.com
nvyouguoji.com
nvzhanshen.com
@@ -75146,7 +74555,6 @@ nw0898.com
nwbiotec.com
nwct.me
nwdlink.com
-nwell.net
nweon.com
nwncd.com
nwshotel.com
@@ -75177,7 +74585,6 @@ nxlayer2.com
nxliao.com
nxls.com
nxly766.com
-nxlyldb.com
nxmy.com
nxnba.com
nxnews.net
@@ -75266,6 +74673,7 @@ nzchina.com
nzcxh.com
nzggroup.com
nzghotel.com
+nzhnb.com
nziku.com
nzkd.com
nzmice.com
@@ -75324,7 +74732,6 @@ oa8858.com
oaavv.com
oabc.cc
oabg.net
-oachn.net
oacrm.com
oact.net
oadz.com
@@ -75348,7 +74755,6 @@ oatenglish.com
oatos.com
oauto.com
oaz.cc
-ob-park.com
obagame.com
obai.cc
obaku.com
@@ -75430,7 +74836,6 @@ octsszj.com
octsunshine.com
octwuhan.com
oculist.net
-ocuwyfarlvbq.com
ocwms.com
odaily.news
odalong.com
@@ -75568,7 +74973,6 @@ ojhdt.com
ojidacp.com
ojkjt.com
ojpal.com
-ojz457.com
ok-meeting.com
ok0415.com
ok06.com
@@ -75790,6 +75194,7 @@ onelife-love.com
onelinkplus.com
onelnk.com
onemob.mobi
+onemtservers.com
onenice.tech
oneniceapp.com
onenoter.com
@@ -75932,7 +75337,6 @@ opal-qt.com
opalhk.com
opark.com
opatseg.com
-opcns.net
opcool.com
opdown.com
opectek.com
@@ -75955,7 +75359,6 @@ openasic.org
openatom.club
openbayes.com
openbcs.com
-openbtba.com
opencas.org
opencloudgpt.online
opencloudos.org
@@ -75998,7 +75401,6 @@ openrice.com
opensoce.com
opensplendid.com
openssw.com
-openthos.com
openuc.com
openwbs.com
openwrt.ai
@@ -76008,10 +75410,10 @@ operachina.com
operatorcom.com
opfed.com
opfibre.com
-opinion.works
opjmw1.ren
opkjh.com
oplay.net
+oplinking.com
oplus.com
oplustrust.com
opmaterial.com
@@ -76102,7 +75504,6 @@ ordosqyjt.com
ordostonghui.com
orebotech.com
orfactory.com
-orfxsoa.com
organo-sz.com
orgcc.com
orggd.com
@@ -76145,7 +75546,6 @@ originsilicon.com
originwater.com
origloria.com
orihard.com
-orion34g.com
oriphant.com
oritive.com
oriza.com
@@ -76174,6 +75574,7 @@ osase.net
osbean.com
osbkj.com
osbzr.com
+osc.cool
oscaches.com
oscarzhoud.com
oschina.com
@@ -76181,7 +75582,6 @@ oschina.io
oschina.net
oscs1024.com
osechina.com
-osedu.net
osee-dig.com
oseminfo.com
oserror.com
@@ -76214,6 +75614,7 @@ ospchina.com
ospod.com
osportsmedia.com
ospp.com
+ospserver.net
osredm.com
osrelease.download.prss.microsoft.com
oss-cn-beijing-aliyuncs.com
@@ -76237,7 +75638,6 @@ otkglass.com
otm.ink
otms.com
otoeasy.com
-otokonocomplex.com
otome.me
otomedream.com
otosaas.com
@@ -76245,6 +75645,7 @@ otp-express.com
otpub.com
otqyzk7mx2t8.com
ott4china.com
+ottai.com
ottclub.com
ottcn.com
ottcn.help
@@ -76443,6 +75844,7 @@ ovtfwn.com
ovuems.com
ovupre.com
ovuwork.com
+ovxe.com
oway.mobi
owecn.com
oweidata.com
@@ -76452,7 +75854,6 @@ owgels.com
owinchina.com
owl-go.com
owlxjz.lol
-ownwuh.xyz
owocloud.net
owoit.com
owseals.com
@@ -76483,7 +75884,6 @@ oyqqan.xyz
oysd.com
oywtv.com
oyya.com
-oyzdbsx.com
oyzns.com
oz138.com
ozocenter.com
@@ -76501,7 +75901,6 @@ p-er.com
p-pass.com
p.biz
p.cdn.persaas.dell.com
-p007fyt3.group
p023.com
p0371.com
p0431.com
@@ -76519,7 +75918,6 @@ p2pchina.com
p2pcq.com
p2peye.com
p2peye.net
-p2pjd.com
p2psearchers.com
p2ptouhang.com
p2pxing.com
@@ -76582,6 +75980,7 @@ paiago.com
paiangmedical.com
paiangstudy.com
paibanxia.com
+paibaohy.com
paicc.com
paichen.net
paichi.com
@@ -76662,6 +76061,7 @@ pamahotel.com
pamica.com
pamss.net
pan-good.com
+pan-ics.com
pan-key.com
pan131.com
pan58.com
@@ -76760,6 +76160,7 @@ panoramastock.com
panothers.com
panpanfood.com
panpanzsw.com
+panpass.net
panpay.com
panplayable-toutiao-b.com
panplayable-toutiao.com
@@ -76787,7 +76188,6 @@ pantower.com
pantrysbest.com
pantuitui.com
pantum.com
-panwan.net
panweizeng.com
panxsoft.com
panyiyun.com
@@ -76813,6 +76213,7 @@ paoshuba.cc
paoshuba.org
paoxq.com
paoxue.com
+paozhengtong.com
paozw.org
papa21.com
papa91.com
@@ -76832,7 +76233,6 @@ paperbert.com
paperbus.com
paperbye.com
paperccb.com
-paperclipclub.net
paperclipglobal.com
papercool.com
paperdb.com
@@ -76937,11 +76337,9 @@ payeco.com
payititi.com
paykwai.com
paylf.com
-paymax.cc
paympay.com
paynews.net
paypaytech.com
-payrao.com
paytm-pay.net
pb89.com
pbc-dcep.com
@@ -77023,7 +76421,6 @@ pcgeshi.com
pcgogo.com
pcgta.cc
pch.pub
-pchealthcheck.net
pchome.com
pchome.net
pchpic.net
@@ -77034,7 +76431,6 @@ pcitech.com
pcjsq.com
pcljl.com
pcmgr-global.com
-pcmjggc.com
pcmoe.net
pcoic.com
pcoof.com
@@ -77105,7 +76501,6 @@ pdidc.com
pdie-expo.com
pdim.gs
pdinvestmentgroup.com
-pdivsvu.com
pdlib.com
pdlnn.com
pdloscar.com
@@ -77140,7 +76535,6 @@ peacebird.com
peaceboat.net
peacekang.com
peacepetro.com
-peaceticket.com
peacha.net
peacockedu.com
peak-labs.com
@@ -77211,7 +76605,6 @@ pek0b0.com
pekhongyuan.com
peksung.com
pelejs.com
-pellucid.art
pelorseating.com
pemap.com
pemch.com
@@ -77294,6 +76687,7 @@ perfma.net
peropero.net
peroperogames.com
persagy.com
+personabook.net
personpsy.org
perspectivar.com
peryt111.fun
@@ -77375,6 +76769,7 @@ pgy6.com
pgyer.com
pgyidc.com
pgyy.com
+pgyy.vip
pgzs.com
pgzx.net
ph-fc.com
@@ -77483,7 +76878,7 @@ phpjiayuan.com
phpkaiyuancms.com
phplife.net
phpor.net
-phprpc.org
+phprnu.com
phpsong.com
phpspider.org
phpstat.net
@@ -77644,7 +77039,6 @@ pinbang.com
pinbayun.com
pinble.com
pinble.net
-pinbu.cc
pincai.com
pinchain.com
pinchedashi.com
@@ -77718,7 +77112,6 @@ pingstart.com
pinguan.com
pinguo.us
pingwest.com
-pingxiangsm.com
pingxiangzhifa.com
pingxiaow.com
pingxuan123.com
@@ -77774,7 +77167,6 @@ pintuer.com
pintuju.com
pintuxiu.net
pinuc.com
-pinunu.com
pinwaiyi.com
pinweiqifu.com
pinxianghui.com
@@ -78018,6 +77410,7 @@ plutoer.com
plutuspay.com
pluveto.com
plvideo.net
+plxao.com
plxfgroup.com
plxww.com
plycd.com
@@ -78196,7 +77589,6 @@ pop-shoe.com
pop136.com
pop365.com
pop800.com
-popasp.com
popcj.com
popcustoms.com
popdg.com
@@ -78269,6 +77661,7 @@ potplayer.org
potplayercn.com
pouchcontainer.io
pouquiagievu.com
+pouser.net
pova-elc.com
power-rail.com
power-sprayer.com
@@ -78328,7 +77721,6 @@ pp51.com
pp5200.com
pp540.com
pp63.com
-pp66.cc
pp77.com
pp8.com
pp918.com
@@ -78468,7 +77860,6 @@ ppzhan.com
ppzhilian.com
ppzuche.com
ppzw.com
-pqd.org
pqdtcn.com
pqpo.me
pqt-bearing.com
@@ -78741,6 +78132,7 @@ puer10000.com
puercha.cc
puercn.com
puerlife.org
+puersai.com
puertea.com
puffergames.com
pugba.com
@@ -78859,7 +78251,6 @@ pvc-diban.net
pvc123.com
pvcliping.com
pvk2e.icu
-pvkj.com
pvmeng.com
pvpin.com
pvxmqp.xyz
@@ -78869,6 +78260,7 @@ pw1999.com
pw65.cc
pw88.com
pwand.com
+pwjptdg.xyz
pwjt.com
pwkss.com
pwmat.com
@@ -78942,7 +78334,6 @@ pymeng.com
pymh.com
pyneo.com
pyou.com
-pypt020.com
pysdsysc.com
pyshszh.com
pyskl.com
@@ -78956,7 +78347,6 @@ python-brief.com
python-china.com
python100.com
python51.com
-pythonav.com
pythonclub.org
pythoner.com
pythonheidong.com
@@ -78974,7 +78364,6 @@ pyxrc.com
pyxwapp.com
pyxww.com
pyycz.com
-pyygbj.com
pyynsm.com
pyzhbc.com
pyzls.com
@@ -79044,7 +78433,6 @@ qajung.xyz
qakkan.vip
qalex.com
qamemc.com
-qanhnvb.com
qapi.cc
qaqgame.com
qaros.com
@@ -79097,7 +78485,6 @@ qcbaas.com
qcbone.com
qcc.com
qcc.qualcomm.com
-qcc0.com
qccip.com
qcckyc.com
qccost.com
@@ -79160,7 +78547,6 @@ qcq3.com
qcql.com
qcr.cc
qcrencai.com
-qcrgz.com
qcrlvip.com
qcrqll.com
qcsapp.com
@@ -79452,6 +78838,7 @@ qhd-marathon.com
qhd.net
qhdast.com
qhdatongnews.com
+qhderwei.com
qhdgjj.com
qhdglc.com
qhdjgyy.com
@@ -79474,7 +78861,6 @@ qhfzcp.com
qhg7.com
qhgas.com
qhgufen.com
-qhgy.net
qhholding.com
qhhxnw.com
qhimg.com
@@ -79627,7 +79013,6 @@ qianjiayue.com
qianjing.com
qianjingdesign.com
qianjingkeji.com
-qianjr.com
qianju.org
qianka.com
qiankoo.com
@@ -79682,11 +79067,11 @@ qiant.net
qiantangke.com
qiantubao.asia
qiantucdn.com
+qianuni.com
qianvisa.com
qianwa.com
qianwanku.com
qianxiangbank.com
-qianxiaonet.com
qianxibj.net
qianximiye.com
qianxin.com
@@ -79734,7 +79119,6 @@ qiaodan.com
qiaofangyun.com
qiaofanxin.com
qiaofu.shop
-qiaogu.com
qiaoh.com
qiaohewei.cc
qiaohu.com
@@ -79755,6 +79139,7 @@ qiaoshoujituan.com
qiaosidea.com
qiaotu.com
qiaoxuanhong.com
+qiaoxuesi.com
qiaoyi.org
qiaoyinkg.com
qiaoyue66.com
@@ -79980,6 +79365,7 @@ qimingzi.net
qiminzi.com
qimodesign.com
qimser.com
+qimu86.com
qinbei.com
qinbing.com
qincai.com
@@ -80036,7 +79422,6 @@ qingdelan.com
qingdou.ltd
qingdou.net
qingdouw.com
-qinger.name
qingf001.com
qingfanqie.com
qingfeichina.com
@@ -80091,7 +79476,6 @@ qinglue.net
qinglvpin.com
qingly.ink
qingmail.com
-qingmang.mobi
qingmayun.com
qingmei.me
qingmh.com
@@ -80124,7 +79508,6 @@ qingshow.net
qingshu.live
qingshuo.com
qingshuxuetang.com
-qingsong123.com
qingsongcdn.com
qingsongchou.com
qingsongjituan.com
@@ -80235,7 +79618,6 @@ qinxue.com
qinxue100.com
qinxue365.com
qinxuye.me
-qinyening.com
qinyi.net
qinyuanyang.com
qinyukehuan.com
@@ -80292,7 +79674,6 @@ qishenghuo.com
qishengliang.com
qishiruye.com
qishixitong.com
-qishixunmei.com
qishu.vip
qishui.com
qishunbao.com
@@ -80302,7 +79683,6 @@ qishuta.net
qishuta.org
qisi.co
qisool.com
-qisuu.la
qisuya.com
qita.love
qitaifu.com
@@ -80352,6 +79732,7 @@ qiuxian.com
qiuxiao.com
qiuxue360.com
qiuxueshe.com
+qiuy.cloud
qiuyewang.com
qiuyexitong.com
qiuyi120.com
@@ -80380,6 +79761,7 @@ qixing123.com
qixingcr.com
qixingquan.com
qixingtang.com
+qixinpro.com
qixintian.com
qixinworks.com
qixiu88.com
@@ -80411,7 +79793,6 @@ qiyeyouxiang.net
qiyi.com
qiyi.video
qiyicc.com
-qiyidj.com
qiyigx.com
qiyikeji.com
qiyimusic.com
@@ -80464,7 +79845,6 @@ qj175.com
qj26.com
qj99.net
qjbchina.com
-qjbwgh.com
qjbxw.com
qjcode.com
qjcrcgas.com
@@ -80521,6 +79901,7 @@ qktoutiao.com
qkttapp.com
qkua.com
qkvop.com
+qkyamkl.com
qkyxzx.com
qkzj.com
ql-cellbank.com
@@ -80591,7 +79972,6 @@ qmht.com
qmht.mobi
qmjianli.com
qmjzdscj.com
-qmmgo.com
qmniu.com
qmqm.net
qmrobot.com
@@ -80659,7 +80039,6 @@ qooic.com
qooioo.com
qookar.com
qookkagames.com
-qoqaoligei.com
qoros.com
qorosauto.com
qosnet.xyz
@@ -80680,7 +80059,6 @@ qphospital.com
qpjjku.com
qpjylm.com
qpkaifa.com
-qplcinfo.com
qplus.com
qpoc.com
qpstar.com
@@ -80730,7 +80108,6 @@ qqcg.com
qqcjw.com
qqdcw.com
qqddc.com
-qqder.com
qqdiannao.com
qqdiannaoguanjiadl.com
qqdna.com
@@ -80753,7 +80130,6 @@ qqgx.com
qqgygd.com
qqgyhk.com
qqhbx.com
-qqhelper.net
qqhjy.com
qqhn.net
qqhot.com
@@ -80833,7 +80209,6 @@ qqtu8.cc
qqtu8.com
qqtxt.cc
qqtz.com
-qqu.cc
qquanquan.com
qqumall.com
qqurl.com
@@ -80866,7 +80241,6 @@ qqyn.com
qqyouju.com
qqywf.com
qqyy.com
-qqz1.com
qqz7.com
qqzby.net
qqzfw.com
@@ -80950,7 +80324,6 @@ qszt.com
qszt.net
qt-edu.com
qt119.com
-qt126.com
qt56yun.com
qt6.com
qt86.com
@@ -81018,7 +80391,6 @@ quan007.com
quan365.com
quanaichina.com
quanbailing.com
-quanben.com
quancang.com
quandashi.com
quandier.com
@@ -81065,7 +80437,6 @@ quanoukeji.com
quanqiuwa.com
quanqiuweishang.com
quanquanapp.net
-quanr.com
quanriai.com
quansheng-group.com
quanshi.com
@@ -81110,14 +80481,11 @@ qubaike.com
qubaobei.com
qubiankeji.com
qucai.com
-qucaigg.com
-qucaiti.com
qucanzhan.com
quce001.com
quceaiqing.com
quchao.net
qucheng.com
-quchew.com
quclouds.com
qudaiji.com
qudajie.com
@@ -81131,6 +80499,7 @@ qudiandi.com
qudingshui.com
qudong.com
qudong51.net
+qudong9.com
qudou100.com
qudoula.com
qudushu.com
@@ -81496,6 +80865,7 @@ qupeiyin.com
qupingce.com
quqi.com
quqike.com
+quqingting.com
quqiuhun.com
ququabc.com
ququpei.com
@@ -81560,9 +80930,7 @@ qvip.net
qvkanwen.com
qvlz.com
qvpublish.com
-qvxtzi.xyz
qvxz.com
-qvyue.com
qw5599.com
qwbk.cc
qwe1e.com
@@ -81807,7 +81175,6 @@ qzjzyy002.com
qzkangfu.com
qzkcw.com
qzkey.com
-qzkj.tech
qzkjyy.com
qzks.com
qzktzc.com
@@ -81989,7 +81356,6 @@ rajyj.com
rakinda-aidc.com
rakinda-xm.com
rakutabichina.com
-rakuyoudesu.com
ramadaplaza-ovwh.com
ramboplay.com
ramostear.com
@@ -82015,7 +81381,6 @@ ranknowcn.com
ranliao.biz
ranling.com
ranqibiao.net
-ranqiren.net
rantu.com
ranwen.net
ranwen.org
@@ -82041,6 +81406,7 @@ rashanghai.org
rashost.com
raspigeek.com
rastargame.com
+rat.dev
rat3c.com
rate2003.com
rationalwh.com
@@ -82096,7 +81462,6 @@ razerzone.com
razrlele.com
raztb.com
rb-parking.com
-rb139.com
rb400.com
rbi-china.com
rbift.icu
@@ -82149,6 +81514,7 @@ rcnep.com
rcolab.com
rcpx.cc
rcss88.com
+rcswo.com
rcsxzx.com
rcuts.com
rcwl.net
@@ -82212,7 +81578,6 @@ readboy.com
readceo.com
readdsp.com
readend.net
-reader8.com
readers365.com
readfollow.com
readfree.net
@@ -82254,7 +81619,6 @@ realor.net
realsee-cdn.com
realsee.com
realshark.com
-realsheying.com
realtech-inc.com
realtimecn.com
realtorforce.ca
@@ -82271,6 +81635,7 @@ rebo-group.com
rechaos.com
rechulishebei.com
recitymedia.com
+reckfeng.com
recodeal.com
recolighting.com
reconova.com
@@ -82320,6 +81685,7 @@ redoufu.com
redox-med.com
redphon.com
redq.cc
+redraingame.com
redrcd.com
redream.com
redredsquare.com
@@ -82375,7 +81741,6 @@ reinness.com
rejesafe.com
rejushe.com
rek8.com
-rekelead.com
rekong.com
rekonquer.com
rekoo.com
@@ -82416,7 +81781,6 @@ renbenai.com
renbenzhihui.com
renbj.com
rencai.biz
-rencaiaaa.com
rencaijia.com
rencaijob.com
rencheng1991.com
@@ -82456,11 +81820,9 @@ renminkaiguan.com
renminyixue.com
renny.ren
renping.cc
-renqitong.com
renren-inc.com
renren.com
renren.io
-renren3d.com
renrenbeidiao.com
renrenche.com
renrencou.com
@@ -82503,7 +81865,6 @@ repaiapp.com
repair5g.com
repanso.com
repian.com
-repianimg.com
replays.net
replica.club
replicabest.cc
@@ -82711,7 +82072,6 @@ rimaiwang.com
rin9.com
ringdoll.com
ringpu.com
-rinima.cc
rining.com
rinlink.com
rinvay.cc
@@ -82724,6 +82084,7 @@ ripic.xyz
rippletek.com
riqicha.com
risc-v1.com
+riscv-dev.tech
riscv-mcu.com
riscv-summit.com
riscv.club
@@ -82743,7 +82104,6 @@ rishuncn.com
rising-eo.com
risingauto.com
risinggas.com
-risingpenny.com
riskbird.com
riskivy.com
risongtc.com
@@ -82847,7 +82207,6 @@ rmbbk.com
rmbgame.net
rmbgd.com
rmburl.com
-rmcaribbean.com
rmcteam.org
rmcvqq.sbs
rmejk.com
@@ -82855,13 +82214,11 @@ rmgvx.com
rmhospital.com
rmjiaju.com
rmjtxw.com
-rmjypx.com
rmnof.com
rmny.tech
rmoxl.com
rmrbwc.com
rmrun.com
-rmryun.com
rmsznet.com
rmttjkw.com
rmtyun.com
@@ -82997,7 +82354,6 @@ rongguang-sh.com
ronghai.com
ronghaosk.com
ronghedai.com
-ronghejiuye.com
ronghotels.com
ronghuajixie.com
ronghub.com
@@ -83013,7 +82369,6 @@ rongmaowl.com
rongmei.net
rongnav.com
rongnews.com
-rongqiguan.com
rongqu.net
rongroad.com
rongsheng.biz
@@ -83157,7 +82512,6 @@ rrcimg.com
rrcp.com
rrdiaoyu.com
rrdtz.com
-rree.com
rrfccx.com
rrfed.com
rrfmn.com
@@ -83174,7 +82528,6 @@ rrrdai.com
rrrrdaimao.com
rrrxz.com
rrs.com
-rrscdn.com
rrsurg.com
rrswl.com
rrting.net
@@ -83197,7 +82550,6 @@ rrzxw.net
rs-xrys.com
rs485.net
rsachina.org
-rscala.com
rscazvdbfpbyzqdvpy1m.com
rscazvdbfpbyzqdvpylm.com
rsdcw.com
@@ -83289,13 +82641,13 @@ ru9911.com
rua93.online
ruan.cloud
ruan8.com
-ruan88.com
ruancan.com
ruanchaomin.com
ruancq.xyz
ruanduo.com
ruandy.com
ruanfujia.com
+ruanjian60.com
ruanjiandown.com
ruanjianwuxian.com
ruanjianya.net
@@ -83390,7 +82742,6 @@ ruihaozhanlan.com
ruihengyiliao.com
ruiheyuanny.com
ruihongip.com
-ruihongxing.com
ruihuajw.com
ruihuaxinxi.com
ruihuo.com
@@ -83403,7 +82754,6 @@ ruijinginfo.com
ruijinintl.com
ruijinyy.com
ruikangjinshu.com
-ruikesearch.com
ruilibi.com
ruilimr.com
ruilinblw.com
@@ -83458,7 +82808,6 @@ ruizhi-group.com
ruizhipak.com
ruizhiqi.com
ruizib.com
-ruizim.com
ruizong-gz.com
rujiazg.com
rujiu.net
@@ -83564,6 +82913,7 @@ rushui.net
russellluo.com
rustc.cloud
rustfisher.com
+rustfs.com
rustvnt.com
ruthout.com
ruthus.com
@@ -83615,7 +82965,6 @@ rxhospital.com
rxhui.com
rxhysm.com
rxian.com
-rxjcw.com
rxjhbaby.com
rxjt.co
rxkjcn.com
@@ -83663,6 +83012,7 @@ rytx.com
rytyaofang.com
ryweike.com
ryx.store
+ryxiut.com
ryxiut.net
ryxkf.com
ryylkj.com
@@ -83904,6 +83254,7 @@ samsunganycar.com
samsungcloudcn.com
samsungconnectivity.com
samsunghealthcn.com
+samsungosp.com
samsungyx.com
samton.net
samyang.cc
@@ -84027,6 +83378,7 @@ sanligm.com
sanliwenhua.com
sanlovalve.com
sanmanuela.com
+sanmanuela.net
sanmao.com
sanmiaocdn.com
sanmicun.com
@@ -84103,7 +83455,6 @@ sanyibao.com
sanyichemical.com
sanyipos.com
sanyouco.com
-sanyoudq.com
sanyougame.com
sanyoumed.com
sanyoutj.com
@@ -84144,6 +83495,7 @@ sapphiretech.store
saraba1st.com
sardchina-lmgt.com
sarft.net
+sarosgame.com
sasacity.com
sasecurity.com
sass.hk
@@ -84162,7 +83514,6 @@ satrip.com
saturdaysoft.com
saturnbird.com
saublenew.com
-saveatsma.com
savilehotelgroup.com
savokiss.com
savouer.com
@@ -84252,10 +83603,12 @@ scansmt.com
scanv.com
scarbbs.com
scarclinic-cn.com
+scardtech.com
scasqhwz.com
scatc.net
scavc.com
scbaidu.com
+scbaijia.com
scbao.com
scbaopo.org
scbgaudio.com
@@ -84266,7 +83619,6 @@ scbotai.com
scbuilder.com
scbxmr.com
scbyx.net
-scbz120.com
sccbj.com
sccchina.net
scccyts.com
@@ -84297,6 +83649,7 @@ scdccb.com
scdcs.net
scdengbang.com
scdn.im
+scdn.io
scdn0077.com
scdn08xd.com
scdn0wcp.com
@@ -84429,7 +83782,6 @@ scdzmw.com
sce-re.com
scea.co
sceci.net
-scedu.net
sceea.org
sceeo.com
sceia.org
@@ -84502,6 +83854,7 @@ sciencecity.net
sciencehr.net
sciencep.com
sciengine.com
+scienjus.com
scientop.com
scientrans.com
scienward.net
@@ -84519,7 +83872,6 @@ scimall.cc
scimall.org
scimao.com
scimee.com
-scinno-cn.com
scinormem.com
scinorwater.com
scio.icu
@@ -84693,7 +84045,7 @@ scxdf.com
scxinkang.com
scxjyw.com
scxsls.com
-scxtj.com
+scxsrh.com
scyanzu.com
scyarui.com
scybjc.com
@@ -84736,7 +84088,6 @@ sd-fjzy.com
sd-gold.com
sd-gree.com
sd-guotai.com
-sd-huaxu.com
sd-jiuyang.com
sd-jnyz.com
sd-kb.com
@@ -84744,7 +84095,6 @@ sd-keyuan.com
sd-nand.com
sd-port.com
sd-portfh.com
-sd-qx.com
sd-rtn.com
sd-sangte.com
sd-sanju.com
@@ -84772,7 +84122,6 @@ sdbao.com
sdbaoding.com
sdbaowei.com
sdbeidou.com
-sdbeone.com
sdbeta.com
sdbetter.com
sdbgk.com
@@ -84800,7 +84149,6 @@ sdcjtz.com
sdcjxy.com
sdclimber.com
sdcmc.net
-sdcmnis.com
sdcoke.com
sdcpd.com
sdcqjy.com
@@ -84823,7 +84171,6 @@ sddhpharm.com
sddory.com
sddp.net
sddstore.com
-sddsxc.com
sddtzx.com
sddyfxjc.com
sddyzl.com
@@ -84837,6 +84184,7 @@ sdecloud.com
sdecu.com
sdecx.com
sdedu.net
+sdedubook.com
sdeer.com
sdeerlive.com
sdenews.com
@@ -84942,7 +84290,6 @@ sdhxsj.com
sdhycm.com
sdhydl.com
sdhynytc.com
-sdhz12333.com
sdhzgs.com
sdi23.com
sdiandian.com
@@ -85067,7 +84414,6 @@ sdointl.com
sdoke.com
sdongpo.com
sdoprofile.com
-sdoqp.com
sdoyhg.com
sdpag.com
sdpea.org
@@ -85375,6 +84721,7 @@ seedit.cc
seedit.com
seedland.cc
seedlandss.com
+seedpace.com
seedsufe.com
seeed.cc
seegif.com
@@ -85401,7 +84748,6 @@ seepomotor.com
seepomotor.net
seerbigdata.com
seerking.com
-seersee.com
seesawcoffee.com
seeseed.com
seeshentech.com
@@ -85454,7 +84800,6 @@ selinuxplus.com
sellerspace.com
sellersprite.com
sellfox.com
-sellgreat.com
sellingexpress.net
selypan.com
sem123.com
@@ -85723,7 +85068,6 @@ sfydns.com
sfygroup.com
sfys365.com
sfystatic.com
-sfyyqc.com
sfzj123.com
sg-che.com
sg-gemsy.com
@@ -85735,7 +85079,6 @@ sg169.com
sg888.vip
sg91.net
sg92.com
-sgad.site
sgameglobal.com
sgamer.com
sgautomotive.com
@@ -85840,7 +85183,6 @@ sh-gexing.com
sh-gsg.com
sh-henderson-metropolitan.com
sh-hengyuan.com
-sh-henian.com
sh-hilead.com
sh-hitech.com
sh-hlrubber.com
@@ -85892,7 +85234,6 @@ sh-service.com
sh-sfc.com
sh-sgl.com
sh-shenming.com
-sh-shenou.com
sh-shuguang.com
sh-sict.com
sh-sinodiet.com
@@ -86012,7 +85353,6 @@ shandongjiapeng.com
shandongjuli.com
shandonglanhua.com
shandongqinuo.com
-shandongrs.com
shandongruyi.com
shandongsannong.com
shandongsilk.com
@@ -86146,7 +85486,6 @@ shanghcat.com
shanghuiai.com
shanghuiwww.com
shanghuiyi.com
-shangjialianpage6.win
shangjie2006.com
shangjieiot.com
shangjilian.com
@@ -86171,7 +85510,6 @@ shangpo.com
shangpu-china.com
shangpusou.com
shangpuzhan.com
-shangqiulvxing.com
shangquanquan.com
shangque.com
shangrao-marathon.com
@@ -86226,9 +85564,9 @@ shanhe01.com
shanheknit.com
shanheyule.com
shanhs.com
+shanhu188.com
shanhu99.com
shanhuu.com
-shanhuxueyuan.com
shanji.club
shanjianzhan.com
shanjingyuan.com
@@ -86396,7 +85734,6 @@ shayujizhang.com
shayuweb.com
shazc.com
shb.ltd
-shb02.com
shbangde.com
shbangdian.com
shbaoli.com
@@ -86424,7 +85761,6 @@ shbtpm.com
shbxzp.com
shbyer.com
shbyw.com
-shc1126.com
shcaco3.com
shcancer.com
shcas.net
@@ -86542,7 +85878,6 @@ shejiqun.com
shejis.com
shejiwo.net
shejixf.com
-shejiye.com
shejiyizhou.com
shejiyue.com
sheketiandi.com
@@ -86725,6 +86060,7 @@ shenpucw.com
shenqhy.com
shenqisou.com
shenqiwunet.com
+shenqizhilv.com
shenquol.com
shenrongda.com
shenrongjidian.com
@@ -86868,7 +86204,6 @@ shguanmai.com
shgushi.com
shgyg.com
shgymy.com
-shhanjunco.com
shhanqiao.com
shharborcity.com
shhbgm.com
@@ -87015,7 +86350,6 @@ shijiretailo2o.com
shijitailai.com
shijiudao.com
shijiufang.com
-shijizhongxi.com
shijqq.com
shiju.cc
shijue.me
@@ -87167,7 +86501,6 @@ shiwang1688.com
shiwangyun.com
shiweisemi.com
shiwenlu.com
-shiwusmd.com
shixiangren.com
shixiaojin.com
shixibiaozhi.com
@@ -87229,7 +86562,6 @@ shjaming.com
shjayson.com
shjb600838.com
shjcm3d.com
-shjcpf.net
shjd.org
shjdceo.com
shjdjx.com
@@ -87296,7 +86628,6 @@ shlayout.com
shlcxby.com
shld.com
shldfm.com
-shleilik.com
shlhbxg.com
shliangshi.com
shlingang.com
@@ -87322,7 +86653,6 @@ shmds.com
shmds.vip
shmedia.tech
shmengyang.com
-shmesun.com
shmet.com
shmetro.com
shmfmr.net
@@ -87359,7 +86689,6 @@ shockley-elect.com
shodbj.com
shoegaze.com
shoeshr.com
-shoeswheels.net
shofine.com
shojo.cc
shokan.org
@@ -87408,7 +86737,6 @@ shoubanjiang.com
shoubaodan.com
shoubashou.net
shoubb.com
-shoubiao1688.com
shoubiaohuishou.com
shoubiaowang.com
shoubuluo.com
@@ -87629,7 +86957,7 @@ shsparkwater.com
shspdq.com
shsportschool.com
shsq.vip
-shssac.com
+shsrdzs.com
shssdc.com
shssp.org
shstcm.com
@@ -87706,7 +87034,6 @@ shuangkuai.co
shuangle56.com
shuangle888.com
shuangliang-boiler.com
-shuangliangbale.com
shuanglin.com
shuanglingroup.com
shuanglongdong.com
@@ -87872,7 +87199,6 @@ shujutang.com
shujuwa.net
shujuwu.com
shujuxian1688.com
-shujuzhentan.com
shukeba.com
shukeju.com
shukemobile.com
@@ -87885,7 +87211,6 @@ shukuai3.com
shukuajing.com
shukuge.com
shukun.press
-shukw.com
shukwai.com
shulanapp.com
shulanedu.com
@@ -87916,6 +87241,7 @@ shunchangdt.com
shunchangzhixing.com
shunchaojinshu.com
shuncom.com
+shundaoyun.com
shunde-marathon.com
shundecity.com
shundehr.com
@@ -87965,7 +87291,6 @@ shuoman.com
shuomingshu.net
shuomingshuku.com
shuoniu.cc
-shuoou.com
shuoshuojie.net
shuoshuojuzi.com
shuoshuokong.com
@@ -88038,6 +87363,7 @@ shuzhiduo.com
shuzhou.cc
shuzibao.com
shuzigd.com
+shuzigonggao.com
shuziguanxing.com
shuzijihuo.com
shuzilm.com
@@ -88045,7 +87371,6 @@ shuzisharing.com
shuziw.com
shuzixiaoyuan.com
shuzixindong.com
-shuziyoutian.com
shuziyuedong.com
shuzong.com
shwbs.org
@@ -88143,7 +87468,6 @@ shyrcb.com
shyrcw.com
shyrcw.net
shyrjt.com
-shysco.com
shysjt.com
shyuanye.com
shyueai.com
@@ -88213,7 +87537,6 @@ si-en.com
si-era.com
si-in.com
si-win.com
-si9377.com
sia1995.net
siad-c.com
siaedu.net
@@ -88326,7 +87649,6 @@ siixu.com
sijiaomao.com
sijijun.com
sijinchuanbo.com
-sijitao.net
sijiwater.com
sijiweinong.com
sikantech.com
@@ -88358,7 +87680,6 @@ silkpresent.com
silkroad-ec.com
silkroad24.com
silkroadtechnologies.com
-silksong.me
silktrek.com
sillumin.com
sillydong.com
@@ -88400,7 +87721,6 @@ simici3.com
simicloud.com
simij.com
simiki.org
-simingcun.net
simingkuai.com
simingtang.com
simkeway.com
@@ -88977,7 +88297,6 @@ sjzyxh.com
sjzyyhg.com
sjzyz.net
sjzzbxh.com
-sjzzimu.com
sjzzxmm.com
sjzzyy.com
sk163.com
@@ -89018,6 +88337,7 @@ skpssz.com
skrshop.tech
skrskrskrskr.com
sksdwl.com
+sksight.com
skslfd.com
skstravel.com
skswz.com
@@ -89044,6 +88364,7 @@ skyard.com
skyart.site
skybility.com
skybluek.com
+skybogroup.com
skybright-group.com
skycaiji.com
skycedu.com
@@ -89116,7 +88437,6 @@ skyxvpn.com
skyyin.org
skyzhan.com
skznsb.com
-sl-360.com
sl.al
sl.fun
sl512.com
@@ -89363,6 +88683,7 @@ smsbao.com
smshos.com
smshx.com
smskb.com
+smslk1.com
smslkcoffee.com
smsot.com
smsvifv.com
@@ -89413,7 +88734,6 @@ smyxxj.com
smyyhj.com
smyyulin.com
smyz.net
-smzaxx.com
smzdm.com
smzdmimg.com
smzdwan.com
@@ -89490,6 +88810,7 @@ snkhome.com
snkjol.com
snkshoe.com
snkyat.com
+snltty.com
snlxgk.com
snmandarin.com
snmi.com
@@ -89601,7 +88922,6 @@ sodayang.com
sodc8.com
sodexo-cn.com
sodhef.com
-sodianwan.com
sodiao.cc
sodig.com
sodino.com
@@ -89609,6 +88929,7 @@ sodion.net
sodocloud.com
sody123.com
soeasysdk.com
+soeo.net
sofa-webbing.com
sofabiao.com
sofan.one
@@ -89636,7 +88957,6 @@ softbanks.net
softbar.com
softbingo.net
softgostop.com
-softhead-citavi.com
softhome.cc
softjinzhou.com
softmall.net
@@ -89712,7 +89032,6 @@ sokoban.ws
soku.com
sokuba.com
sokutu.com
-sokutxt.com
sokyotw.com
solaking.com
solanyun.com
@@ -89755,7 +89074,6 @@ som88.net
somacisgraphic.hk
somama.com
somamobi.com
-somao123.com
somcool.com
somd5.com
somdom.com
@@ -89809,7 +89127,6 @@ songsongruanwen.com
songsongyingxiao.com
songsongyun.com
songtaox.com
-songtaste.com
songtasty.com
songtianlube.com
songtsam.com
@@ -89922,7 +89239,6 @@ sososteel.com
sosotec.com
sosoyunpan.com
sosoyy.com
-sosuan.com
sosuo.name
sosyao.com
sotake.com
@@ -89938,7 +89254,6 @@ sou-yun.com
sou.com
sou58.com
soua.com
-souacode.com
souaiche.com
souajki.com
souajki.net
@@ -90006,7 +89321,6 @@ sourcecodecap.com
sourcecodeserver.com
sourcegcdn.com
sourcelandchina.com
-sourl.co
sousea.com
soushai.com
soushoubiao.com
@@ -90059,13 +89373,13 @@ sowotech.com
sowu.com
soxiqu.com
soxpai.com
-soxsok.com
soxyc.com
soya-protein.com
soyim.com
soyixia.net
soyiyuan.com
soyjg.com
+soyo-dg.com
soyohui.com
soyoung.com
soyouso.com
@@ -90129,7 +89443,6 @@ specchemind.com
specialcdnstatus.com
spectorfilm.com
spectreax.com
-spectreax.site
speechless.pw
speed-hz.com
speedaf.com
@@ -90179,7 +89492,6 @@ splaybow.com
splayer.work
spldlkj.com
splendecor.com
-splicd.com
splmcn.com
spmcn.com
spmyc.com
@@ -90187,11 +89499,11 @@ spnchinaren.com
spochikj.com
spoience.com
spointdesign.com
+sport-syy.com
sportman.cc
sportnanoapi.com
sportq.com
sports-100.com
-sports-idea.com
sportsdt.com
spoto.net
spotpear.com
@@ -90392,6 +89704,7 @@ ssffx.com
ssgedm.com
ssgeek.com
ssggg.com
+ssgsemi.com
ssgxwq.com
ssgz.com
sshce.com
@@ -90472,7 +89785,6 @@ ssslgs.com
sssmro.com
sssmy.com
ssso.com
-sssyyy.com
sst-ic.com
sst-sd.com
sst-sz.com
@@ -90499,7 +89811,6 @@ ssyxdeli.com
ssyxlx.com
ssyxmall.com
ssyzx.net
-sszdh.net
sszgit.com
sszhg.com
sszjnc.com
@@ -90533,6 +89844,7 @@ standteam.net
stanlyview.com
staofchina.com
stapharma.com
+star-charge.com
star-elink.com
star-engine.com
star-kid.com
@@ -90551,6 +89863,7 @@ starbaby.cc
starbaby.com
starbaysoft.com
starbrightpet.com
+starcharge.com
stardata360.com
starde.net
stardict.org
@@ -90575,7 +89888,6 @@ starpack-group.com
starpainters.net
starpiao.com
starrails.com
-starredvs.com
starrockinvest.com
starrtc.com
starrydyn.com
@@ -90685,7 +89997,6 @@ step-motor.com
stepelectric.com
stepsigriner.com
steriguardmed.com
-stevelanasa.com
stfile.com
stg8.com
stgiantfilms.com
@@ -90706,7 +90017,6 @@ stmaoyi.com
stmbuy.com
stmjsociety.com
stmybj.com
-stnew.xyz
stnn.cc
stnts.com
sto-express.com
@@ -90788,7 +90098,6 @@ stubbornhuang.com
studa.net
studentboss.com
studioartiz.com
-studiozecevic.com
studstu.com
study-cloud.com
study163.com
@@ -90867,7 +90176,6 @@ subom.net
subond.com
subuy.com
sucai.com
-sucai123.com
sucai77.com
sucai999.com
sucaibar.com
@@ -90891,7 +90199,6 @@ suchengmeizhan.com
suchugao.com
suchz.com
sucjg.com
-suckdude.com
sucop.com
sucoupon.com
sudaizhijia.com
@@ -90945,7 +90252,6 @@ suhedj.com
suhedz.com
suhergroup.com
suhongzhan.com
-suhuibao.com
suhuikj.com
suhuishou.com
sui.com
@@ -91087,7 +90393,6 @@ suner.cc
sunera-cn.com
sunergyworks.com
sunflowerscf.com
-sunfluxeq.com
sunfounder.cc
sunfreight-logistics.com
sunfront.com
@@ -91205,6 +90510,7 @@ sunsharer.com
sunshine-power.net
sunshine-sino.com
sunshinecoasthomesearch.com
+sunsili.com
sunsilu.com
sunsine.com
sunspotfund.com
@@ -91431,6 +90737,7 @@ suyugame.com
suyujoy.com
suyun.net
suyunj.com
+suyur.com
suyutech.com
suyuzz.com
suz-vpn.amd.com
@@ -91649,7 +90956,6 @@ sxepc.com
sxetcedu.com
sxfl.org
sxfoundation.com
-sxfsw.com
sxfu.org
sxfyjzzs.com
sxgbs.com
@@ -91686,7 +90992,6 @@ sxhtyy.net
sxhwhb.com
sxhwls.com
sxhxbank.com
-sxhyjt.com
sxinrj.com
sxisa.org
sxjant.com
@@ -91706,7 +91011,6 @@ sxjmfxky.com
sxjntech.com
sxjtyhjt.com
sxjwlkj.com
-sxjwxs.com
sxjxdyqfw.com
sxjybk.com
sxjzxww.com
@@ -91718,6 +91022,7 @@ sxldns.com
sxlfwl.com
sxlhrj.com
sxlib.com
+sxlljm.com
sxlottery.net
sxlpd.com
sxls.com
@@ -91841,7 +91146,6 @@ sxyrxb.com
sxyxqk.com
sxyyc.net
sxyyzcj.com
-sxzb.app
sxzcrq.com
sxzhaobiao.com
sxzhongfei.com
@@ -91874,11 +91178,13 @@ sybasebbs.com
syberos.com
syberq.com
sybj.com
+sybxpu.com
sybygx.com
sycaijing.com
sycbbs.com
sycdtz.com
sychlon.com
+sycontroller.com
sycreader.com
sycsgj.com
sycxzx.net
@@ -92025,7 +91331,6 @@ sysjnl.com
sysjoint.com
sysmaster.online
sysmini.com
-sysmk120.com
sysmls.com
sysnfj.com
sysokean.com
@@ -92040,7 +91345,6 @@ sysutest.xyz
syswgw.com
sysx.tech
sysxhz.com
-sysydianji.com
sysydz.net
sysyhfj.com
sysysjnk.com
@@ -92083,9 +91387,7 @@ syyy99.com
syyyd.com
syyyj.com
syyyking.com
-syyykj.xyz
syyzhpc.com
-syzdbxg.com
syzdhyb.com
syzjjt.com
syzlzz.com
@@ -92210,7 +91512,6 @@ szajsj.com
szamc.com
szande.com
szanjun.com
-szaoh.org
szaojin.com
szas.com
szastcg.com
@@ -92320,6 +91621,7 @@ szds.com
szdsit.com
szdtwcw.com
szdunan.net
+szduopin.com
szdwwy.com
szdwxy.com
szdwyy.com
@@ -92462,7 +91764,6 @@ szhuayilong.com
szhubei.com
szhuhang.com
szhulian.com
-szhulian.net
szhuodong.com
szhvac.org
szhvs.com
@@ -92529,6 +91830,7 @@ szjunfei.com
szjunlin.com
szjunrong.com
szjuquan.com
+szjuwx.com
szjuyou.com
szjxgroup.com
szjxj.com
@@ -92603,7 +91905,6 @@ szlvwang.com
szlwbj.com
szlwtech.com
szlxl100.com
-szlygc.com
szlyi.com
szlzsd.com
szmadigi.com
@@ -92944,7 +92245,6 @@ szyingduoduo.com
szyinglian.com
szyingzhan.com
szyink.com
-szyixiu.net
szyixx.com
szyiyue.com
szyjedu.com
@@ -93127,7 +92427,6 @@ taida100.com
taidao.net
taidaxincai.com
taidhotel.com
-taidic.net
taidichina.com
taidu.com
taiduhome.com
@@ -93206,7 +92505,6 @@ tais3.com
taisantech.com
taisenfurniture.com
taishangroup.com
-taishangshiwu.com
taishansports.com
taishanxq.com
taishanyy.com
@@ -93294,7 +92592,6 @@ tan14.net
tan8.com
tanapk.com
tanbao178.com
-tanbaoe.com
tanbo.name
tanboer.com
tancdn.com
@@ -93316,6 +92613,7 @@ tangdouimg.com
tangeche.com
tangfc.com
tanggu11g.com
+tangguobaohe.com
tangguoxian.com
tanghu.net
tanghushi.com
@@ -93324,6 +92622,7 @@ tangjihuang.com
tangkabj.com
tanglei.name
tangmi.net
+tangmingint.com
tangongye.com
tangpai.cc
tangping.com
@@ -93471,7 +92770,6 @@ taohaoqu.com
taohaowan.com
taohhui.com
taohua.com
-taohuah.com
taohuang.com
taohuazu.net
taohuazu.pw
@@ -93525,7 +92823,6 @@ taopuwang.com
taopxx.com
taoq.net
taoqao.com
-taoqian123.com
taoqizu.com
taoquanquan.com
taor.work
@@ -93665,7 +92962,6 @@ tbcache.com
tbh5.com
tbhcc.com
tbhelper.com
-tbi-osk.com
tbinq.com
tbjfw.com
tbjt18.com
@@ -93831,6 +93127,7 @@ tcxys.com
tcxzj.com
tcy1688.com
tcy365.com
+tcy365.net
tcyad.com
tcyfw.com
tcylgslb.com
@@ -94069,7 +93366,6 @@ telrgeam.cc
telsda.com
telu.net
telunsu.net
-telunxiaosu.fun
tem.pw
temaiapi.com
temaiku.com
@@ -94506,7 +93802,6 @@ thfdcsoft.com
thffc.com
thgkyy.com
thgsjt.com
-thhome.net
thhymj.com
thief.im
thiemechina.com
@@ -94570,10 +93865,8 @@ threewater.net
thrive-chemicals.com
thronechina.com
thrrip.space
-thruudrad.com
ths123.com
ths8.com
-thseoer.com
thsj.com
thsolar.com
thstars.com
@@ -94598,7 +93891,6 @@ thvow.com
thwater.com
thwgetsy.com
thwiki.cc
-thwjbg.com
thwpmanage.com
thxddb.com
thxdx.com
@@ -94644,7 +93936,6 @@ tianchanggongjiao.com
tianche.net
tianchenalum.com
tianchengas.com
-tianchengps.com
tianchi.com
tianchihao.com
tianchu.com
@@ -94742,6 +94033,7 @@ tianmidian.com
tianmimiclub.com
tianmu.mobi
tianmu.net
+tianmuds.com
tianmumusic.com
tianmunews.com
tianmupe.com
@@ -94759,14 +94051,12 @@ tianqi.cc
tianqi.com
tianqi24.com
tianqi321.com
-tianqi518.com
tianqiaojuyuan.com
tianqiaoyishuzhongxin.org
tianqiapi.com
tianqicloud.com
tianqihoubao.com
tianqiip.com
-tianqiji.com
tianqijun.com
tianqilithium.com
tianqistatic.com
@@ -94797,7 +94087,6 @@ tianshi2.net
tianshiyiyuan.com
tianshizhisheng.net
tianshugame.com
-tianshuizhaopin.com
tianshungroup.com
tiansu-china.com
tiantaichina.com
@@ -94828,7 +94117,6 @@ tiantianxieye.com
tiantianxuexi.com
tiantingfm.com
tiantis.com
-tiantk1.com
tiantongfruit.com
tiantonglaw.com
tianvalue.com
@@ -94912,7 +94200,6 @@ tiaotiao.store
tiaotiaotang.net
tiaovon.com
tiaoyue.xyz
-tiaozao.me
tiaozhanbei.net
tiapi.net
tiatiatoutiao.com
@@ -95085,7 +94372,6 @@ tinetcloud.com
tinfinite.com
tinfo.com
ting22.com
-ting456.com
ting55.com
ting89.com
tingbook.com
@@ -95093,7 +94379,6 @@ tingchewei.net
tingchina.com
tingchucontrol.com
tingclass.com
-tingfei.space
tingfun.net
tinghaohr.com
tinghen.com
@@ -95133,6 +94418,7 @@ tinktek.net
tinman798.net
tinning-automation.com
tinsecret.com
+tinstu.com
tinwod.com
tinychen.com
tinycms.xyz
@@ -95142,6 +94428,7 @@ tinyflare.com
tinygroup.org
tinylab.org
tinymind.com
+tinypixos.com
tinyservices.net
tinywan.com
tinyyuan.com
@@ -95322,7 +94609,6 @@ tjtrust.com
tjtsxd.com
tjtvc.com
tjubbs.net
-tjucar.com
tjumc.com
tjupdi.com
tjuzj.com
@@ -95330,6 +94616,7 @@ tjwatergroup.com
tjwch.com
tjwch.org
tjwenjie.com
+tjwf.com
tjwj88.com
tjwmschool.net
tjxdzhonda.com
@@ -95371,8 +94658,8 @@ tkddns.xyz
tkfff.com
tkgame.com
tkhealthcare.com
+tkjzym.com
tkmedicare.com
-tkoubei.com
tkpension.com
tkplusemi.com
tkrlab.com
@@ -95385,7 +94672,6 @@ tkxlglyy.com
tkxxd.net
tkxyy.com
tky001.com
-tkyfw.com
tkyks.xyz
tkzqv.com
tl-finechem.com
@@ -95406,7 +94692,6 @@ tlbyx.com
tlcbf.com
tlcharity.com
tlcssk.com
-tldczgs.com
tlfw.net
tlfzkj.com
tlgas.com
@@ -95446,7 +94731,6 @@ tlsy.vip
tlt5.com
tlte.com
tltesoft.com
-tltsxk.com
tltuan.net
tltzg.com
tlu5.com
@@ -95455,7 +94739,6 @@ tlwk.net
tlwok.com
tlxxw.com
tly.cloud
-tlygc.com
tlyz.net
tlzey.com
tlzhjt.com
@@ -95538,6 +94821,7 @@ tnettms.com
tnfn.net
tnfno.icu
tngcjx.com
+tngdigital.com.my
tnodenow.com
tnong.com
tnsou.com
@@ -95700,7 +94984,6 @@ tonglichang.com
tonglingwulian.com
tonglize.com
tongmengge.com
-tongmijx.com
tongniguoji.com
tongoiltools.com
tongpiao.com
@@ -95886,6 +95169,7 @@ topomel.com
toppdu.com
topperuse.com
topping.pro
+toppingaudio.com
toppollen.com
toppps.com
toppridehk.com
@@ -95947,6 +95231,7 @@ toshiba-tnis.com
toshow.com
tosohbioscience.net
tosonet.com
+tosound.com
tospur.com
tosstar5117.com
tosuai.com
@@ -95978,6 +95263,7 @@ touchev.com
touchjoin.com
touchjoint.com
touchmark.art
+touchngo.com.my
touchpal.com
touchsh.com
touchsprite.com
@@ -96099,7 +95385,8 @@ tp82.com
tpadx.com
tpbook.com
tpccoo.com
-tpcmacao.com
+tpdz.net
+tpfangchan.com
tphdled.com
tpjhr.com
tpjwww.com
@@ -96177,7 +95464,6 @@ trackingmore.com
tracup.com
tracyclass.com
tradaquan.com
-trade-list.com
tradeblazer.net
tradeleo.com
trademanager.com
@@ -96426,7 +95712,6 @@ tsbtv.tv
tschina.com
tscorona.com
tsdaodao.com
-tsddu.com
tsdjg.com
tsdjq.com
tsdxb.com
@@ -96456,7 +95741,6 @@ tsinghua-sz.org
tsinghua-vc.com
tsinghua-wx.org
tsinghuaic.com
-tsinghuaicwx.com
tsinghuajournals.com
tsinghuan.com
tsinghuawoman.com
@@ -96512,9 +95796,7 @@ tstvxmt.com
tsubakichina.com
tsukistar.fun
tsunbull.com
-tswjn.com
tswljt.com
-tswmb.com
tswnanning.com
tswuby.com
tsxcfw.com
@@ -96579,7 +95861,6 @@ ttime.com
ttionya.com
ttj5.com
ttjianbao.com
-ttjiasu.com
ttjisu.com
ttkaiche.com
ttkdex.com
@@ -96587,7 +95868,6 @@ ttkefu.com
ttkuan.com
ttll.cc
ttlock.com
-ttlsa.com
ttmark.com
ttmass.com
ttmd5.com
@@ -96675,7 +95955,6 @@ tu8.cc
tu9215594236.cc
tu93.biz
tu960.com
-tuan1024.com
tuan800.com
tuan800.net
tuanai.com
@@ -96800,7 +96079,6 @@ tuipeanut.com
tuipear.com
tuipinpai.com
tuiplay.com
-tuiq.net
tuirice.com
tuishao.net
tuishark.com
@@ -96851,8 +96129,10 @@ tumchina.com
tumengtech.com
tumicomm.com
tumormed.com
+tumukaoyan.com
tumukeji.com
tumuzhe.com
+tumwf.com
tumyu.com
tuna.wiki
tunanhuashi.com
@@ -96987,6 +96267,7 @@ tux.red
tuxi.com
tuxiangyan.com
tuxiaobei.com
+tuxing.art
tuxing2010.com
tuxiu.com
tuxun.fun
@@ -97100,7 +96381,6 @@ tx-trans.com
tx009.com
tx1588.com
tx163.com
-tx29.com
tx321.com
tx365.com
tx5d.com
@@ -97213,6 +96493,7 @@ ty8621.com
tybai.com
tyboard.net
tyc100.com
+tyccdn888.com
tychemical.com
tychio.net
tychou.com
@@ -97322,7 +96603,6 @@ tzbao.com
tzcpa.com
tzcul.com
tzcz.com
-tzdaily.com
tzedu.org
tzfdc.com
tzfeilu.com
@@ -97389,6 +96669,7 @@ tzzp.com
tzzszb.com
tzzx.net
u-camera.com
+u-carloan.com
u-cdn.net
u-lights.com
u-link.org
@@ -97405,7 +96686,6 @@ u.sb
u.tools
u005.com
u0351.com
-u05.xyz
u0537.com
u062.com
u10010.com
@@ -97467,7 +96747,6 @@ uaxk.com
ub-os.com
ub8020.com
ubaiyi.com
-ubalh.com
ubangmang.com
ubao.com
ubc-bearing.com
@@ -97501,7 +96780,6 @@ ubuntukylin.com
ubuuk.com
ubuylogi.com
uc-union.com
-uc003.com
uc108.com
uc123.com
uc129.com
@@ -97569,7 +96847,6 @@ ucpchina.com
ucpopo.com
ucren.com
ucsanya.com
-ucsded.com
ucss.ninja
uctrac.com
uctwydx.com
@@ -97633,7 +96910,6 @@ uestcedu.com
uestcgxcd.com
uestcliuxue.com
uetianshanyp.com
-uetir2550.com
ueuz.com
uewaf.com
uez.com
@@ -97670,7 +96946,6 @@ ugapk.com
ugbb.com
ugdesk.com
ugdtimg.com
-ugediao.com
uggame.com
uggd.com
ugirls.tv
@@ -97756,7 +97031,6 @@ uitab.com
uitool.net
uiu.cc
uiuihub.com
-uiusc.com
uiwow.com
ujakn.com
ujia007.com
@@ -97790,7 +97064,6 @@ ukoo.net
ukosgolfcart.com
ukpass.org
ukpathway.com
-ukplanking.com
ukrainevisacenter.com
ukubang.com
ukui.org
@@ -97889,7 +97162,6 @@ unachina.org
unafeed.com
unaming.info
unaming.net
-unasdwarfs.com
unbank.info
unbcomm.com
uncbd.com
@@ -98074,7 +97346,6 @@ uooconline.com
uooioo.com
uoolu.com
uooss.com
-uooyoo.com
uoozi.com
uoria.com
uos56.com
@@ -98145,7 +97416,6 @@ ups001.com
ups88.net
upsapp.com
upsclan.com
-upsdydc.com
upseller.com
upskyshanghai.com
upst86.com
@@ -98180,7 +97450,6 @@ uqipower.com
uqite.com
uqitong.com
uqseo.com
-uqtool.com
uqualities.com
uqude.com
uqufin.com
@@ -98196,7 +97465,6 @@ urbetter.net
urbtix.hk
urcb.com
urcove-hotels.com
-urgaffel.com
urhimalayanak.com
uri6.com
uril6.com
@@ -98212,7 +97480,6 @@ urocancer.org
urology.wiki
urongda.com
urovo.com
-urovo.net
urovoworld.com
urq7wvyumzfdi5.com
urs-china.com
@@ -98284,7 +97551,6 @@ usoftchina.com
usoi.net
usonetrip.com
uspard.com
-usplanking.com
usportnews.com
usqiaobao.com
usryinc.com
@@ -98315,7 +97581,6 @@ utermux.dev
utfinancing.com
utgd.net
utiao.com
-uting-chuzhou.com
utofairy.com
utogame.com
utom.design
@@ -98340,7 +97605,6 @@ uu11441.com
uu11661.com
uu1314.com
uu178.com
-uu2024.com
uu22112.com
uu22332.com
uu22662.com
@@ -98401,7 +97665,6 @@ uusee.com
uusense.com
uusky.com
uusoo.net
-uusos.com
uustory.com
uustv.com
uutils.com
@@ -98422,13 +97685,13 @@ uuvps.com
uuwldh.com
uuwtq.com
uuwx.la
+uuxlink.com
uuxn.com
uuxoo.com
uuxs.info
uuxs.la
uuxs.tw
uuyoyo.com
-uuysiaq.com
uuzham.com
uuzhufu.com
uuzo.net
@@ -98511,9 +97774,7 @@ uzise.com
uzshare.com
uzzf.com
v-56.com
-v-beautysalon.com
v-danci.com
-v-lz.com
v-mate.mobi
v-pack.net
v-simtone.com
@@ -98604,7 +97865,6 @@ vanbaolu.com
vance-commerce.com
vanch.net
vancheer.com
-vanchhandheld.com
vanchip.com
vanchiptech.com
vanchu.com
@@ -98633,6 +97893,7 @@ vannauto.com
vanqun.com
vanrui.com
vansungroup.com
+vanvi-cn.com
vanvps.com
vanward.com
vanwardsmart.com
@@ -98677,6 +97938,8 @@ vbbobo.com
vbidc.com
vbio-pharma.com
vbiquge.com
+vbkhk.com
+vbkrhk.com
vbmnmy.com
vbsemi.com
vc800.com
@@ -98695,6 +97958,8 @@ vcimg.com
vcinchina.com
vckbase.com
vclass.com
+vclbroker.com
+vclbrokers.com
vcled.com
vcloud-byte.com
vcloudapi.com
@@ -98702,6 +97967,7 @@ vcloudgtm.com
vcloudstc.com
vcloudstc.net
vcloudvod.com
+vcltrade.com
vclusters.com
vcnews.com
vcomic.com
@@ -98717,7 +97983,6 @@ vcsint.com
vcsmemo.com
vcspark.com
vctianshanvs.com
-vcudu.com
vcxpe.com
vcxv73.fun
vcxv787.fun
@@ -98742,6 +98007,7 @@ vdongchina.com
vdsdsf2.fun
vdson888.com
vdyoo.com
+vdyoo.net
ve-imcloud.com
ve-trafficroute.com
ve-trafficroute.net
@@ -98765,7 +98031,6 @@ vedsalb.com
veecar.com
veefdev.com
veelink.com
-veeqi.com
veeqi.net
veer.com
veervr.tv
@@ -98837,7 +98102,6 @@ verydoc.net
verydu.net
verydz.com
veryevent.com
-veryfb.com
verygrass.com
verygslb.com
verygslb.net
@@ -98887,7 +98151,6 @@ vfuiov.sbs
vfuke.net
vfund.org
vfvdf.com
-vfvdsati.com
vfvdvd99.fun
vfx123.com
vg.com
@@ -98906,7 +98169,6 @@ vgoapp.com
vgooo.com
vgover.com
vgoyun.com
-vgt.cc
vgtime.com
vgunxpkt.com
vgvmotor.com
@@ -98924,6 +98186,7 @@ vhsinsurtech.com
vhxaw.com
vhzhaopin.com
vi-mayman.com
+vi1zen.com
vi21.net
vi586.com
via-cert.com
@@ -99045,11 +98308,9 @@ vip1280.net
vip150.com
vip800.com
vip8849.com
-vip97.net
vip9982.net
vipabc.com
vipabcyun.com
-vipads.live
vipappsina.com
vipbaihe.com
vipbcw.com
@@ -99072,7 +98333,6 @@ vipgouyouhui.com
vipgs.net
vipgslb.com
vipguanjia.net
-viphudong.com
viphxw.com
vipiao.com
vipjingdong.com
@@ -99195,6 +98455,7 @@ vitalgen.com
vitalxyz.com
vitamio.net
vitarn.com
+vitasoy-chn.com
vitechliu.com
viterbi-tech.com
vitesexpo.com
@@ -99300,6 +98561,7 @@ vmoviercdn.com
vmsky.com
vmtdf.com
vmtnet.com
+vmuhyu.site
vmvps.com
vmylan.com
vnadssb.com
@@ -99309,10 +98571,10 @@ vnanke.com
vndian.com
vnet.com
vnet.mobi
+vniddlg.xyz
vnlin.com
vnnox.com
vnpy.com
-vns1.net
vnuuh.icu
vnzmi.com
voa365.com
@@ -99342,7 +98604,6 @@ voicer.info
voicer.me
voidcc.com
voidking.com
-voidme.com
voip366.com
vojs.tv
vokop.com
@@ -99355,6 +98616,7 @@ volcadocean.com
volcadvc.com
volcalb.com
volcanicengine.com
+volcano-force.com
volcanospring.com
volcautovod.com
volcbiz.com
@@ -99391,6 +98653,7 @@ volcfake.com
volcfcdn.com
volcfcdnbyte.com
volcfcdndvs.com
+volcfcdndvs1.com
volcfcdndvs2.com
volcfcdnplus.com
volcfcdnrd.com
@@ -99639,12 +98902,12 @@ vuepush.com
vuevideo.net
vulbox.com
vulcan.dl.playstation.net
-vulcanmaximum.xyz
vultr1.com
vultrcn.com
vultrvps.com
vumstar.com
vunion.net
+vuphub.com
vurl.link
vurl3.vip
vutimes.com
@@ -99671,7 +98934,6 @@ vviptuangou.com
vvjob.com
vvlian.com
vvmeiju.com
-vvnna.com
vvo2o.com
vvpgwg.xyz
vvpncdn.com
@@ -99753,7 +99015,6 @@ w2gou.com
w2n5cu58rn.com
w2solo.com
w333.com
-w3cay.com
w3cbus.com
w3ccoo.com
w3cfuns.com
@@ -99863,7 +99124,6 @@ waizaowang.com
wajiquan.com
wajueji.com
wajufo.com
-wakatool.com
wakeai.tech
wakedata.com
wakeofgods.com
@@ -99908,6 +99168,7 @@ waluer.com
walvax.com
wamawama.com
wamila.com
+wamkio.com
wan-ka.com
wan.cc
wan.com
@@ -99928,7 +99189,6 @@ wanadalu.com
wanandroid.com
wananshan.com
wanbaapp.com
-wanbaoju.com
wanbexpress.com
wanbgame.com
wanbiao800.com
@@ -100004,7 +99264,6 @@ wangan.com
wangbaobei.com
wangbaoqiang-cloudcdn.com
wangbixi.com
-wangcai.cm
wangcaio2o.com
wangcaiwang.com
wangcanmou.com
@@ -100021,7 +99280,6 @@ wangdaibdt.com
wangdaicaifu.com
wangdaidongfang.com
wangdaiguancha.com
-wangdaijiamen.com
wangdaishikong.com
wangdaisj.com
wangdaitiandi.com
@@ -100096,7 +99354,6 @@ wangshidi.com
wangshitou.com
wangshu.la
wangshugu.com
-wangsongxing.com
wangsu.com
wangsu.net
wangsucloud.com
@@ -100193,7 +99450,6 @@ wanjiquan.com
wanjixin.com
wanjunshijie.com
wanjutoy.com
-wanjuzhan.com
wanka5.com
wankacn.com
wankacn.net
@@ -100430,7 +99686,6 @@ wateryx.com
watyuan.com
wauee.com
wauee.net
-wave-game.com
wave-optics.com
wavecn.com
wavedsp.tech
@@ -100652,7 +99907,6 @@ web3caff.com
web3gate.cc
web3gate.io
web3ling.com
-web88888.com
web89.net
web930.com
webacg.com
@@ -100813,7 +100067,6 @@ weibang.vip
weibangong.com
weibanzhushou.com
weibilamp.com
-weibo.co
weibo.com
weibo.tv
weibocdn.com
@@ -100831,7 +100084,6 @@ weiboyi.com
weibozn.com
weibu.com
weibusi.net
-weica.net
weicaifu.com
weicewang.com
weichai.com
@@ -100937,7 +100189,6 @@ weikenhair.com
weikeqi-biotech.com
weikerifu.com
weikuw.com
-weilaa.xyz
weilai555.com
weilaicaijing.com
weilaili.com
@@ -101003,7 +100254,6 @@ weinisongdu.com
weinm.com
weiot.net
weipaitang.com
-weipano.com
weipe.vip
weiphone.net
weiphp.com
@@ -101026,7 +100276,6 @@ weiqing120.com
weiqingbao.cc
weiqiok.com
weiqitv.com
-weiqunbuluo.com
weiquyx.com
weiren.com
weirenjob.com
@@ -101159,6 +100408,7 @@ weiyituliao.com
weiyiwangluo.com
weiyoubot.com
weiyours.com
+weiyouxi.com
weiyu98.com
weiyueliang.com
weiyueread.com
@@ -101340,7 +100590,6 @@ wenlc.com
wenli-china.com
wenlian123.com
wenliangedu.com
-wenlvlijiang.com
wenlvnews.com
wenlvpai.com
wenmeng.com
@@ -101535,7 +100784,6 @@ wf66.com
wfaokun.com
wfaozhuo.com
wfbbs.com
-wfbrood.com
wfc805.com
wfcgs.com
wfdaily.com
@@ -101579,6 +100827,7 @@ wfsyzx.net
wftdrh.com
wftvqcm.com
wfuyu.com
+wfwzg.xyz
wfy.pub
wfzbjx.com
wfzczdh.com
@@ -101630,7 +100879,6 @@ wh111.com
wh119.com
wh12345szzx.com
wh20zx.com
-wh2work.com
wh50.com
wh5yy.com
wh6yy.com
@@ -101653,9 +100901,9 @@ whaletvlive.com
whaleunique.com
whalipaycs.com
whampoa-design.com
-whamspa.com
whatbuytoday.com
whatchina.com
+whatfugui.com
whatsns.com
whattheybuy.com
whaudio.com
@@ -101983,7 +101231,6 @@ whszniao.com
whtaxi.com
whtbglass.com
whtbgroup.com
-whtbk.com
whtbq.com
whtby.com
whtcm.com
@@ -102115,7 +101362,6 @@ whzwzk.com
whzwzs.com
whzxht.com
whzxjcgc.com
-whzxsz.com
whzxzls.com
whzydz.com
whzys.com
@@ -102191,7 +101437,6 @@ willwin91.com
wiloon.com
wimetro.com
wimiar.com
-win-an.com
win-haoxiang-win.com
win-ke.com
win-man.com
@@ -102309,7 +101554,6 @@ winnermicro.com
winnerracing.com
winnerway.com
winnet.cc
-winning11cn.com
winningdq.com
winos.me
winotes.net
@@ -102408,7 +101652,6 @@ wisevector.com
wisewatercloud.com
wish-hightech.com
wish3d.com
-wishbuild.com
wishcad.com
wishcc.com
wishdown.com
@@ -102582,7 +101825,6 @@ wlhyjx.com
wlhyxh.com
wlinfor.com
wljhealth.com
-wljy8.com
wljyyjy.com
wlkgo.com
wlkst.com
@@ -102610,7 +101852,6 @@ wlrjy.com
wls96121.com
wlsgjslgy.com
wlski.com
-wlsrenzaocaoping.com
wlstock.com
wlsx.net
wltieyaoban.com
@@ -102733,6 +101974,7 @@ wnnyjx.com
wnote.com
wnp.com
wnplayer.net
+wnqapp.com
wnqianbao.com
wnrb.net
wnrcw.com
@@ -102828,6 +102070,7 @@ wofjhs.com
wofuwater.com
wogame.net
wogaosuni.com
+wogg.lol
wogg.net
wogoo.com
wohenizaiyiqi.com
@@ -102955,7 +102198,6 @@ wooqx.com
woordee.com
woosiyuan.com
woosmart.com
-wootwood.com
woowtcprc.com
wooxhome.com
wooyun.org
@@ -103071,7 +102313,6 @@ wowoyou.com
wowoyou.net
wowozhe.com
wowqu.cc
-wowsai.com
wowtb.com
wowtran.com
wowzx.net
@@ -103161,7 +102402,6 @@ wqiis.com
wqingjian.com
wqketang.com
wqlin.com
-wqlkz.com
wqlml.com
wqoiyz.com
wqop2018.com
@@ -103193,7 +102433,6 @@ wrmjk.com
wrsa.net
wrshg.com
wrsikq.xyz
-wrsxy.com
wrtauto.com
wrtnode.cc
wrtnode.com
@@ -103290,7 +102529,6 @@ wsoso.com
wsoss.com
wsound.cc
wsoversea.info
-wsoversea.net
wsqejt.com
wsrsj.com
wsrxw.com
@@ -103365,7 +102603,6 @@ wtoip.com
wtojob.com
wtoutiao.com
wtown.com
-wtr.cc
wtraff.com
wtroytj33.fun
wts999.com
@@ -103386,7 +102623,6 @@ wu.run
wu123.com
wu35.com
wu37.com
-wu65.com
wu7zhi.com
wuage.com
wuahihotel.com
@@ -103672,7 +102908,6 @@ wuxishuangfan.com
wuxishuangyou.com
wuxisj.com
wuxitianlang.com
-wuxitzjx.com
wuxiwang.net
wuxiwanli.com
wuxiwenlv.com
@@ -103790,7 +103025,6 @@ www.dell.com
www.djivideos.com
www.gov.mo
www.htc.com
-www.laecloud.com
www.microsoft.com
www.nike.com
www.redhat.com
@@ -103968,7 +103202,6 @@ wxphp.com
wxpmc.com
wxq.today
wxqcgc.com
-wxqinxue.com
wxqxbxg.com
wxrb.com
wxrc.com
@@ -104003,7 +103236,6 @@ wxt2020.com
wxtaihujx.com
wxtcm.com
wxtcxny.com
-wxtczs.com
wxtdf.com
wxthe.com
wxtj.com
@@ -104055,7 +103287,6 @@ wy2fy.com
wy34.com
wy6000.com
wya1.com
-wyaoqing.com
wybgs.com
wybosch.com
wybzdwss.com
@@ -104082,7 +103313,6 @@ wykefu.com
wykjht.com
wykw.com
wyl.cc
-wylws.com
wylylxx.com
wyn88.com
wynca.com
@@ -104101,7 +103331,6 @@ wyshuoshuo.com
wysls.com
wysm88.com
wyteam.net
-wytfsp.com
wytx.net
wytype.com
wytzgl.com
@@ -104228,6 +103457,7 @@ wzright.com
wzrjsp.com
wzrm-hospital.com
wzrssip.com
+wzrygcht.com
wzsc123.com
wzsee.com
wzshe.com
@@ -104318,7 +103548,6 @@ x3322.net
x3366.com
x33699.com
x33yq.org
-x366f.com
x3china.com
x3cn.com
x431.com
@@ -104547,7 +103776,6 @@ xbjob.com
xbjtkj.com
xbkjvip.com
xblaw.com
-xblds.com
xblou.com
xblqb.com
xblsign.com
@@ -104563,7 +103791,6 @@ xbptc.com
xbrl-cn.org
xbrother.com
xbtest.com
-xbttgroup.com
xbtw.com
xbuwrp.sbs
xbuyees.com
@@ -104638,7 +103865,6 @@ xcmg.com
xcmgmall.com
xcmobi.com
xcmsports.com
-xcn457.com
xcnchinese.com
xcncp.com
xcnic.net
@@ -104782,7 +104008,6 @@ xdxmwang.com
xdyanbao.com
xdyjt.com
xdystar.com
-xdyszx.com
xdytuliao.com
xdyy.net
xdyy100.com
@@ -104844,7 +104069,6 @@ xfaqwlw.com
xfb315.com
xfbst.com
xfc888.com
-xfcd365.net
xfcjn.com
xfcn.com
xfconnect.com
@@ -104892,6 +104116,7 @@ xfw0594.com
xfwdc.com
xfwed.com
xfwindow.com
+xfx02.com
xfx168.com
xfxb.net
xfxglass.com
@@ -105018,7 +104243,6 @@ xhjt.com
xhkt.tv
xhlaowu.com
xhlcsl.com
-xhm.pub
xhma.com
xhmedia.com
xhmwxy.com
@@ -105062,7 +104286,6 @@ xhxcedu.com
xhxgt.com
xhxhr.com
xhxsw.com
-xhxwsyw.com
xhy.com
xhyd.com
xhygroup.com
@@ -105078,7 +104301,6 @@ xi.su
xi5jie.com
xia1ge.com
xiaa.net
-xiabb.chat
xiabingbao.com
xiabor.com
xiabu.com
@@ -105096,7 +104318,6 @@ xiafenfa.com
xiagaoqing.com
xiagepian.com
xiageyy.com
-xiagongdi.com
xiaguanzhan.com
xiagujian.com
xiaheng.net
@@ -105141,7 +104362,6 @@ xiandaihospital.com
xiandaimuye.com
xiandaiyuwen.com
xiandanjia.com
-xiandaohu.net
xiandengdengguan.com
xiandp.com
xianer.net
@@ -105269,6 +104489,7 @@ xianjiaosuo.com
xianjichina.com
xianjiqun.com
xianjzyxh.org
+xiankabao.com
xiankan.com
xiankantv.com
xianlai.work
@@ -105391,6 +104612,7 @@ xiaochengxucms.com
xiaochi198.com
xiaochixiang.com
xiaochuan010.com
+xiaochuanyun.com
xiaocifang.com
xiaocms.com
xiaocx.org
@@ -105575,6 +104797,7 @@ xiaomagouche.com
xiaomai.live
xiaomai5.com
xiaomaigongkao.com
+xiaomaigui.com
xiaomaiketang.com
xiaomaiuzu.com
xiaomajia.com
@@ -105583,7 +104806,6 @@ xiaomaomv.com
xiaomape.com
xiaomark.com
xiaomashijia.com
-xiaomastack.com
xiaomaxitong.co
xiaomaxitong.com
xiaomayi.co
@@ -105600,7 +104822,6 @@ xiaomi.net
xiaomi.org
xiaomi.tw
xiaomiaozai.com
-xiaomibbs.com
xiaomicache.com
xiaomicorp.com
xiaomicorp.net
@@ -105692,7 +104913,6 @@ xiaoshuo.com
xiaoshuo1-sm.com
xiaoshuo2-sm.com
xiaoshuo520.com
-xiaoshuob.com
xiaoshuoba.com
xiaoshuobi.cc
xiaoshuochu.com
@@ -105771,7 +104991,6 @@ xiaoyanwenxue.com
xiaoyaodsx.com
xiaoyaoxi.com
xiaoyaoyou.com
-xiaoyaoyou365.com
xiaoyastar.com
xiaoyatong.com
xiaoyegejitar.com
@@ -105824,7 +105043,6 @@ xiaozhibaoxian.com
xiaozhibo.com
xiaozhimed.com
xiaozhiyun.com
-xiaozhizhijia.com
xiaozhongjishu.com
xiaozhoumo.com
xiaozhu.com
@@ -105862,7 +105080,6 @@ xiawuyouke.com
xiaxs.info
xiaxs.la
xiayige.org
-xiayijian.com
xiayixing.com
xiayx.com
xiazai.live
@@ -105873,6 +105090,7 @@ xiazai22.com
xiazaiba.com
xiazaicc.com
xiazaijidi.com
+xiazais.com
xiazaitool.com
xiazaiwx.com
xiazaiziti.com
@@ -105929,7 +105147,6 @@ xiefenxiang.com
xiegangsir.com
xiege.net
xiegekt.com
-xiehao.me
xiehehp.com
xiehejx.com
xiehekjkf.com
@@ -105982,7 +105199,6 @@ xigua.com
xigua110.com
xiguaapp.com
xiguabook.com
-xiguaimg.com
xiguaji.com
xiguang.xyz
xiguaplayer.com
@@ -106091,7 +105307,6 @@ xincainet.com
xincaise.com
xincaitong.net
xincanshu.com
-xincarshow.com
xinceremed.com
xincg.com
xincha.com
@@ -106195,7 +105410,6 @@ xingfufangdai.com
xingfulaonian.com
xingfulizhaofang.com
xingfuu.com
-xinggan.com
xinggan.net
xingganggas.com
xingguanggongkao.com
@@ -106291,7 +105505,6 @@ xingumin.net
xinguodu.com
xingvps.com
xingwajiang.com
-xingwangqy.com
xingxing.com
xingxingbao.com
xingxingjizhang.com
@@ -106417,10 +105630,10 @@ xinju.fun
xinjuc.com
xinjunshi.net
xinjunshicn.net
-xinkaiyuanceps.com
xinke-semi.com
xinkenwen.com
xinkuai.com
+xinlangtupian.com
xinlanshengbc.com
xinle.com
xinle366.com
@@ -106556,10 +105769,8 @@ xintianw.com
xintianxia.cc
xintianya.net
xintiao100.com
-xintiao80.com
xintiaogroup.com
xintiaoyouxi.com
-xintiku.com
xintongconference.com
xintongwang.com
xintrum.com
@@ -106704,7 +105915,6 @@ xionguamaqui.com
xiongyin.com
xiongying.com
xiongyudl.com
-xiongzhangad.com
xiowo.net
xioxix.com
xipunet.com
@@ -106831,7 +106041,6 @@ xiuxiu.com
xiuxiuda.com
xiuxiustatic.com
xiuxmanhua.com
-xiuyiit.com
xiuzhan365.com
xiuzhanwang.com
xiuzhiwu.com
@@ -106860,12 +106069,12 @@ xixibobo.com
xixiclothing.com
xixidoudizhu.com
xixig8.com
+xixih.cc
xixih.net
xixik.com
xixik.net
xixinews.com
xixinghanghr.com
-xixinv.com
xixiqipai.com
xixisys.com
xixiwg.com
@@ -106954,7 +106163,6 @@ xjfilm.net
xjfk.com
xjflcp.com
xjfm.com
-xjfoshan.com
xjfzb.com
xjgameapi.com
xjgameinfo.com
@@ -107054,7 +106262,6 @@ xjzdjx.com
xjzhsh.com
xjzlyy.com
xjzp.net
-xjzslr.com
xk57.com
xk857.com
xk89.com
@@ -107067,7 +106274,6 @@ xkbjm.com
xkcd.in
xkcun.com
xkd.hk
-xkdongman.com
xkdywl.com
xkeirofiowef.com
xker.com
@@ -107088,7 +106294,6 @@ xktech.com
xktsz.com
xkunn.com
xkunyi.com
-xkvvv.com
xkw.com
xkwe.com
xkxs.org
@@ -107151,6 +106356,7 @@ xlm258.com
xlmarathon.com
xlmis.com
xlmr.com
+xlmz.net
xlndt.com
xlobo.com
xlongm.com
@@ -107165,9 +106371,9 @@ xlsdn.com
xlsemi.com
xlshou.com
xlsxmj.com
+xltll.com
xltnjslfd.com
xltrip.com
-xltxly.com
xluuss.com
xlvshi.com
xlwl95.com
@@ -107219,7 +106425,6 @@ xmbhw.com
xmbie.com
xmbike.com
xmbus.com
-xmbyhksjhzx.com
xmccb.com
xmcdn.com
xmchong.com
@@ -107252,7 +106457,6 @@ xmgsd.com
xmgslx.com
xmguoyi.com
xmgwbn.com
-xmgxpt.com
xmhaicangmarathon.com
xmheigu.com
xmheitu.com
@@ -107272,7 +106476,6 @@ xmitic.com
xmj1688.com
xmjchyxh.com
xmjgjy.com
-xmjhome.com
xmjiaruan.com
xmjim.com
xmjj3d.com
@@ -107282,7 +106485,6 @@ xmjslh.com
xmjyw.com
xmjzykj.com
xmkanshu.com
-xmkingsolar.com
xml-journal.net
xmldz4.com
xmlheads.com
@@ -107291,6 +106493,7 @@ xmlulub.com
xmlvbarcode.com
xmmade.com
xmmama.com
+xmmeiyou.com
xmmnrj.com
xmmtoys.com
xmmtu.com
@@ -107366,7 +106569,6 @@ xmzmy.com
xmzs.org
xmzwdgm.com
xmzyark.com
-xmzylh.com
xmzzy.net
xn--0lqv73m.com
xn--0lqwsu2w.com
@@ -107397,6 +106599,7 @@ xn--4lwr21d.com
xn--4oqr35flvp.com
xn--4qwqc04pn0lg9h.com
xn--4xup5j.com
+xn--54q23ckxiyx0e.com
xn--54q249denfzw9a.net
xn--54q40czz0g7xp.com
xn--55qw7biqf7g3d004h8yuw1ctrt04sep1cjfb.com
@@ -107475,9 +106678,7 @@ xn--ebr05n.com
xn--eh1a34ykpl.com
xn--ehq647i.xn--j6w193g
xn--eltt9g.com
-xn--estx4tcsdff9qu37dl78b.com
xn--fcs316auqlyoe.com
-xn--fct05uxe304h.com
xn--fhq79jyym9nh74hfm8a.com
xn--fiq03fftg7m2c.com
xn--fiq06jqoz14s.com
@@ -107552,7 +106753,6 @@ xn--pbt1sj69ag8b.com
xn--pss89e6xl72g.com
xn--ptua509t.com
xn--q20av2y36ac54a.com
-xn--qkroa335nnol.com
xn--qruq25bjsj.net
xn--qzwx3ij21azka.com
xn--r8s65df7admf92a.com
@@ -107590,7 +106790,6 @@ xn--vcsu9p66gy1l9vpnnbk52f.com
xn--vhq3m33sbqhpsmtnuxfq.com
xn--vhq3mr8b802a.net
xn--vhq4ut2dsxd5xqnicjxxo55a756aovhik0aunm.com
-xn--vhq726a7bz6b628r.net
xn--vhqa63bt1h.com
xn--vhqqbz2p62hm92e04p.com
xn--vhqu1kbz3bnbi.com
@@ -107612,7 +106811,6 @@ xn--xhq521b
xn--xhq60k09cr85at2f494d.com
xn--xhq60kzbz07dem6azlu.com
xn--xhq8sm16c5ls.com
-xn--xhq9mt12cf5v.ink
xn--xhqq2hhv0dkpk.com
xn--xhqq4f5vc69qlmk6mva633mwoeiuad9562e.com
xn--xhqs8jmxkive1yest6g.com
@@ -107651,7 +106849,6 @@ xnhdgame.com
xninja.org
xnjcw.com
xnjdcbs.com
-xnjty.com
xnjxnz.com
xnnpc.com
xnongren.com
@@ -107687,6 +106884,7 @@ xnzyyy.com
xoao.com
xoliao.com
xooooa.com
+xopenbeta.com
xorlink.com
xorpay.com
xoss.co
@@ -107726,7 +106924,6 @@ xpjis.com
xpkjpk.com
xpkongqipao.com
xplaymobile.com
-xpn.cc
xpoy0z.com
xpsheying.com
xpsup.com
@@ -107803,7 +107000,6 @@ xrqh.com
xrso.com
xrunda.com
xrvm.com
-xrwcn.com
xrwf66.com
xrxr.xyz
xrxukegi.com
@@ -107820,7 +107016,6 @@ xs6po.icu
xs7.cc
xs7.com
xs7.la
-xs91.net
xs920.com
xs9999.com
xsa239.com
@@ -107842,7 +107037,6 @@ xsesc.com
xsfaya.com
xsfc.com
xsfsp.com
-xsg100.com
xsgame.net
xsgame99.com
xsgongju.com
@@ -107854,7 +107048,6 @@ xshellcn.com
xshengyan.com
xshenshu.com
xshgsh.com
-xshgt.com
xshhotels.com
xshkvip.com
xshmzz.com
@@ -107878,7 +107071,6 @@ xsjgzbdf.com
xsjit.com
xsjk.net
xsjny.com
-xsjob.com
xsjom.com
xsjplm.com
xsjrc.com
@@ -107896,7 +107088,6 @@ xsmaofa.com
xsmart.com
xsmart.link
xsmoe.com
-xsmore.com
xsmya.com
xsn168.com
xsnsyh.com
@@ -107990,12 +107181,12 @@ xtjsxy.net
xtjtjs.com
xtlitian.com
xtlog.com
-xtmc.net
xtmit.com
xtmtrj.com
xtomp.com
xtong-solar.com
xtongs.com
+xtoobmo.xyz
xtowork.com
xtransfer.com
xtrapowercn.com
@@ -108013,7 +107204,6 @@ xtuan.com
xtuos.com
xtutoring.com
xtw-system.com
-xtw1.com
xtwzyx.com
xtx6.com
xtxcm.com
@@ -108080,7 +107270,6 @@ xuanyang888.com
xuanyge.info
xuanyouwang.com
xuanyuanhuangdi.org
-xuanyuanma.com
xuanyuans.com
xuanyuanzjy.com
xuanyucttw.com
@@ -108111,7 +107300,6 @@ xueanquan.com
xueba100.com
xuebaclass.com
xuebaike.net
-xuebalib.com
xuebangsoft.com
xuebapan.com
xuebawang.net
@@ -108216,7 +107404,6 @@ xuetimes.com
xueto.com
xuetongw.com
xuetu.net
-xuetuwuyou.com
xueui.com
xuewangshang.com
xuewangzhan.com
@@ -108344,7 +107531,6 @@ xundekai.com
xundiesoft.com
xundns.com
xundns.net
-xundonglian.com
xundupdf.com
xunerjie.com
xunfan.net
@@ -108355,7 +107541,6 @@ xunfeivr.com
xunfeiwl.com
xunfeixxj.com
xungejiang.com
-xungeng360.com
xungou.com
xungou5.com
xunguagua.com
@@ -108367,7 +107552,6 @@ xunhuweb.com
xunicard.com
xunihao.net
xuniquan.com
-xunjie.fun
xunjiecad.com
xunjiefanyi.com
xunjiepdf.com
@@ -108436,7 +107620,6 @@ xuooo.com
xupai.com
xupea.com
xupernode.com
-xupo.net
xuprinter.com
xupu.name
xupu120.com
@@ -108461,7 +107644,6 @@ xuxiang.com
xuxueli.com
xuxusheng.com
xuyalipin.com
-xuyangjs.com
xuyangny.com
xuyechem.com
xuyi.net
@@ -108472,7 +107654,6 @@ xuyueswkj.com
xuyunjt.com
xuzai.com
xuzhi.net
-xuzhoudeyu.com
xuzhoufabu.com
xuzhoujob.com
xuzhoumuseum.com
@@ -108484,6 +107665,7 @@ xvacuum.com
xvcdmo.com
xvideo.cc
xvista.com
+xvjhzuc.com
xvwprdk.com
xw-chip.com
xw-planning.com
@@ -108549,7 +107731,6 @@ xx4a.com
xx5515.com
xx7z.co
xx8g.com
-xxad.cc
xxadc.com
xxahsk.com
xxaks01080sspao.xyz
@@ -108581,7 +107762,6 @@ xxhd-tech.com
xxhnanke.com
xxhpkwd.com
xxhrd.com
-xxhyzs.com
xxinficity.com
xxingclub.com
xxjdns.com
@@ -108674,7 +107854,6 @@ xxzrs.xyz
xxzsgame.com
xy-365.com
xy-asia.com
-xy-biochem.com
xy-ddh.com
xy-dgyx.com
xy-display.com
@@ -108713,13 +107892,13 @@ xycdn.net
xycgd.com
xychyy.com
xyclient.net
+xyclient.xyz
xycloud.com
xyclouds.com
xycsq.com
xyctgroup.com
xycwei.com
xycyky.com
-xyd5fy.com
xyda.cc
xydcname.com
xydcname.net
@@ -108773,7 +107952,6 @@ xykgjt.net
xykmovie.com
xyktjt.com
xyl2002.com
-xylbsnjx.com
xylh888.com
xylhwdu.com
xylink.com
@@ -108800,7 +107978,6 @@ xyqxr.com
xyqy88.com
xyrbszb.com
xyre.com
-xyrkl.com
xyrsks.com
xyrtv.com
xysb.com
@@ -108840,7 +108017,6 @@ xywclass.com
xywlhlh.com
xywm.com
xywm.ltd
-xywx.cc
xywy.com
xywyfw.com
xywzs.com
@@ -108996,7 +108172,6 @@ xzrcyy.com
xzrdwq.com
xzriit.com
xzrsks.com
-xzrzscq.com
xzsdszx.com
xzsdyyy.com
xzsec.com
@@ -109056,6 +108231,7 @@ y55l6.com
y56.com
y5663.com
y5api.com
+y5coin.com
y5kfpt.com
y5news.com
y5store.com
@@ -109066,7 +108242,6 @@ y7ts.icu
y80s.com
y8cyx6fvyxk3hs.com
y8l.com
-y95.net
ya-bo888.com
ya-marathon.com
ya17.com
@@ -109149,6 +108324,7 @@ yamaijia.net
yameisj.com
yamibo.com
yan-grh.com
+yan-jian.com
yan678.com
yanagou.net
yananhongyun.com
@@ -109222,6 +108398,7 @@ yanglaozhan.org
yanglee.com
yangli.com
yangliping.com
+yangliq.com
yanglong.pro
yangluojob.com
yangmao.info
@@ -109312,7 +108489,6 @@ yanjiyou.net
yanjob.com
yanjun7858.com
yanjunbo.com
-yankanshu.cc
yankay.com
yanke360.com
yankon.com
@@ -109518,7 +108694,6 @@ yaxige.com
yaxin888.com
yaxinde.com
yaxinghbkj.com
-yaxinzhineng.com
yaxuntuhang.com
yaya.love
yayaad.com
@@ -109567,7 +108742,6 @@ ybcxz.com
ybdbz.com
ybdlogistic.com
ybe.net
-ybeih.com
ybfljs.com
ybgkz.com
ybgz.com
@@ -109577,7 +108751,6 @@ ybin.cc
ybirds.com
ybj.com
ybjjsgc.com
-ybjk.com
ybjsk.com
ybk001.com
ybk168.com
@@ -109614,7 +108787,6 @@ yby1953.com
ybyiot.com
ybynet.com
ybypark.com
-ybyz.net
ybzhao.com
ybznzz.com
ybzzgh.org
@@ -109766,7 +108938,6 @@ ycwb.com
ycwljt.com
ycxba.com
ycxdryy.com
-ycxfgroup.com
ycxicmall.com
ycxinxi.com
ycxjtd.com
@@ -109776,7 +108947,6 @@ ycxy.com
ycxydrkj.com
ycxzlsyxgs.com
ycyaw.com
-ycychr.com
ycyck.com
ycycut.com
ycyhzx.com
@@ -109802,7 +108972,6 @@ yd-power.com
yd-tec.com
yd126.com
yd166.com
-yda16.me
ydalison.com
ydamc.com
ydbimg.com
@@ -109826,7 +108995,6 @@ ydhyfs.com
ydihi.com
ydimmi.com
ydjdcjc.com
-ydjia.com
ydjt1166.com
ydjwy.net
ydjy.net
@@ -110092,7 +109260,6 @@ yfcdn.net
yfchuhai.com
yfcity.net
yfcloud.com
-yfcloud.work
yfd.xyz
yfdc.net
yfdlsb.com
@@ -110123,7 +109290,6 @@ yfdurl8.com
yfdurl9.com
yfdxs.com
yfdyf.com
-yfdzy.com
yffood.com
yffy120.com
yffzkl.com
@@ -110174,7 +109340,6 @@ yg84.com
yg8898.com
ygbid.com
ygc711iq.com
-ygcf.info
ygcgfw.com
ygcloud.com
ygcooler.com
@@ -110211,6 +109376,7 @@ ygtf.net
ygtiyu.com
ygtl.com
ygtq.net
+ygvyp.com
ygwenxue.com
ygwh.cc
ygwood.com
@@ -110293,7 +109459,6 @@ yhsp.net
yhsport.com
yhssyl.com
yhstjt.com
-yht2017.com
yhtclb.com
yhthing.com
yhtj2014.com
@@ -110444,6 +109609,7 @@ yidianyuan-wawa.com
yidianzixun.com
yidianzx.com
yiding-gr.com
+yidingbao.shop
yidingding3.com
yidmall.com
yidns.net
@@ -110458,7 +109624,6 @@ yidu-marathon.com
yidu.cc
yidubbs.com
yiduchuan.com
-yidugo.com
yidui.me
yiduir.com
yidulive.com
@@ -110631,7 +109796,6 @@ yikuyi.com
yilandezhong.com
yilantop.com
yilanvaas.com
-yile.site
yile8.com
yilewan.com
yileweb.com
@@ -110765,6 +109929,7 @@ yingfs.com
yinggou.com
yingguangroup.com
yingguantx.com
+yinghai.work
yinghaicar.com
yinghanhuyi.com
yinghecloud.com
@@ -110846,7 +110011,6 @@ yingyecraft.com
yingyeping.com
yingyijin.com
yingyinglicai.com
-yingyongbei.com
yingyonghao8.com
yingyonghui.com
yingyongmiao.com
@@ -110859,6 +110023,7 @@ yingyuecl.com
yingyuehe.com
yingyushijie.com
yingyuweb.com
+yingyuxiaoshuo.com
yingzaocms.com
yingzhongshare.com
yingzi01.com
@@ -110881,6 +110046,7 @@ yinhecn.com
yinheyuedu.com
yinhu.com
yinhuadm.one
+yinhuafu.com
yinhuakm.com
yinhuatangyiyao.com
yinhuchem.com
@@ -110964,7 +110130,6 @@ yipingmi.vip
yipingsj.com
yipinhr.com
yipinpai.com
-yipinread.com
yipinsmart.com
yipintemian.com
yipinyiwu.com
@@ -111053,7 +110218,6 @@ yisanban.com
yisanwu.com
yisbei.com
yisell.com
-yisenkeji.com
yishalai.com
yishan168.com
yishang.cc
@@ -111075,7 +110239,6 @@ yishujia.net
yishujie.com
yishuliuxue.com
yishun.fun
-yishunft.com
yishutang.com
yishuyuanxiao.com
yishuzhifa.com
@@ -111084,6 +110247,7 @@ yishuzi.org
yishuziti.com
yisier.com
yisimeimaoyi.xyz
+yiso.fun
yisocms.com
yisou.com
yisouti.com
@@ -111173,7 +110337,6 @@ yixiaobang.net
yixiaoyuan.com
yixiaozu.com
yixiatong.com
-yixie8.com
yixiekeji.com
yixin-valve.com
yixin.com
@@ -111364,7 +110527,6 @@ yjsswjt.com
yjtiyu.com
yjtvw.com
yjtw.com
-yjussl.xyz
yjwlnet.com
yjwlo.com
yjwmidc.com
@@ -111396,6 +110558,7 @@ ykclass.com
ykdgd.com
ykdmsy.com
ykedu.net
+ykelai.com
ykfc.net
ykhongye.com
ykimg.com
@@ -111500,12 +110663,12 @@ yljdjx.com
yljr.com
yljsy.com
yljtjt.com
-yljyt.net
ylkaite.com
ylkbf.com
ylkjgame.com
ylklyl.com
yllhzb.com
+yllm666.xyz
yllt.icu
ylmaterial.com
ylmf.cc
@@ -111591,6 +110754,7 @@ ylzuche.com
ylzxmryy.com
ylzyhb.com
ylzyjx.com
+ylzz666.com
ym-trans.com
ym.link
ym.run
@@ -111606,7 +110770,6 @@ ymapp.com
ymark.cc
ymars.com
ymatou.com
-ymatou.hk
ymbaidu.com
ymbank.com
ymbq301.com
@@ -111614,7 +110777,6 @@ ymcart.com
ymcart.net
ymcsepu.com
ymdoctor.com
-ymdxl.com
ymeasy.com
ymechina.com
ymeei.com
@@ -111677,7 +110839,6 @@ ymzsl.com
ymzy.games
yn-tcm-hospital.com
yn-tobacco.com
-yn0870.com
yn12396.com
yn2007.com
yn58.com
@@ -111720,7 +110881,6 @@ ynhuasong.com
ynhzm.com
yni84.com
ynian.com
-ynikon.com
ynjgy.com
ynjiaoyu.net
ynjk120.com
@@ -111771,7 +110931,6 @@ ynsnw.com
ynsrx.com
ynsst.com
ynstl.com
-ynsxjr.com
ynsydwzp.com
ynsyhkgs.com
ynsyy.com
@@ -111903,6 +111062,7 @@ yomocode.com
yomuzu.com
yonderep.com
yondocredit.com
+yoneihan.com
yonex-china.com
yong-gang.com
yong-ming.com
@@ -111926,7 +111086,6 @@ yonghongtech.com
yonghuivip.com
yongjiang.com
yongjiezb.com
-yongjilvfeng.com
yongjindl.com
yongjukeji.com
yongjx.com
@@ -112138,7 +111297,6 @@ youhutong.com
youideal.net
youinsh.com
youj.com
-youjiagou.com
youjiajk.com
youjiands.net
youjiangdati.com
@@ -112185,7 +111343,6 @@ youlianfuwu.com
youliangda.com
youlianghz.com
youliao.com
-youliao.group
youliao.love
youliaobaike.com
youliaoyi.com
@@ -112306,7 +111463,6 @@ yousi.com
youstong.com
youtaidoors.com
youtaidu.com
-youtak.com
youtao55.com
youtaojd.com
youthi.com
@@ -112332,7 +111488,6 @@ youwei-china.com
youwei.com
youweigroup.com
youweihui.com
-youwinedu.com
youwo.com
youwoxing.net
youwu.today
@@ -112487,7 +111642,6 @@ youzikuaibao.com
youzipay.com
youzu.com
youzuanmy.vip
-youzunkj.com
yovisun.com
yovocloud.com
yovole.com
@@ -112557,6 +111711,7 @@ ypshengxian.com
ypshop.net
ypstech.com
ypwater.com
+ypxiixs.xyz
ypyyjt.com
ypzdw.com
ypzhushou.com
@@ -112599,7 +111754,6 @@ yqmh.com
yqmls.com
yqms.net
yqn.com
-yqok.com
yqphh.com
yqrc.com
yqrcw.com
@@ -112676,7 +111830,6 @@ ys8.com
ys991.com
ysaedesign.com
ysali.com
-ysb76.com
ysbopet.com
ysbz168.com
yscase.com
@@ -112687,7 +111840,6 @@ yscq.com
yscro.com
ysczw.com
ysdq8.com
-ysdui.com
ysedu.com
ysej.com
ysemi.com
@@ -112740,7 +111892,6 @@ ysnns.com
ysod.com
ysok.net
ysol.com
-ysoow.com
ysosuo.com
ysplay.com
ysrencai.com
@@ -112962,7 +112113,6 @@ yuanjingang.com
yuanjingss.com
yuanjisong.com
yuanjoy.com
-yuanjuchanlian.org
yuanlai.com
yuanlei.net
yuanley.com
@@ -112975,7 +112125,6 @@ yuanmadian.com
yuanmait.com
yuanmajiaoyiw.com
yuanmatao.com
-yuanmawu.net
yuanmengyouxuan.com
yuano.cc
yuanpanguoji.com
@@ -113182,7 +112331,6 @@ yuewanggd.com
yuewei007.com
yueweimusic.com
yuewen.com
-yuewz.com
yuexiamen.com
yuexiangpin.com
yuexiangspace.com
@@ -113278,6 +112426,7 @@ yujia.com
yujiahui.com
yujianai520.com
yujianpay.com
+yujianxiaomian.com
yujiawuliu.com
yujiefs.com
yujifruit.com
@@ -113307,7 +112456,6 @@ yulejiaodian.com
yulekan.com
yulekoudai.com
yuleqiu.com
-yuleres.com
yulhe.com
yuli.be
yuliancn.com
@@ -113456,7 +112604,6 @@ yunduocrm.com
yunduoke.net
yunduoketang.com
yunduolp.com
-yunduor.com
yundzh.com
yuneach.com
yunerba.com
@@ -113692,7 +112839,6 @@ yunwenkeji.com
yunwenxue.com
yunwins.com
yunwuxian.net
-yunxgt.com
yunxi.cc
yunxi.net
yunxi.tv
@@ -113775,6 +112921,7 @@ yunzongnet.com
yunzuji.vip
yunzujia.com
yunzuowen.com
+yunzuoye.net
yunzz.net
yuoucn.com
yupao.com
@@ -113818,7 +112965,6 @@ yusiyy.com
yusongec.com
yusuan.com
yusunjewelry.com
-yususy.com
yusuusnw.com
yusxz.com
yutai365.com
@@ -113887,6 +113033,7 @@ yuyunkj.com
yuyuntang.com
yuyuntech.com
yuzeli.com
+yuzeli.net
yuzhengzixun.net
yuzhenhai.com
yuzhicaiexpo.com
@@ -113899,7 +113046,6 @@ yuzhoua.com
yuzhouwan.com
yuzhouyiyuan.com
yuzhouzb.com
-yuzhouzs.com
yuzhua.com
yuzhuan.com
yuzhulin.com
@@ -113960,7 +113106,6 @@ ywtds.com
ywurl.com
ywwg.net
ywwl.com
-ywwm.net
ywwpay.com
ywxue.com
ywxww.net
@@ -113974,7 +113119,6 @@ yx-g.com
yx-life.com
yx-s.com
yx-s.net
-yx007.com
yx0599.com
yx090.com
yx10011.com
@@ -114138,7 +113282,6 @@ yxzp.net
yxzu.com
yxzxgy.com
yxzzd.com
-yy-xjy.com
yy.com
yy07.com
yy11.com
@@ -114367,7 +113510,6 @@ yzgnet.com
yzgttm.com
yzgzx.com
yzhbw.net
-yzhckncp.com
yzhcloud.com
yzhdyy.com
yzhejin.com
@@ -114520,6 +113662,7 @@ z316.com
z318.com
z3quant.com
z3zex.icu
+z4bgpo.com
z574.com
z5encrypt.com
z5w.net
@@ -114589,6 +113732,7 @@ zaiyunli.com
zajiebao.com
zajilu.com
zajourney.com
+zakc.group
zaker.com
zaku.fun
zakww.com
@@ -114679,7 +113823,6 @@ zazhidang.com
zazhipu.com
zazsz.com
zb-kc.com
-zb.live
zb1.org
zb18.net
zb8.com
@@ -114714,7 +113857,6 @@ zbieo.com
zbii.com
zbinfo.net
zbintel.com
-zbiquge.com
zbird.com
zbisq.com
zbitcloud.com
@@ -114894,6 +114036,8 @@ zcxsl.com
zcycdn.com
zczbzx.com
zczj.com
+zczy100.com
+zczy56.com
zd-auto.com
zd-brake.com
zd-dl.com
@@ -114979,6 +114123,7 @@ zdwmq.com
zdworks.com
zdwx.com
zdwx.net
+zdwx.vip
zdxlz.com
zdxygl.com
zdyfy.com
@@ -115042,7 +114187,6 @@ zengjunyin.com
zenglong3d.com
zengrong.net
zengslb.com
-zengsong.org
zengyongfu.com
zengzeng.net
zenha.net
@@ -115075,11 +114219,11 @@ zerontruck.com
zeroonead.com
zeropartner.com
zerotogether.net
+zerseager.com
zeruns.com
zerustech.com
zeryt111.fun
zesee.com
-zesenjt.com
zeshengproject.com
zeshengshun.online
zeshengtecphar.com
@@ -115089,7 +114233,10 @@ zeststore.com
zetacn.com
zetaijituan.com
zetast.com
+zetbig.com
+zetcloud.com
zettlernb.com
+zetyun.com
zeuux.com
zeuux.org
zexiaoqiao.com
@@ -115364,7 +114511,6 @@ zgpj.net
zgps168.com
zgpts.com
zgpy168.com
-zgq.ink
zgqbxh.com
zgqbyp.com
zgqcdt.com
@@ -115383,7 +114529,6 @@ zgrcjlxh.com
zgrcjyw.com
zgrd.org
zgrdnews.com
-zgrfhb.com
zgrlm.com
zgrmw.com
zgruisai.com
@@ -115543,7 +114688,6 @@ zh-languan.com
zh-longshi.com
zh-piao.com
zh10.com
-zh188.net
zh189.com
zh30.com
zh818.com
@@ -115864,6 +115008,7 @@ zhedabingchong.com
zhedu.net
zhefengle.com
zhefuhua.com
+zhegu8.xyz
zheishui.com
zheiyu.com
zhejiangcheng.com
@@ -116000,7 +115145,6 @@ zhenhuadj.com
zhenhuan888.com
zhenimg.com
zhenjiang-marathon.com
-zhenjianghr.com
zhenjiatong.com
zhenjingtv.com
zhenkongbang.com
@@ -116034,7 +115178,6 @@ zhenxin2014.com
zhenxinet.com
zhenxinfu.com
zhenxingkuangchanpin.com
-zhenxinshengwu.com
zhenxipin.net
zhenyangshoes.com
zhenye.com
@@ -116276,6 +115419,7 @@ zhimacangku.com
zhimaixiaodian.com
zhimantian.com
zhimapay.net
+zhimaquan.net
zhimaruanjian.com
zhimatech.com
zhimawenda.com
@@ -116369,7 +115513,6 @@ zhituokeji.com
zhitusoft.com
zhituzhilian.com
zhivisaworld.com
-zhiwangrenwu.com
zhiweidata.com
zhiweihome.com
zhiweisoft.com
@@ -116417,7 +115560,6 @@ zhiyinlou.com
zhiyinmanhuawang.com
zhiyinmedia.com
zhiyoo.com
-zhiyou100.com
zhiyoubao.com
zhiyousx.com
zhiys.com
@@ -116511,7 +115653,6 @@ zhmodaoli.com
zhmold.com
zhmu.com
zhmxchina.com
-zhmzjl.com
zhmzqi.com
zhnbj.com
zhnfad.com
@@ -116522,6 +115663,7 @@ zhong.com
zhong100.com
zhongan.com
zhongan.io
+zhongancloud.com
zhonganfengshang.com
zhonganguobao.com
zhonganib.com
@@ -116551,7 +115693,6 @@ zhongchuangwenhua.com
zhongda021.com
zhongdakang.com
zhongdazm.com
-zhongde666.com
zhongdegroup.com
zhongdemetal.com
zhongdeng.com
@@ -116830,11 +115971,8 @@ zhouyi.cc
zhouyi.org
zhouyi114.com
zhouyiapi.com
-zhouyiju.com
-zhouyiyuc.com
zhouyou360.com
zhouyouji.world
-zhouyuanchao.com
zhouzhuang.net
zhoz.com
zhpca.com
@@ -116856,13 +115994,13 @@ zhsw.org
zhswfw.com
zhszcz.com
zht-cn.com
+zhtdtech.com
zhtelecom.com
zhtfw.net
zhtgroup.com
zhthg.com
zhtlq.com
zhtmid.com
-zhtuanjian.com
zhty.net
zhtyljt.com
zhuainiu.com
@@ -116941,7 +116079,6 @@ zhubian.com
zhubiaoju.com
zhubijiao.com
zhubo123.com
-zhubogu.com
zhuboqiang.com
zhuceshenzhengongsi.com
zhuceyou.com
@@ -116956,8 +116093,6 @@ zhuding.net
zhufaner.com
zhufangdianping.com
zhufengpeixun.com
-zhufg.com
-zhufuyujd.com
zhuge.com
zhuge888.com
zhugeapi.com
@@ -117064,6 +116199,7 @@ zhunbai.com
zhunc.vip
zhundao.net
zhundaoyun.com
+zhuneijs.com
zhuniangjia.com
zhuniu.com
zhunkua.net
@@ -117077,7 +116213,6 @@ zhuo.re
zhuobao.com
zhuobufan.com
zhuodai.net
-zhuodaiyu.com
zhuofan.net
zhuofansoft.com
zhuoguang.net
@@ -117092,7 +116227,6 @@ zhuolaoshi.net
zhuoligk.com
zhuomaiyun.com
zhuomajidian.com
-zhuomengwangluo.com
zhuomiles.com
zhuomogroup.com
zhuoquapp.com
@@ -117147,7 +116281,6 @@ zhutix.com
zhutix.net
zhutix.vip
zhutou.com
-zhutousan.net
zhutxia.com
zhuwang.cc
zhuwang360.com
@@ -117198,7 +116331,6 @@ zhxgimg.com
zhxhs.net
zhxht.com
zhxinuser.com
-zhxinza.com
zhxjyw.com
zhxnyw.com
zhxqpt.com
@@ -117242,6 +116374,7 @@ zi0.cc
zi15.com
zi5.cc
zi5.me
+zi6.cc
zianwu.com
zibaomuye.com
zibasset.com
@@ -117252,7 +116385,6 @@ zibogongli.com
zibojinling.com
zibomama.com
zibomarathon.com
-zibonewbright.com
zibowater.com
zibozhongxue.com
zibsc.com
@@ -117337,7 +116469,6 @@ zilian5.com
ziliao8.cc
ziliao8.com
ziliaoge.com
-ziliaoh.com
ziliref.com
zilongame.com
zilongshanren.com
@@ -117395,7 +116526,6 @@ ziti163.com
ziti3.com
ziti88.com
ziti9.com
-zitiao.org
zitichina.com
ziticq.com
zitidi.com
@@ -117420,7 +116550,6 @@ zixia.com
zixiaomao.com
zixigua.com
zixijiaoshi.com
-zixike.cc
zixingxinwen.com
zixueguoxue.com
zixuejie.com
@@ -117447,6 +116576,7 @@ ziyou.com
ziyou.studio
ziyouad.com
ziyoufa.com
+ziyouma.net
ziyouwu.com
ziyouxing.net
ziyouziti.com
@@ -117474,7 +116604,6 @@ zizdog.com
zizhengfang.com
zizhigx.com
zizhijie.com
-zizhiwang.cc
zizhuauto.com
zizhuhui.com
zizhupark.com
@@ -117998,7 +117127,6 @@ zjszyyxh.com
zjszzs.com
zjt2017.com
zjtaa.net
-zjtangshan.com
zjtbe.com
zjtcc.com
zjtcjt.com
@@ -118189,7 +117317,6 @@ zkjds.com
zkkailiaoji.com
zkkjpa.com
zkl2333.com
-zkmaint.com
zkmeiling.com
zkmob.net
zknmattress.com
@@ -118224,7 +117351,6 @@ zkw2009.com
zkwtech.com
zkx.cc
zkxblog.com
-zkxlkj.net
zkxww.com
zkyai.com
zkydib.com
@@ -118272,7 +117398,6 @@ zlingad.com
zlink-e.com
zlitoa.cc
zlitoa.com
-zljrhb.com
zljskb.com
zljweb.com
zljx.net
@@ -118384,7 +117509,6 @@ zmqh.com
zmqmt.com
zmren.com
zmrenwu.com
-zmrgame.com
zmrmbc.xyz
zmsq.com
zmssh.com
@@ -118403,7 +117527,6 @@ zmxph.com
zmye5vly.com
zmyui.com
zmzb.com
-zmzjk.com
zmzjt.com
zmzx.cc
zn8.com
@@ -118426,14 +117549,12 @@ znelc.com
znfcwf.com
znfit.com
zngm.com
-zngtgroup.com
zngue.com
zngxjt.com
znhhmedical.com
znhospital.com
znhr.com
znhwhw.com
-znimg.com
znj.com
znjchina.com
znjj.tv
@@ -118446,6 +117567,7 @@ znlcn.org
znlerp.com
znlh.com
znmq.com
+znnu.com
znonline.net
znp9.com
znpin.com
@@ -118464,18 +117586,17 @@ zntvrom.com
zntx.cc
zntzdj.com
znum.com
-znvren.com
znwb.com
znxdxs.com
znxhd.com
znxk.net
znyp.com
znypjy.com
-znyshurufa.com
znzmo.com
znzncn.com
znznet.net
znztool.com
+znztv.com
znzyf.com
zo-station.com
zoassetmanagement.com
@@ -118572,7 +117693,6 @@ zoossoft.net
zooszyservice.com
zootope.ink
zooyoo.cc
-zopomobile.com
zoqlan.com
zoranchem.com
zoroli.com
@@ -118651,7 +117771,6 @@ zpxrmyy.com
zq101.net
zq12369.com
zq235.com
-zq2mqo.com
zq6.com
zq84.com
zqagr.com
@@ -118681,7 +117800,6 @@ zqjjr.com
zqkjy.com
zqlian.com
zqlx.com
-zqmcdr.com
zqnf.com
zqpj.com
zqread.com
@@ -118735,7 +117853,6 @@ zrtg.com
zrthink.com
zrtjt.com
zrway.com
-zrwhartongroup.com
zrwjk.com
zrxdsj.com
zry97.com
@@ -118848,8 +117965,6 @@ zslefx.art
zslhs.com
zslin.com
zslp021.com
-zslyyn12.com
-zslyzjj11.com
zsmama.com
zsmls.com
zsmw.net
@@ -119085,6 +118200,7 @@ zuimeia.com
zuimeiqidai.com
zuimeitianqi.com
zuiqiangyingyu.net
+zuiqingfeng.com
zuishidai.com
zuitang.com
zuitu.com
@@ -119130,6 +118246,7 @@ zuo3.com
zuoanedu.com
zuoanfloor.com
zuobaike.net
+zuobiao.press
zuobin.net
zuocaibusiness.com
zuocaicn.com
@@ -119222,7 +118339,6 @@ zw69.com
zw885.com
zwads.com
zwayoptik.com
-zwba.net
zwbdata.com
zwcad.com
zwcctv.com
@@ -119306,7 +118422,6 @@ zxbook.net
zxbzr.com
zxchemgroup.com
zxcmk.com
-zxcnw.com
zxcoder.com
zxcvqqw.com
zxczw.com
@@ -119317,7 +118432,6 @@ zxdoo.com
zxdu.net
zxdyw.com
zxerp.com
-zxfbxg.com
zxfw888.com
zxfwgj.com
zxgj56.com
@@ -119438,7 +118552,6 @@ zybang.com
zybaoan.com
zybest.com
zybird.com
-zybk6.com
zybtp.com
zybuluo.com
zybwhsb.com
@@ -119504,6 +118617,7 @@ zyjthb.com
zyjymall.com
zyjyxx.com
zyjyyun.com
+zyka.cc
zykj0668.com
zykjct.com
zykjgame.com
@@ -119519,6 +118633,7 @@ zymc1.com
zymkcdn.com
zymkshop.com
zymreal.com
+zyms8.me
zyoffice.com
zyoo.net
zyoogame.com
@@ -119540,7 +118655,6 @@ zyqzyyy.com
zyrack-china.com
zyrb.com
zyrc168.com
-zyrfanli.com
zyrj.org
zyrm.com
zyrykbiandao.com
@@ -119610,7 +118724,6 @@ zzay.net
zzbaike.com
zzbaowen.com
zzbbs.com
-zzbcmx.com
zzbd.org
zzbds.net
zzboiler.com
@@ -119706,7 +118819,6 @@ zzmyt.com
zznah001.com
zznst.com
zznyy.com
-zzpn.net
zzprotect.com
zzptech.com
zzpuke.com
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver
index 21cacf1228..3b2cd43a76 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/china_list.ver
@@ -1 +1 @@
-202507172215
+202508072216
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt b/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt
index 0d2ca444a7..bd872bcaad 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.txt
@@ -3086,6 +3086,7 @@ lsmwebcast.com
lsxszzg.com
ltn.com.tw
luckydesigner.space
+ludepress.com
luke54.com
luke54.org
lupm.org
@@ -5376,6 +5377,7 @@ waffle1999.com
wahas.com
waikeung.org
wainao.me
+walletconnect.com
wallmama.com
wallpapercasa.com
wallproxy.com
@@ -5609,6 +5611,8 @@ www1.biz
www2.ohchr.org
www2.rocketbbs.com
wwwhost.biz
+wxw.cat
+wxw.moe
wzyboy.im
x-art.com
x-berry.com
@@ -5707,6 +5711,7 @@ yam.com
yam.org.tw
yande.re
yanghengjun.com
+yangzhi.org
yasni.co.uk
yasukuni.or.jp
yayabay.com
diff --git a/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver b/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver
index 21cacf1228..3b2cd43a76 100644
--- a/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver
+++ b/small/luci-app-homeproxy/root/etc/homeproxy/resources/gfw_list.ver
@@ -1 +1 @@
-202507172215
+202508072216
diff --git a/small/luci-app-passwall/Makefile b/small/luci-app-passwall/Makefile
index 1612847688..93fffe0ab5 100644
--- a/small/luci-app-passwall/Makefile
+++ b/small/luci-app-passwall/Makefile
@@ -128,7 +128,6 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_Shadow_TLS
config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs
bool "Include Simple-Obfs (Shadowsocks Plugin)"
- select PACKAGE_simple-obfs
select PACKAGE_simple-obfs-client
default y
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
index 93ba2b83b1..d3b16f760b 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua
@@ -774,6 +774,18 @@ o.rmempty = false
o = s2:option(ListValue, "node", translate("Socks Node"))
+o = s2:option(DummyValue, "now_node", translate("Current Node"))
+o.rawhtml = true
+o.cfgvalue = function(_, n)
+ local current_node = api.get_cache_var("socks_" .. n)
+ if current_node then
+ local node = m:get(current_node)
+ if node then
+ return (api.get_node_remarks(node) or ""):gsub("(:)%[", "%1 [")
+ end
+ end
+end
+
local n = 1
m.uci:foreach(appname, "socks", function(s)
if s[".name"] == section then
@@ -788,7 +800,7 @@ o.datatype = "port"
o.rmempty = false
if has_singbox or has_xray then
- o = s2:option(Value, "http_port", "HTTP " .. translate("Listen Port") .. " " .. translate("0 is not use"))
+ o = s2:option(Value, "http_port", "HTTP " .. translate("Listen Port"))
o.default = 0
o.datatype = "port"
end
diff --git a/small/luci-app-passwall/po/zh-cn/passwall.po b/small/luci-app-passwall/po/zh-cn/passwall.po
index 2163e7978f..92c3ad0322 100644
--- a/small/luci-app-passwall/po/zh-cn/passwall.po
+++ b/small/luci-app-passwall/po/zh-cn/passwall.po
@@ -100,6 +100,9 @@ msgstr "Socks 配置"
msgid "Socks Node"
msgstr "Socks 节点"
+msgid "Current Node"
+msgstr "当前节点"
+
msgid "Listen Port"
msgstr "监听端口"
diff --git a/small/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh b/small/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
index 91c69c355d..ef4733d2ab 100755
--- a/small/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
+++ b/small/luci-app-passwall/root/usr/share/passwall/socks_auto_switch.sh
@@ -31,7 +31,7 @@ test_url() {
if /usr/bin/curl --help all | grep -q "\-\-retry-all-errors"; then
extra_params="--retry-all-errors ${extra_params}"
fi
- status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout ${timeout} --retry ${try} -w %{http_code} "$url")
+ local status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout ${timeout} --retry ${try} -w %{http_code} "$url")
case "$status" in
204)
status=200
@@ -41,12 +41,12 @@ test_url() {
}
test_proxy() {
- result=0
- status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x socks5h://127.0.0.1:${socks_port}")
+ local result=0
+ local status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x socks5h://127.0.0.1:${socks_port}")
if [ "$status" = "200" ]; then
result=0
else
- status2=$(test_url "https://www.baidu.com" ${retry_num} ${connect_timeout})
+ local status2=$(test_url "https://www.baidu.com" ${retry_num} ${connect_timeout})
if [ "$status2" = "200" ]; then
result=1
else
@@ -68,7 +68,7 @@ test_node() {
/usr/share/${CONFIG}/app.sh run_socks flag="test_node_${node_id}" node=${node_id} bind=127.0.0.1 socks_port=${_tmp_port} config_file=test_node_${node_id}.json
local curlx="socks5h://127.0.0.1:${_tmp_port}"
sleep 1s
- _proxy_status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x $curlx")
+ local _proxy_status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x $curlx")
# 结束 SS 插件进程
local pid_file="/tmp/etc/${CONFIG}/test_node_${node_id}_plugin.pid"
[ -s "$pid_file" ] && kill -9 "$(head -n 1 "$pid_file")" >/dev/null 2>&1
@@ -82,14 +82,14 @@ test_node() {
}
test_auto_switch() {
- flag=$(expr $flag + 1)
+ flag=$((flag + 1))
local b_nodes=$1
local now_node=$2
[ -z "$now_node" ] && {
if [ -n "$(/usr/share/${CONFIG}/app.sh get_cache_var "socks_${id}")" ]; then
now_node=$(/usr/share/${CONFIG}/app.sh get_cache_var "socks_${id}")
else
- #echolog "自动切换检测:未知错误"
+ #echolog "Socks切换检测:未知错误"
return 1
fi
}
@@ -98,58 +98,59 @@ test_auto_switch() {
main_node=$now_node
}
- status=$(test_proxy)
- if [ "$status" == 2 ]; then
- echolog "自动切换检测:无法连接到网络,请检查网络是否正常!"
+ local status=$(test_proxy)
+ if [ "$status" = "2" ]; then
+ echolog "Socks切换检测:无法连接到网络,请检查网络是否正常!"
return 2
fi
#检测主节点是否能使用
- if [ "$restore_switch" == "1" ] && [ -n "$main_node" ] && [ "$now_node" != "$main_node" ]; then
+ if [ "$restore_switch" = "1" ] && [ -n "$main_node" ] && [ "$now_node" != "$main_node" ]; then
test_node ${main_node}
[ $? -eq 0 ] && {
#主节点正常,切换到主节点
- echolog "自动切换检测:${id}主节点【$(config_n_get $main_node type):[$(config_n_get $main_node remarks)]】正常,切换到主节点!"
+ echolog "Socks切换检测:${id}主节点【$(config_n_get $main_node type):[$(config_n_get $main_node remarks)]】正常,切换到主节点!"
/usr/share/${CONFIG}/app.sh socks_node_switch flag=${id} new_node=${main_node}
[ $? -eq 0 ] && {
- echolog "自动切换检测:${id}节点切换完毕!"
+ echolog "Socks切换检测:${id}节点切换完毕!"
}
return 0
}
fi
- if [ "$status" == 0 ]; then
- #echolog "自动切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】正常。"
+ if [ "$status" = "0" ]; then
+ #echolog "Socks切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】正常。"
return 0
- elif [ "$status" == 1 ]; then
- echolog "自动切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】异常,切换到下一个备用节点检测!"
- local new_node
- in_backup_nodes=$(echo $b_nodes | grep $now_node)
- # 判断当前节点是否存在于备用节点列表里
- if [ -z "$in_backup_nodes" ]; then
- # 如果不存在,设置第一个节点为新的节点
- new_node=$(echo $b_nodes | awk -F ' ' '{print $1}')
+ elif [ "$status" = "1" ]; then
+ local new_node msg
+ if [ "$backup_node_num" -gt 1 ]; then
+ # 有多个后备节点时
+ local first_node found node
+ for node in $b_nodes; do
+ [ -z "$first_node" ] && first_node="$node" # 记录第一个节点
+ [ "$found" = "1" ] && { new_node="$node"; break; } # 找到当前节点后取下一个
+ [ "$node" = "$now_node" ] && found=1 # 标记找到当前节点
+ done
+ # 如果没找到当前节点,或者当前节点是最后一个,就取第一个节点
+ [ -z "$new_node" ] && new_node="$first_node"
+ msg="切换到$([ "$now_node" = "$main_node" ] && echo 备用节点 || echo 下一个备用节点)检测!"
else
- # 如果存在,设置下一个备用节点为新的节点
- #local count=$(expr $(echo $b_nodes | grep -o ' ' | wc -l) + 1)
- local next_node=$(echo $b_nodes | awk -F "$now_node" '{print $2}' | awk -F " " '{print $1}')
- if [ -z "$next_node" ]; then
- new_node=$(echo $b_nodes | awk -F ' ' '{print $1}')
- else
- new_node=$next_node
- fi
+ # 只有一个后备节点时,与主节点轮询
+ new_node=$([ "$now_node" = "$main_node" ] && echo "$b_nodes" || echo "$main_node")
+ msg="切换到$([ "$now_node" = "$main_node" ] && echo 备用节点 || echo 主节点)检测!"
fi
+ echolog "Socks切换检测:${id}【$(config_n_get $now_node type):[$(config_n_get $now_node remarks)]】异常,$msg"
test_node ${new_node}
if [ $? -eq 0 ]; then
- [ "$restore_switch" == "0" ] && {
- uci set $CONFIG.${id}.node=$new_node
- [ -z "$(echo $b_nodes | grep $main_node)" ] && uci add_list $CONFIG.${id}.autoswitch_backup_node=$main_node
- uci commit $CONFIG
- }
- echolog "自动切换检测:${id}【$(config_n_get $new_node type):[$(config_n_get $new_node remarks)]】正常,切换到此节点!"
+# [ "$restore_switch" = "0" ] && {
+# uci set $CONFIG.${id}.node=$new_node
+# [ -z "$(echo $b_nodes | grep $main_node)" ] && uci add_list $CONFIG.${id}.autoswitch_backup_node=$main_node
+# uci commit $CONFIG
+# }
+ echolog "Socks切换检测:${id}【$(config_n_get $new_node type):[$(config_n_get $new_node remarks)]】正常,切换到此节点!"
/usr/share/${CONFIG}/app.sh socks_node_switch flag=${id} new_node=${new_node}
[ $? -eq 0 ] && {
- echolog "自动切换检测:${id}节点切换完毕!"
+ echolog "Socks切换检测:${id}节点切换完毕!"
}
return 0
else
@@ -166,12 +167,20 @@ start() {
main_node=$(config_n_get $id node)
socks_port=$(config_n_get $id port 0)
delay=$(config_n_get $id autoswitch_testing_time 30)
- sleep 5s
connect_timeout=$(config_n_get $id autoswitch_connect_timeout 3)
retry_num=$(config_n_get $id autoswitch_retry_num 1)
restore_switch=$(config_n_get $id autoswitch_restore_switch 0)
probe_url=$(config_n_get $id autoswitch_probe_url "https://www.google.com/generate_204")
backup_node=$(config_n_get $id autoswitch_backup_node)
+ if [ -n "$backup_node" ]; then
+ backup_node=$(echo "$backup_node" | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
+ backup_node_num=$(printf "%s\n" "$backup_node" | wc -w)
+ if [ "$backup_node_num" -eq 1 ]; then
+ [ "$main_node" = "$backup_node" ] && return
+ fi
+ else
+ return
+ fi
while [ -n "$backup_node" ]; do
[ -f "$LOCK_FILE" ] && {
sleep 6s
@@ -183,7 +192,6 @@ start() {
continue
}
touch $LOCK_FILE
- backup_node=$(echo $backup_node | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
test_auto_switch "$backup_node"
rm -f $LOCK_FILE
sleep ${delay}
@@ -191,4 +199,3 @@ start() {
}
start $@
-
diff --git a/small/luci-app-passwall2/Makefile b/small/luci-app-passwall2/Makefile
index 61863c8415..6328a950e7 100644
--- a/small/luci-app-passwall2/Makefile
+++ b/small/luci-app-passwall2/Makefile
@@ -124,6 +124,7 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server
config PACKAGE_$(PKG_NAME)_INCLUDE_Simple_Obfs
bool "Include Simple-Obfs (Shadowsocks Plugin)"
select PACKAGE_simple-obfs
+ select PACKAGE_simple-obfs-client
default y
config PACKAGE_$(PKG_NAME)_INCLUDE_SingBox
diff --git a/small/luci-app-passwall2/luasrc/controller/passwall2.lua b/small/luci-app-passwall2/luasrc/controller/passwall2.lua
index d3ec9b29b1..5a6eba4b9d 100644
--- a/small/luci-app-passwall2/luasrc/controller/passwall2.lua
+++ b/small/luci-app-passwall2/luasrc/controller/passwall2.lua
@@ -81,6 +81,8 @@ function index()
entry({"admin", "services", appname, "update_rules"}, call("update_rules")).leaf = true
entry({"admin", "services", appname, "subscribe_del_node"}, call("subscribe_del_node")).leaf = true
entry({"admin", "services", appname, "subscribe_del_all"}, call("subscribe_del_all")).leaf = true
+ entry({"admin", "services", appname, "subscribe_manual"}, call("subscribe_manual")).leaf = true
+ entry({"admin", "services", appname, "subscribe_manual_all"}, call("subscribe_manual_all")).leaf = true
--[[Components update]]
entry({"admin", "services", appname, "check_passwall2"}, call("app_check")).leaf = true
@@ -416,6 +418,27 @@ function delete_select_nodes()
uci:delete(appname, t[".name"], "to_node")
uci:delete(appname, t[".name"], "chain_proxy")
end
+ local list_name = t["urltest_node"] and "urltest_node" or (t["balancing_node"] and "balancing_node")
+ if list_name then
+ local nodes = uci:get_list(appname, t[".name"], list_name)
+ if nodes then
+ local changed = false
+ local new_nodes = {}
+ for _, node in ipairs(nodes) do
+ if node ~= w then
+ table.insert(new_nodes, node)
+ else
+ changed = true
+ end
+ end
+ if changed then
+ uci:set_list(appname, t[".name"], list_name, new_nodes)
+ end
+ end
+ end
+ if t["fallback_node"] == w then
+ uci:delete(appname, t[".name"], "fallback_node")
+ end
end)
if (uci:get(appname, w, "add_mode") or "0") == "2" then
local add_from = uci:get(appname, w, "add_from") or ""
@@ -619,3 +642,51 @@ function subscribe_del_all()
luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua truncate > /dev/null 2>&1")
http.status(200, "OK")
end
+
+function subscribe_manual()
+ local section = http.formvalue("section") or ""
+ local current_url = http.formvalue("url") or ""
+ if section == "" or current_url == "" then
+ http_write_json({ success = false, msg = "Missing section or URL, skip." })
+ return
+ end
+ local uci_url = api.sh_uci_get(appname, section, "url")
+ if not uci_url or uci_url == "" then
+ http_write_json({ success = false, msg = i18n.translate("Please save and apply before manually subscribing.") })
+ return
+ end
+ if uci_url ~= current_url then
+ api.sh_uci_set(appname, section, "url", current_url, true)
+ end
+ luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. section .. " manual >/dev/null 2>&1 &")
+ http_write_json({ success = true, msg = "Subscribe triggered." })
+end
+
+function subscribe_manual_all()
+ local sections = http.formvalue("sections") or ""
+ local urls = http.formvalue("urls") or ""
+ if sections == "" or urls == "" then
+ http_write_json({ success = false, msg = "Missing section or URL, skip." })
+ return
+ end
+ local section_list = util.split(sections, ",")
+ local url_list = util.split(urls, ",")
+ -- 检查是否存在未保存配置
+ for i, section in ipairs(section_list) do
+ local uci_url = api.sh_uci_get(appname, section, "url")
+ if not uci_url or uci_url == "" then
+ http_write_json({ success = false, msg = i18n.translate("Please save and apply before manually subscribing.") })
+ return
+ end
+ end
+ -- 保存有变动的url
+ for i, section in ipairs(section_list) do
+ local current_url = url_list[i] or ""
+ local uci_url = api.sh_uci_get(appname, section, "url")
+ if current_url ~= "" and uci_url ~= current_url then
+ api.sh_uci_set(appname, section, "url", current_url, true)
+ end
+ end
+ luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start all manual >/dev/null 2>&1 &")
+ http_write_json({ success = true, msg = "Subscribe triggered." })
+end
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
index 96b88eb315..c6ab4c3b55 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_list.lua
@@ -53,6 +53,37 @@ function s.remove(e, t)
m:set(s[".name"], "node", "default")
end
end)
+ m.uci:foreach(appname, "nodes", function(s)
+ if s["preproxy_node"] == t then
+ m:del(s[".name"], "preproxy_node")
+ m:del(s[".name"], "chain_proxy")
+ end
+ if s["to_node"] == t then
+ m:del(s[".name"], "to_node")
+ m:del(s[".name"], "chain_proxy")
+ end
+ local list_name = s["urltest_node"] and "urltest_node" or (s["balancing_node"] and "balancing_node")
+ if list_name then
+ local nodes = m.uci:get_list(appname, s[".name"], list_name)
+ if nodes then
+ local changed = false
+ local new_nodes = {}
+ for _, node in ipairs(nodes) do
+ if node ~= t then
+ table.insert(new_nodes, node)
+ else
+ changed = true
+ end
+ end
+ if changed then
+ m.uci:set_list(appname, s[".name"], list_name, new_nodes)
+ end
+ end
+ end
+ if s["fallback_node"] == t then
+ m:del(s[".name"], "fallback_node")
+ end
+ end)
if (m:get(t, "add_mode") or "0") == "2" then
local add_from = m:get(t, "add_from") or ""
if add_from ~= "" then
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
index f9f5018581..11b3f173ea 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe.lua
@@ -51,6 +51,11 @@ if api.is_js_luci() then
end
end
+m.render = function(self, ...)
+ Map.render(self, ...)
+ api.optimize_cbi_ui()
+end
+
-- [[ Subscribe Settings ]]--
s = m:section(TypedSection, "global_subscribe", "")
s.anonymous = true
@@ -136,15 +141,15 @@ function o.cfgvalue(self, section)
translate("Delete All Subscribe Node"))
end
-o = s:option(Button, "_update", translate("Manual subscription All"))
-o.inputstyle = "apply"
-function o.write(t, n)
- luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start > /dev/null 2>&1 &")
- m.no_commit = true
- luci.http.redirect(api.url("log"))
+o = s:option(DummyValue, "_update", translate("Manual subscription All"))
+o.rawhtml = true
+o.cfgvalue = function(self, section)
+ return string.format([[
+ ]],
+ translate("Manual subscription All"))
end
-s = m:section(TypedSection, "subscribe_list", "", "" .. translate("Please input the subscription url first, save and submit before manual subscription.") .. "")
+s = m:section(TypedSection, "subscribe_list", "", "" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "")
s.addremove = true
s.anonymous = true
s.sortable = true
@@ -205,12 +210,12 @@ function o.cfgvalue(self, section)
remark, translate("Delete the subscribed node"))
end
-o = s:option(Button, "_update", translate("Manual subscription"))
-o.inputstyle = "apply"
-function o.write(t, n)
- luci.sys.call("lua /usr/share/" .. appname .. "/subscribe.lua start " .. n .. " > /dev/null 2>&1 &")
- m.no_commit = true
- luci.http.redirect(api.url("log"))
+o = s:option(DummyValue, "_update", translate("Manual subscription"))
+o.rawhtml = true
+o.cfgvalue = function(self, section)
+ return string.format([[
+ ]],
+ section, translate("Manual subscription"))
end
s:append(Template(appname .. "/node_subscribe/js"))
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
index 4b64f3728b..db0c137a40 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/node_subscribe_config.lua
@@ -9,6 +9,11 @@ if not arg[1] or not m:get(arg[1]) then
luci.http.redirect(m.redirect)
end
+m.render = function(self, ...)
+ Map.render(self, ...)
+ api.optimize_cbi_ui()
+end
+
local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
local has_singbox = api.finded_com("sing-box")
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
index 0889ab6970..723752f633 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/other.lua
@@ -234,6 +234,9 @@ if has_xray then
end
if has_singbox then
+ local version = api.get_app_version("sing-box"):match("[^v]+")
+ local version_ge_1_12_0 = api.compare_versions(version, ">=", "1.12.0")
+
s = m:section(TypedSection, "global_singbox", "Sing-Box " .. translate("Settings"))
s.anonymous = true
s.addremove = false
@@ -279,6 +282,16 @@ if has_singbox then
os.remove(geosite_path)
end
end
+
+ if version_ge_1_12_0 then
+ o = s:option(Flag, "record_fragment", "TLS Record " .. translate("Fragment"),
+ translate("Split handshake data into multiple TLS records for better censorship evasion. Low overhead. Recommended to enable first."))
+ o.default = 0
+
+ o = s:option(Flag, "fragment", "TLS TCP " .. translate("Fragment"),
+ translate("Split handshake into multiple TCP segments. Enhances obfuscation. May increase delay. Use only if needed."))
+ o.default = 0
+ end
end
return m
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
index 192ce96eb5..73f25b30ec 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua
@@ -135,7 +135,7 @@ if api.compare_versions(xray_version, ">=", "1.8.10") then
end
-- 探测地址
-local ucpu = s:option(Flag, _n("useCustomProbeUrl"), translate("Use Custome Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL."))
+local ucpu = s:option(Flag, _n("useCustomProbeUrl"), translate("Use Custom Probe URL"), translate("By default the built-in probe URL will be used, enable this option to use a custom probe URL."))
ucpu:depends({ [_n("balancingStrategy")] = "leastPing" })
ucpu:depends({ [_n("balancingStrategy")] = "leastLoad" })
@@ -379,6 +379,19 @@ o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translat
o.default = "0"
o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o = s:option(Flag, _n("ech"), translate("ECH"))
+o.default = "0"
+o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+
+o = s:option(TextValue, _n("ech_config"), translate("ECH Config"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("ech")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
-- [[ REALITY部分 ]] --
o = s:option(Value, _n("reality_publicKey"), translate("Public Key"))
o:depends({ [_n("tls")] = true, [_n("reality")] = true })
@@ -409,6 +422,19 @@ o.default = "chrome"
o:depends({ [_n("tls")] = true, [_n("utls")] = true })
o:depends({ [_n("tls")] = true, [_n("reality")] = true })
+o = s:option(Flag, _n("use_mldsa65Verify"), translate("ML-DSA-65"))
+o.default = "0"
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
+
+o = s:option(TextValue, _n("reality_mldsa65Verify"), "ML-DSA-65 " .. translate("Public key"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("use_mldsa65Verify")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW (TCP)")
o:value("mkcp", "mKCP")
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua
index fea94a1efc..6f8cbffa57 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss-rust.lua
@@ -43,17 +43,29 @@ o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), t
o:value("false")
o:value("true")
-o = s:option(ListValue, _n("plugin"), translate("plugin"))
+o = s:option(Flag, _n("plugin_enabled"), translate("plugin"))
+o.default = 0
+
+o = s:option(Value, _n("plugin"), "SIP003 " .. translate("plugin"), translate("Supports custom SIP003 plugins, Make sure the plugin is installed."))
+o.default = "none"
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
if api.is_finded("shadow-tls") then o:value("shadow-tls") end
+o:depends({ [_n("plugin_enabled")] = true })
+o.validate = function(self, value, t)
+ if value and value ~= "" and value ~= "none" then
+ if not api.is_finded(value) then
+ return nil, value .. ": " .. translate("Can't find this file!")
+ else
+ return value
+ end
+ end
+ return nil
+end
o = s:option(Value, _n("plugin_opts"), translate("opts"))
-o:depends({ [_n("plugin")] = "xray-plugin"})
-o:depends({ [_n("plugin")] = "v2ray-plugin"})
-o:depends({ [_n("plugin")] = "obfs-local"})
-o:depends({ [_n("plugin")] = "shadow-tls"})
+o:depends({ [_n("plugin_enabled")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua
index 780a36aa12..4201cc8fbe 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ss.lua
@@ -44,15 +44,18 @@ o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), t
o:value("false")
o:value("true")
-o = s:option(ListValue, _n("plugin"), translate("plugin"))
+o = s:option(Flag, _n("plugin_enabled"), translate("plugin"))
+o.default = 0
+
+o = s:option(ListValue, _n("plugin"), "SIP003 " .. translate("plugin"))
+o.default = "none"
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
+o:depends({ [_n("plugin_enabled")] = true })
o = s:option(Value, _n("plugin_opts"), translate("opts"))
-o:depends({ [_n("plugin")] = "xray-plugin"})
-o:depends({ [_n("plugin")] = "v2ray-plugin"})
-o:depends({ [_n("plugin")] = "obfs-local"})
+o:depends({ [_n("plugin_enabled")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
index ff93af46d2..8685cc7217 100644
--- a/small/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
+++ b/small/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua
@@ -187,6 +187,19 @@ o:value("h2")
o:value("http/1.1")
o:depends({ [_n("tls")] = true })
+o = s:option(Flag, _n("use_mldsa65Seed"), translate("ML-DSA-65"))
+o.default = "0"
+o:depends({ [_n("reality")] = true })
+
+o = s:option(TextValue, _n("reality_mldsa65Seed"), "ML-DSA-65 " .. translate("Private Key"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("use_mldsa65Seed")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
-- o = s:option(Value, _n("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
@@ -223,6 +236,19 @@ o.validate = function(self, value, t)
return nil
end
+o = s:option(Flag, _n("ech"), translate("ECH"))
+o.default = "0"
+o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+
+o = s:option(TextValue, _n("ech_key"), translate("ECH Key"))
+o.default = ""
+o.rows = 5
+o.wrap = "soft"
+o:depends({ [_n("ech")] = true })
+o.validate = function(self, value)
+ return api.trim(value:gsub("[\r\n]", ""))
+end
+
o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW")
o:value("mkcp", "mKCP")
diff --git a/small/luci-app-passwall2/luasrc/passwall2/api.lua b/small/luci-app-passwall2/luasrc/passwall2/api.lua
index 1bcbedd8b0..58af0533f9 100644
--- a/small/luci-app-passwall2/luasrc/passwall2/api.lua
+++ b/small/luci-app-passwall2/luasrc/passwall2/api.lua
@@ -55,7 +55,8 @@ function uci_save(cursor, config, commit, apply)
end
function sh_uci_get(config, section, option)
- exec_call(string.format("uci -q get %s.%s.%s", config, section, option))
+ local _, val = exec_call(string.format("uci -q get %s.%s.%s", config, section, option))
+ return val
end
function sh_uci_set(config, section, option, val, commit)
@@ -1208,6 +1209,9 @@ function is_js_luci()
end
function set_apply_on_parse(map)
+ if not map then
+ return
+ end
if is_js_luci() == true then
map.apply_on_parse = false
map.on_after_apply = function(self)
@@ -1217,6 +1221,10 @@ function set_apply_on_parse(map)
end
end
end
+ map.render = function(self, ...)
+ getmetatable(self).__index.render(self, ...) -- 保持原渲染流程
+ optimize_cbi_ui()
+ end
end
function luci_types(id, m, s, type_name, option_prefix)
@@ -1320,3 +1328,27 @@ function format_go_time(input)
if s > 0 or result == "" then result = result .. s .. "s" end
return result
end
+
+function optimize_cbi_ui()
+ luci.http.write([[
+
+ ]])
+end
diff --git a/small/luci-app-passwall2/luasrc/passwall2/com.lua b/small/luci-app-passwall2/luasrc/passwall2/com.lua
index 062ed873ec..dbde96b914 100644
--- a/small/luci-app-passwall2/luasrc/passwall2/com.lua
+++ b/small/luci-app-passwall2/luasrc/passwall2/com.lua
@@ -1,11 +1,13 @@
local _M = {}
local function gh_release_url(self)
- return "https://api.github.com/repos/" .. self.repo .. "/releases/latest"
+ --return "https://api.github.com/repos/" .. self.repo .. "/releases/latest"
+ return "https://github.com/xiaorouji/openwrt-passwall-packages/releases/download/api-cache/" .. string.lower(self.name) .. "-release-api.json"
end
local function gh_pre_release_url(self)
- return "https://api.github.com/repos/" .. self.repo .. "/releases?per_page=1"
+ --return "https://api.github.com/repos/" .. self.repo .. "/releases?per_page=1"
+ return "https://github.com/xiaorouji/openwrt-passwall-packages/releases/download/api-cache/" .. string.lower(self.name) .. "-pre-release-api.json"
end
_M.hysteria = {
diff --git a/small/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua b/small/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua
index 8c5286a95f..5cedef0c5c 100644
--- a/small/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua
+++ b/small/luci-app-passwall2/luasrc/passwall2/util_shadowsocks.lua
@@ -28,6 +28,7 @@ function gen_config_server(node)
return config
end
+local plugin_sh, plugin_bin
function gen_config(var)
local node_id = var["-node"]
@@ -49,12 +50,19 @@ function gen_config(var)
local local_http_port = var["-local_http_port"]
local local_http_username = var["-local_http_username"]
local local_http_password = var["-local_http_password"]
-
+
if api.is_ipv6(server_host) then
server_host = api.get_ipv6_only(server_host)
end
local server = server_host
-
+
+ local plugin_file
+ if node.plugin and node.plugin ~= "" and node.plugin ~= "none" then
+ plugin_sh = var["-plugin_sh"] or ""
+ plugin_file = (plugin_sh ~="") and plugin_sh or node.plugin
+ plugin_bin = node.plugin
+ end
+
local config = {
server = server,
server_port = tonumber(server_port),
@@ -68,10 +76,8 @@ function gen_config(var)
}
if node.type == "SS" then
- if node.plugin and node.plugin ~= "none" then
- config.plugin = node.plugin
- config.plugin_opts = node.plugin_opts or nil
- end
+ config.plugin = plugin_file or nil
+ config.plugin_opts = (plugin_file) and node.plugin_opts or nil
config.mode = mode
elseif node.type == "SSR" then
config.protocol = node.protocol
@@ -87,8 +93,8 @@ function gen_config(var)
method = node.method,
password = node.password,
timeout = tonumber(node.timeout),
- plugin = (node.plugin and node.plugin ~= "none") and node.plugin or nil,
- plugin_opts = (node.plugin and node.plugin ~= "none") and node.plugin_opts or nil
+ plugin = plugin_file or nil,
+ plugin_opts = (plugin_file) and node.plugin_opts or nil
}
},
locals = {},
@@ -119,5 +125,15 @@ if arg[1] then
local func =_G[arg[1]]
if func then
print(func(api.get_function_args(arg)))
+ if plugin_sh and plugin_sh ~="" and plugin_bin then
+ local f = io.open(plugin_sh, "w")
+ f:write("#!/bin/sh\n")
+ f:write("export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/bin:$PATH\n")
+ f:write(plugin_bin .. " $@ &\n")
+ f:write("echo $! > " .. plugin_sh:gsub("%.sh$", ".pid") .. "\n")
+ f:write("wait\n")
+ f:close()
+ luci.sys.call("chmod +x " .. plugin_sh)
+ end
end
end
diff --git a/small/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/small/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
index 9ce22bf5a2..d35f0bf065 100644
--- a/small/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
+++ b/small/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua
@@ -8,8 +8,9 @@ local fs = api.fs
local CACHE_PATH = api.CACHE_PATH
local split = api.split
-local local_version = api.get_app_version("sing-box")
-local version_ge_1_11_0 = api.compare_versions(local_version:match("[^v]+"), ">=", "1.11.0")
+local local_version = api.get_app_version("sing-box"):match("[^v]+")
+local version_ge_1_11_0 = api.compare_versions(local_version, ">=", "1.11.0")
+local version_ge_1_12_0 = api.compare_versions(local_version, ">=", "1.12.0")
local new_port
@@ -31,9 +32,13 @@ function gen_outbound(flag, node, tag, proxy_table)
end
local proxy_tag = nil
+ local fragment = nil
+ local record_fragment = nil
local run_socks_instance = true
if proxy_table ~= nil and type(proxy_table) == "table" then
proxy_tag = proxy_table.tag or nil
+ fragment = proxy_table.fragment or nil
+ record_fragment = proxy_table.record_fragment or nil
run_socks_instance = proxy_table.run_socks_instance
end
@@ -98,6 +103,8 @@ function gen_outbound(flag, node, tag, proxy_table)
alpn = alpn, --支持的应用层协议协商列表,按优先顺序排列。如果两个对等点都支持 ALPN,则选择的协议将是此列表中的一个,如果没有相互支持的协议则连接将失败。
--min_version = "1.2",
--max_version = "1.3",
+ fragment = fragment,
+ record_fragment = record_fragment,
ech = {
enabled = (node.ech == "1") and true or false,
config = node.ech_config and split(node.ech_config:gsub("\\n", "\n"), "\n") or {},
@@ -327,6 +334,8 @@ function gen_outbound(flag, node, tag, proxy_table)
enabled = true,
server_name = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
+ fragment = fragment,
+ record_fragment = record_fragment,
alpn = (node.hysteria_alpn and node.hysteria_alpn ~= "") and {
node.hysteria_alpn
} or nil,
@@ -361,6 +370,8 @@ function gen_outbound(flag, node, tag, proxy_table)
enabled = true,
server_name = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
+ fragment = fragment,
+ record_fragment = record_fragment,
alpn = (node.tuic_alpn and node.tuic_alpn ~= "") and {
node.tuic_alpn
} or nil,
@@ -398,6 +409,8 @@ function gen_outbound(flag, node, tag, proxy_table)
enabled = true,
server_name = node.tls_serverName,
insecure = (node.tls_allowInsecure == "1") and true or false,
+ fragment = fragment,
+ record_fragment = record_fragment,
ech = {
enabled = (node.ech == "1") and true or false,
config = node.ech_config and split(node.ech_config:gsub("\\n", "\n"), "\n") or {},
@@ -978,7 +991,7 @@ function gen_config(var)
end
if is_new_ut_node then
local ut_node = uci:get_all(appname, ut_node_id)
- local outbound = gen_outbound(flag, ut_node, ut_node_tag, { run_socks_instance = not no_run })
+ local outbound = gen_outbound(flag, ut_node, ut_node_tag, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil, run_socks_instance = not no_run })
if outbound then
outbound.tag = outbound.tag .. ":" .. ut_node.remarks
table.insert(outbounds, outbound)
@@ -1144,8 +1157,19 @@ function gen_config(var)
})
end
end
-
- local _outbound = gen_outbound(flag, _node, rule_name, { tag = use_proxy and preproxy_tag or nil, run_socks_instance = not no_run})
+ local proxy_table = {
+ tag = use_proxy and preproxy_tag or nil,
+ run_socks_instance = not no_run
+ }
+ if not proxy_table.tag then
+ if singbox_settings.fragment == "1" then
+ proxy_table.fragment = true
+ end
+ if singbox_settings.record_fragment == "1" then
+ proxy_table.record_fragment = true
+ end
+ end
+ local _outbound = gen_outbound(flag, _node, rule_name, proxy_table)
if _outbound then
_outbound.tag = _outbound.tag .. ":" .. _node.remarks
rule_outboundTag, last_insert_outbound = set_outbound_detour(_node, _outbound, outbounds, rule_name)
@@ -1348,7 +1372,7 @@ function gen_config(var)
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
end
else
- local outbound = gen_outbound(flag, node, nil, { run_socks_instance = not no_run })
+ local outbound = gen_outbound(flag, node, nil, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil, run_socks_instance = not no_run })
if outbound then
outbound.tag = outbound.tag .. ":" .. node.remarks
COMMON.default_outbound_tag, last_insert_outbound = set_outbound_detour(node, outbound, outbounds)
diff --git a/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua
index ae27871fbb..058de37890 100644
--- a/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua
+++ b/small/luci-app-passwall2/luasrc/passwall2/util_xray.lua
@@ -154,14 +154,16 @@ function gen_outbound(flag, node, tag, proxy_table)
tlsSettings = (node.stream_security == "tls") and {
serverName = node.tls_serverName,
allowInsecure = (node.tls_allowInsecure == "1") and true or false,
- fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil
+ fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil,
+ echConfigList = (node.ech == "1") and node.ech_config or nil
} or nil,
realitySettings = (node.stream_security == "reality") and {
serverName = node.tls_serverName,
publicKey = node.reality_publicKey,
shortId = node.reality_shortId or "",
spiderX = node.reality_spiderX or "/",
- fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or "chrome"
+ fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or "chrome",
+ mldsa65Verify = (node.use_mldsa65Verify == "1") and node.reality_mldsa65Verify or nil
} or nil,
rawSettings = ((node.transport == "raw" or node.transport == "tcp") and node.protocol ~= "socks" and (node.tcp_guise and node.tcp_guise ~= "none")) and {
header = {
@@ -460,7 +462,8 @@ function gen_config_server(node)
certificateFile = node.tls_certificateFile,
keyFile = node.tls_keyFile
}
- }
+ },
+ echServerKeys = (node.ech == "1") and node.ech_key or nil
} or nil,
rawSettings = (node.transport == "raw" or node.transport == "tcp") and {
header = {
@@ -545,7 +548,8 @@ function gen_config_server(node)
dest = node.reality_dest,
serverNames = node.reality_serverNames or {},
privateKey = node.reality_private_key,
- shortIds = node.reality_shortId or ""
+ shortIds = node.reality_shortId or "",
+ mldsa65Seed = (node.use_mldsa65Seed == "1") and node.reality_mldsa65Seed or nil
} or nil
end
end
@@ -1152,7 +1156,7 @@ function gen_config(var)
sys.call(string.format("mkdir -p %s && touch %s/%s", api.TMP_IFACE_PATH, api.TMP_IFACE_PATH, node.iface))
end
else
- local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.fragment == "1" or nil, run_socks_instance = not no_run })
+ local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil, run_socks_instance = not no_run })
if outbound then
outbound.tag = outbound.tag .. ":" .. node.remarks
COMMON.default_outbound_tag, last_insert_outbound = set_outbound_detour(node, outbound, outbounds)
diff --git a/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm b/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm
index 39f37d82dd..57985d3876 100644
--- a/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm
+++ b/small/luci-app-passwall2/luasrc/view/passwall2/node_list/link_share_man.htm
@@ -282,6 +282,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", dom_prefix + "reality_spiderX");
+ params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify");
}
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value;
@@ -290,6 +291,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += "&security=" + v_security;
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
+ params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
+ params += opt.query("ech", dom_prefix + "ech_config");
}
if (opt.get(dom_prefix + "shadowtls")?.checked) {
@@ -404,7 +407,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("path", dom_prefix + "ws_path");
if (v_type == "sing-box" && opt.get(dom_prefix + "ws_enableEarlyData").checked) {
var ws_maxEarlyData = opt.get(dom_prefix + "ws_maxEarlyData").value;
- params += "?ed=" + ws_maxEarlyData;
+ params += encodeURIComponent("?ed=" + ws_maxEarlyData);
}
} else if (v_transport === "h2") {
v_transport = "http";
@@ -440,7 +443,11 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
}
params += "&type=" + v_transport;
- params += opt.query("encryption", dom_prefix + "encryption");
+ if (v_type === "sing-box") {
+ params += "&encryption=none";
+ } else {
+ params += opt.query("encryption", dom_prefix + "encryption");
+ }
if (opt.get(dom_prefix + "tls").checked) {
var v_security = "tls";
@@ -453,6 +460,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", dom_prefix + "reality_spiderX");
+ params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify");
}
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value;
@@ -461,6 +469,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += "&security=" + v_security;
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
+ params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
+ params += opt.query("ech", dom_prefix + "ech_config");
}
params += "#" + encodeURI(v_alias.value);
@@ -520,6 +530,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += opt.query("pbk", dom_prefix + "reality_publicKey");
params += opt.query("sid", dom_prefix + "reality_shortId");
params += opt.query("spx", dom_prefix + "reality_spiderX");
+ params += opt.query("pqv", dom_prefix + "reality_mldsa65Verify");
}
if (opt.get(dom_prefix + "flow") && opt.get(dom_prefix + "flow").value) {
let v_flow = opt.get(dom_prefix + "flow").value;
@@ -528,6 +539,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
params += "&security=" + v_security;
params += opt.query("alpn", dom_prefix + "alpn");
params += opt.query("sni", dom_prefix + "tls_serverName");
+ params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure");
+ params += opt.query("ech", dom_prefix + "ech_config");
}
params += "#" + encodeURI(v_alias.value);
if (params[0] == "&") {
@@ -958,6 +971,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'utls', true);
opt.set(dom_prefix + 'fingerprint', queryParam.fp);
}
+ opt.set(dom_prefix + 'ech', !!queryParam.ech);
+ opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
}
if (queryParam.security == "reality") {
@@ -973,6 +988,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'reality_publicKey', queryParam.pbk || '');
opt.set(dom_prefix + 'reality_shortId', queryParam.sid || '');
opt.set(dom_prefix + 'reality_spiderX', queryParam.spx || '');
+ opt.set(dom_prefix + 'use_mldsa65Verify', !!queryParam.pqv);
+ opt.set(dom_prefix + 'reality_mldsa65Verify', queryParam.pqv || '');
}
}
@@ -1061,6 +1078,7 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
}
}
if (dom_prefix === "ssrust_") {
+ opt.set(dom_prefix + 'plugin_enabled', true);
opt.set(dom_prefix + 'plugin', "shadow-tls");
let shadowtlsOpt = parseShadowTLSParams(queryParam["shadow-tls"]);
opt.set(dom_prefix + 'plugin_opts', shadowtlsOpt || "");
@@ -1335,6 +1353,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'utls', true);
opt.set(dom_prefix + 'fingerprint', queryParam.fp);
}
+ opt.set(dom_prefix + 'ech', !!queryParam.ech);
+ opt.set(dom_prefix + 'ech_config', queryParam.ech || '');
}
if (queryParam.security == "reality") {
@@ -1350,6 +1370,8 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
opt.set(dom_prefix + 'reality_publicKey', queryParam.pbk || '');
opt.set(dom_prefix + 'reality_shortId', queryParam.sid || '');
opt.set(dom_prefix + 'reality_spiderX', queryParam.spx || '');
+ opt.set(dom_prefix + 'use_mldsa65Verify', !!queryParam.pqv);
+ opt.set(dom_prefix + 'reality_mldsa65Verify', queryParam.pqv || '');
}
}
@@ -1550,6 +1572,9 @@ local hysteria2_type = map:get("@global_subscribe[0]", "hysteria2_type") or "sin
queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
}
}
+ if ((!queryParam.security || queryParam.security == "") && queryParam.sni && queryParam.sni != "") {
+ queryParam.security = "tls";
+ }
if (queryParam.security) {
if (queryParam.security == "tls") {
opt.set(dom_prefix + 'tls', true);
diff --git a/small/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm b/small/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
index 37c2fb3680..e00a676c6a 100644
--- a/small/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
+++ b/small/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm
@@ -3,6 +3,8 @@ local api = require "luci.passwall2.api"
-%>
diff --git a/small/luci-app-passwall2/po/zh-cn/passwall2.po b/small/luci-app-passwall2/po/zh-cn/passwall2.po
index 750a52e3d2..794bf66cbc 100644
--- a/small/luci-app-passwall2/po/zh-cn/passwall2.po
+++ b/small/luci-app-passwall2/po/zh-cn/passwall2.po
@@ -343,7 +343,7 @@ msgstr "负载均衡策略"
msgid "Fallback Node"
msgstr "后备节点"
-msgid "Use Custome Probe URL"
+msgid "Use Custom Probe URL"
msgstr "使用自定义探测网址"
msgid "By default the built-in probe URL will be used, enable this option to use a custom probe URL."
@@ -940,8 +940,14 @@ msgstr "订阅网址"
msgid "Subscribe URL Access Method"
msgstr "订阅网址访问方式"
-msgid "Please input the subscription url first, save and submit before manual subscription."
-msgstr "请输入订阅网址保存应用后再手动订阅。"
+msgid "When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically."
+msgstr "新增订阅请先保存并应用后再手动订阅;如仅修改订阅地址,可直接手动订阅,系统将自动保存。"
+
+msgid "Please save and apply before manually subscribing."
+msgstr "请先保存并应用后再手动订阅。"
+
+msgid "Subscribe URL cannot be empty."
+msgstr "订阅网址不能为空。"
msgid "Subscribe via proxy"
msgstr "通过代理订阅"
@@ -1126,6 +1132,9 @@ msgstr "快速打开"
msgid "plugin"
msgstr "插件"
+msgid "Supports custom SIP003 plugins, Make sure the plugin is installed."
+msgstr "支持自定义 SIP003 插件,请确保插件已安装。"
+
msgid "opts"
msgstr "插件选项"
@@ -1547,10 +1556,10 @@ msgid "Protocol parameter. Enable length block encryption."
msgstr "协议参数。启用长度块加密。"
msgid "ECH Config"
-msgstr "ECH 密钥"
+msgstr "ECH 配置"
msgid "ECH Key"
-msgstr "ECH 配置"
+msgstr "ECH 密钥"
msgid "PQ signature schemes"
msgstr "后量子对等证书签名方案"
@@ -1585,6 +1594,12 @@ msgstr "分片间隔"
msgid "Fragmentation interval (ms)"
msgstr "分片间隔(ms)"
+msgid "Split handshake data into multiple TLS records for better censorship evasion. Low overhead. Recommended to enable first."
+msgstr "将握手数据拆分为多个 TLS 记录,提升抗封锁能力,几乎不增加延迟,建议优先启用。"
+
+msgid "Split handshake into multiple TCP segments. Enhances obfuscation. May increase delay. Use only if needed."
+msgstr "将 TLS 握手数据分为多个 TCP 包发送,提高伪装性,可能增加延迟,仅在封锁严重时使用。"
+
msgid "Noise"
msgstr "噪声"
diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/0_default_config b/small/luci-app-passwall2/root/usr/share/passwall2/0_default_config
index 98434175e1..ded4f16703 100644
--- a/small/luci-app-passwall2/root/usr/share/passwall2/0_default_config
+++ b/small/luci-app-passwall2/root/usr/share/passwall2/0_default_config
@@ -51,7 +51,7 @@ config global_rules
config global_app
option xray_file '/usr/bin/xray'
option hysteria_file '/usr/bin/hysteria'
- option singbox_file '/usr/bin/sing-box'
+ option sing_box_file '/usr/bin/sing-box'
config global_subscribe
option filter_keyword_mode '1'
diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/app.sh b/small/luci-app-passwall2/root/usr/share/passwall2/app.sh
index 87a1111390..89b4efbeea 100755
--- a/small/luci-app-passwall2/root/usr/share/passwall2/app.sh
+++ b/small/luci-app-passwall2/root/usr/share/passwall2/app.sh
@@ -297,11 +297,11 @@ get_singbox_geoip() {
local geoip_code="$1"
local geoip_path=$(config_t_get global_singbox geoip_path)
[ -e "$geoip_path" ] || { echo ""; return; }
- local has_geoip_tools=$($(first_type $(config_t_get global_app singbox_file) sing-box) geoip | grep "GeoIP tools")
+ local has_geoip_tools=$($(first_type $(config_t_get global_app sing_box_file) sing-box) geoip | grep "GeoIP tools")
if [ -n "${has_geoip_tools}" ]; then
[ -f "${geoip_path}" ] && local geoip_md5=$(md5sum ${geoip_path} | awk '{print $1}')
local output_file="${TMP_PATH2}/geoip-${geoip_md5}-${geoip_code}.json"
- [ ! -f ${output_file} ] && $(first_type $(config_t_get global_app singbox_file) sing-box) geoip -f "${geoip_path}" export "${geoip_code}" -o "${output_file}"
+ [ ! -f ${output_file} ] && $(first_type $(config_t_get global_app sing_box_file) sing-box) geoip -f "${geoip_path}" export "${geoip_code}" -o "${output_file}"
case "$2" in
ipv4)
cat ${output_file} | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk -F '"' '{print $2}' | sed -e "/^$/d"
@@ -468,7 +468,7 @@ run_singbox() {
[ "$loglevel" = "warning" ] && loglevel="warn"
_extra_param="${_extra_param} -loglevel $loglevel"
- _extra_param="${_extra_param} -tags $($(first_type $(config_t_get global_app singbox_file) sing-box) version | grep 'Tags:' | awk '{print $2}')"
+ _extra_param="${_extra_param} -tags $($(first_type $(config_t_get global_app sing_box_file) sing-box) version | grep 'Tags:' | awk '{print $2}')"
[ -n "$flag" ] && pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1{print $1}' | xargs kill -9 >/dev/null 2>&1
[ -n "$flag" ] && _extra_param="${_extra_param} -flag $flag"
@@ -552,7 +552,7 @@ run_singbox() {
}
lua $UTIL_SINGBOX gen_config -node $node ${_extra_param} > $config_file
- ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" "${log_file}" run -c "$config_file"
+ ln_run "$(first_type $(config_t_get global_app sing_box_file) sing-box)" "sing-box" "${log_file}" run -c "$config_file"
}
run_socks() {
@@ -604,7 +604,7 @@ run_socks() {
sing-box)
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
local _extra_param="-local_http_address $bind -local_http_port $http_port"
}
[ -n "$relay_port" ] && _extra_param="${_extra_param} -server_host $server_host -server_port $server_port"
@@ -615,12 +615,12 @@ run_socks() {
}
[ -n "$no_run" ] && _extra_param="${_extra_param} -no_run 1"
lua $UTIL_SINGBOX gen_config -flag SOCKS_$flag -node $node -local_socks_address $bind -local_socks_port $socks_port ${_extra_param} > $config_file
- [ -n "$no_run" ] || ln_run "$(first_type $(config_t_get global_app singbox_file) sing-box)" "sing-box" /dev/null run -c "$config_file"
+ [ -n "$no_run" ] || ln_run "$(first_type $(config_t_get global_app sing_box_file) sing-box)" "sing-box" /dev/null run -c "$config_file"
;;
xray)
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
local _extra_param="-local_http_address $bind -local_http_port $http_port"
}
[ -n "$relay_port" ] && _extra_param="${_extra_param} -server_host $server_host -server_port $server_port"
@@ -637,14 +637,23 @@ run_socks() {
[ -n "$no_run" ] || ln_run "$(first_type ssr-local)" "ssr-local" $log_file -c "$config_file" -v -u
;;
ss)
- lua $UTIL_SS gen_config -node $node -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $server_port -mode tcp_and_udp > $config_file
+ [ -n "$no_run" ] || {
+ local plugin_sh="${config_file%.json}_plugin.sh"
+ local _extra_param="-plugin_sh $plugin_sh"
+ }
+ lua $UTIL_SS gen_config -node $node -local_addr $bind -local_port $socks_port -server_host $server_host -server_port $server_port -mode tcp_and_udp ${_extra_param} > $config_file
[ -n "$no_run" ] || ln_run "$(first_type ss-local)" "ss-local" $log_file -c "$config_file" -v
;;
ss-rust)
+ local _extra_param
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
- local _extra_param="-local_http_address $bind -local_http_port $http_port"
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
+ _extra_param="-local_http_address $bind -local_http_port $http_port"
+ }
+ [ -n "$no_run" ] || {
+ local plugin_sh="${config_file%.json}_plugin.sh"
+ _extra_param="${_extra_param:+$_extra_param }-plugin_sh $plugin_sh"
}
lua $UTIL_SS gen_config -node $node -local_socks_address $bind -local_socks_port $socks_port -server_host $server_host -server_port $server_port ${_extra_param} > $config_file
[ -n "$no_run" ] || ln_run "$(first_type sslocal)" "sslocal" $log_file -c "$config_file" -v
@@ -652,7 +661,7 @@ run_socks() {
hysteria2)
[ "$http_port" != "0" ] && {
http_flag=1
- config_file=$(echo $config_file | sed "s/SOCKS/HTTP_SOCKS/g")
+ config_file="${config_file//SOCKS/HTTP_SOCKS}"
local _extra_param="-local_http_address $bind -local_http_port $http_port"
}
lua $UTIL_HYSTERIA2 gen_config -node $node -local_socks_address $bind -local_socks_port $socks_port -server_host $server_host -server_port $server_port ${_extra_param} > $config_file
@@ -666,7 +675,7 @@ run_socks() {
# http to socks
[ -z "$http_flag" ] && [ "$http_port" != "0" ] && [ -n "$http_config_file" ] && [ "$type" != "sing-box" ] && [ "$type" != "xray" ] && [ "$type" != "socks" ] && {
- local bin=$(first_type $(config_t_get global_app singbox_file) sing-box)
+ local bin=$(first_type $(config_t_get global_app sing_box_file) sing-box)
if [ -n "$bin" ]; then
type="sing-box"
lua $UTIL_SINGBOX gen_proto_config -local_http_port $http_port -server_proto socks -server_address "127.0.0.1" -server_port $socks_port -server_username $_username -server_password $_password > $http_config_file
@@ -688,9 +697,17 @@ socks_node_switch() {
local flag new_node
eval_set_val $@
[ -n "$flag" ] && [ -n "$new_node" ] && {
+ local prefix pf filename
+ # 结束 SS 插件进程
+ for prefix in "" "HTTP_"; do
+ pf="$TMP_PATH/${prefix}SOCKS_${flag}_plugin.pid"
+ [ -s "$pf" ] && kill -9 "$(head -n1 "$pf")" >/dev/null 2>&1
+ done
+
pgrep -af "$TMP_BIN_PATH" | awk -v P1="${flag}" 'BEGIN{IGNORECASE=1}$0~P1 && !/acl\/|acl_/{print $1}' | xargs kill -9 >/dev/null 2>&1
- rm -rf $TMP_PATH/SOCKS_${flag}*
- rm -rf $TMP_PATH/HTTP2SOCKS_${flag}*
+ for prefix in "" "HTTP_" "HTTP2"; do
+ rm -rf "$TMP_PATH/${prefix}SOCKS_${flag}"*
+ done
for filename in $(ls ${TMP_SCRIPT_FUNC_PATH}); do
cmd=$(cat ${TMP_SCRIPT_FUNC_PATH}/${filename})
@@ -1312,7 +1329,15 @@ stop() {
eval_cache_var
[ -n "$USE_TABLES" ] && source $APP_PATH/${USE_TABLES}.sh stop
delete_ip2route
- kill_all xray-plugin v2ray-plugin obfs-local shadow-tls
+ # 结束 SS 插件进程
+ # kill_all xray-plugin v2ray-plugin obfs-local shadow-tls
+ local pid_file pid
+ find "$TMP_PATH" -type f -name '*_plugin.pid' | while read -r pid_file; do
+ read -r pid < "$pid_file"
+ if [ -n "$pid" ]; then
+ kill -9 "$pid" >/dev/null 2>&1
+ fi
+ done
pgrep -f "sleep.*(6s|9s|58s)" | xargs kill -9 >/dev/null 2>&1
pgrep -af "${CONFIG}/" | awk '! /app\.sh|subscribe\.lua|rule_update\.lua|tasks\.sh|ujail/{print $1}' | xargs kill -9 >/dev/null 2>&1
unset V2RAY_LOCATION_ASSET
@@ -1402,7 +1427,7 @@ get_config() {
set_cache_var GLOBAL_DNSMASQ_CONF_PATH ${GLOBAL_ACL_PATH}/dnsmasq.d
XRAY_BIN=$(first_type $(config_t_get global_app xray_file) xray)
- SINGBOX_BIN=$(first_type $(config_t_get global_app singbox_file) sing-box)
+ SINGBOX_BIN=$(first_type $(config_t_get global_app sing_box_file) sing-box)
}
arg1=$1
diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh b/small/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh
index 709a21bfd3..dfb53da9d6 100755
--- a/small/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh
+++ b/small/luci-app-passwall2/root/usr/share/passwall2/haproxy_check.sh
@@ -1,13 +1,19 @@
#!/bin/sh
export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
+CONFIG=passwall2
listen_address=$1
listen_port=$2
server_address=$3
server_port=$4
-probe_file="/tmp/etc/passwall2/haproxy/Probe_URL"
+pgrep -af "${CONFIG}/" | awk '/app\.sh.*(start|stop)/ || /nftables\.sh/ || /iptables\.sh/ { found = 1 } END { exit !found }' && {
+ # 特定任务执行中不检测
+ exit 0
+}
+
+probe_file="/tmp/etc/${CONFIG}/haproxy/Probe_URL"
probeUrl="https://www.google.com/generate_204"
if [ -f "$probe_file" ]; then
firstLine=$(head -n 1 "$probe_file" | tr -d ' \t\n')
@@ -19,7 +25,7 @@ if /usr/bin/curl --help all | grep -q "\-\-retry-all-errors"; then
extra_params="${extra_params} --retry-all-errors"
fi
-status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout 3 --retry 1 --max-time 10 -w "%{http_code}" "${probeUrl}")
+status=$(/usr/bin/curl -I -o /dev/null -skL ${extra_params} --connect-timeout 3 --retry 2 --max-time 10 -w "%{http_code}" "${probeUrl}")
case "$status" in
200|204)
diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh b/small/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
index 85d81353fb..4434d8f2fb 100755
--- a/small/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
+++ b/small/luci-app-passwall2/root/usr/share/passwall2/socks_auto_switch.sh
@@ -64,9 +64,12 @@ test_node() {
/usr/share/${CONFIG}/app.sh run_socks flag="test_node_${node_id}" node=${node_id} bind=127.0.0.1 socks_port=${_tmp_port} config_file=test_node_${node_id}.json
local curlx="socks5h://127.0.0.1:${_tmp_port}"
sleep 1s
+ # 结束 SS 插件进程
+ local pid_file="/tmp/etc/${CONFIG}/test_node_${node_id}_plugin.pid"
+ [ -s "$pid_file" ] && kill -9 "$(head -n 1 "$pid_file")" >/dev/null 2>&1
_proxy_status=$(test_url "${probe_url}" ${retry_num} ${connect_timeout} "-x $curlx")
pgrep -af "test_node_${node_id}" | awk '! /socks_auto_switch\.sh/{print $1}' | xargs kill -9 >/dev/null 2>&1
- rm -rf "/tmp/etc/${CONFIG}/test_node_${node_id}.json"
+ rm -rf /tmp/etc/${CONFIG}/test_node_${node_id}*.*
if [ "${_proxy_status}" -eq 200 ]; then
return 0
fi
@@ -168,6 +171,11 @@ start() {
sleep 6s
continue
}
+ pgrep -af "${CONFIG}/" | awk '/app\.sh.*(start|stop)/ || /nftables\.sh/ || /iptables\.sh/ { found = 1 } END { exit !found }' && {
+ # 特定任务执行中不检测
+ sleep 6s
+ continue
+ }
touch $LOCK_FILE
backup_node=$(echo $backup_node | tr -s ' ' '\n' | uniq | tr -s '\n' ' ')
test_auto_switch "$backup_node"
diff --git a/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua b/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
index a309eb905a..25754a664b 100755
--- a/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
+++ b/small/luci-app-passwall2/root/usr/share/passwall2/subscribe.lua
@@ -23,6 +23,7 @@ uci:revert(appname)
local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
+local has_ssr = api.is_finded("ssr-local") and api.is_finded("ssr-redir")
local has_singbox = api.finded_com("sing-box")
local has_xray = api.finded_com("xray")
local has_hysteria2 = api.finded_com("hysteria")
@@ -273,7 +274,7 @@ do
if node.balancing_node then
for k, node in pairs(node.balancing_node) do
currentNodes[#currentNodes + 1] = {
- log = false,
+ log = true,
node = node,
currentNode = node and uci:get_all(appname, node) or nil,
remarks = node,
@@ -321,7 +322,7 @@ do
if node.urltest_node then
for k, node in pairs(node.urltest_node) do
currentNodes[#currentNodes + 1] = {
- log = false,
+ log = true,
node = node,
currentNode = node and uci:get_all(appname, node) or nil,
remarks = node,
@@ -440,6 +441,10 @@ local function processData(szType, content, add_mode, add_from)
}
--ssr://base64(host:port:protocol:method:obfs:base64pass/?obfsparam=base64param&protoparam=base64param&remarks=base64remarks&group=base64group&udpport=0&uot=0)
if szType == 'ssr' then
+ if not has_ssr then
+ log("跳过 SSR 节点,因未安装 SSR 核心程序 shadowsocksr-libev。")
+ return nil
+ end
result.type = "SSR"
local dat = split(content, "/%?")
@@ -466,17 +471,13 @@ local function processData(szType, content, add_mode, add_from)
result.remarks = base64Decode(params.remarks)
elseif szType == 'vmess' then
local info = jsonParse(content)
- if has_singbox then
- result.type = 'sing-box'
- end
- if has_xray then
- result.type = 'Xray'
- end
if vmess_type_default == "sing-box" and has_singbox then
result.type = 'sing-box'
- end
- if vmess_type_default == "xray" and has_xray then
+ elseif vmess_type_default == "xray" and has_xray then
result.type = "Xray"
+ else
+ log("跳过 VMess 节点,因未适配到 VMess 核心程序,或未正确设置节点使用类型。")
+ return nil
end
result.alter_id = info.aid
result.address = info.add
@@ -593,7 +594,21 @@ local function processData(szType, content, add_mode, add_from)
return nil
end
elseif szType == "ss" then
- result.type = "SS"
+ if ss_type_default == "shadowsocks-libev" and has_ss then
+ result.type = "SS"
+ elseif ss_type_default == "shadowsocks-rust" and has_ss_rust then
+ result.type = 'SS-Rust'
+ elseif ss_type_default == "xray" and has_xray then
+ result.type = 'Xray'
+ result.protocol = 'shadowsocks'
+ result.transport = 'raw'
+ elseif ss_type_default == "sing-box" and has_singbox then
+ result.type = 'sing-box'
+ result.protocol = 'shadowsocks'
+ else
+ log("跳过 SS 节点,因未适配到 SS 核心程序,或未正确设置节点使用类型。")
+ return nil
+ end
--SS-URI = "ss://" userinfo "@" hostname ":" port [ "/" ] [ "?" plugin ] [ "#" tag ]
--userinfo = websafe-base64-encode-utf8(method ":" password)
@@ -623,8 +638,7 @@ local function processData(szType, content, add_mode, add_from)
local idx_pn = plugin_info:find(";")
if idx_pn then
result.plugin = plugin_info:sub(1, idx_pn - 1)
- result.plugin_opts =
- plugin_info:sub(idx_pn + 1, #plugin_info)
+ result.plugin_opts = plugin_info:sub(idx_pn + 1, #plugin_info)
else
result.plugin = plugin_info
end
@@ -681,19 +695,6 @@ local function processData(szType, content, add_mode, add_from)
result.method = method
result.password = password
- if ss_type_default == "shadowsocks-rust" and has_ss_rust then
- result.type = 'SS-Rust'
- end
- if ss_type_default == "xray" and has_xray then
- result.type = 'Xray'
- result.protocol = 'shadowsocks'
- result.transport = 'raw'
- end
- if ss_type_default == "sing-box" and has_singbox then
- result.type = 'sing-box'
- result.protocol = 'shadowsocks'
- end
-
if result.type ~= "Xray" then
result.method = (method:lower() == "chacha20-poly1305" and "chacha20-ietf-poly1305") or
(method:lower() == "xchacha20-poly1305" and "xchacha20-ietf-poly1305") or method
@@ -722,8 +723,7 @@ local function processData(szType, content, add_mode, add_from)
result.plugin = nil
result.plugin_opts = nil
end
- end
- if result.type == "sing-box" then
+ else
result.plugin_enabled = "1"
end
end
@@ -822,11 +822,17 @@ local function processData(szType, content, add_mode, add_from)
result.utls = "1"
result.fingerprint = params.fp
end
+ if params.ech and params.ech ~= "" then
+ result.ech = "1"
+ result.ech_config = params.ech
+ end
if params.security == "reality" then
result.reality = "1"
result.reality_publicKey = params.pbk or nil
result.reality_shortId = params.sid or nil
result.reality_spiderX = params.spx or nil
+ result.use_mldsa65Verify = (params.pqv and params.pqv ~= "") and "1" or nil
+ result.reality_mldsa65Verify = params.pqv or nil
end
end
params.allowinsecure = params.allowinsecure or params.insecure
@@ -863,6 +869,7 @@ local function processData(szType, content, add_mode, add_from)
end
if result.type == "SS-Rust" then
+ result.plugin_enabled = "1"
result.plugin = "shadow-tls"
result.plugin_opts = parseShadowTLSParams(params["shadow-tls"])
elseif result.type == "sing-box" then
@@ -885,10 +892,15 @@ local function processData(szType, content, add_mode, add_from)
elseif szType == "trojan" then
if trojan_type_default == "sing-box" and has_singbox then
result.type = 'sing-box'
+ result.protocol = 'trojan'
elseif trojan_type_default == "xray" and has_xray then
result.type = 'Xray'
+ result.protocol = 'trojan'
+ else
+ log("跳过 Trojan 节点,因未适配到 Trojan 核心程序,或未正确设置节点使用类型。")
+ return nil
end
- result.protocol = 'trojan'
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1049,17 +1061,13 @@ local function processData(szType, content, add_mode, add_from)
result.group = content.airport
result.remarks = content.remarks
elseif szType == "vless" then
- if has_singbox then
- result.type = 'sing-box'
- end
- if has_xray then
- result.type = 'Xray'
- end
if vless_type_default == "sing-box" and has_singbox then
result.type = 'sing-box'
- end
- if vless_type_default == "xray" and has_xray then
+ elseif vless_type_default == "xray" and has_xray then
result.type = "Xray"
+ else
+ log("跳过 VLESS 节点,因未适配到 VLESS 核心程序,或未正确设置节点使用类型。")
+ return nil
end
result.protocol = "vless"
local alias = ""
@@ -1197,11 +1205,17 @@ local function processData(szType, content, add_mode, add_from)
result.utls = "1"
result.fingerprint = params.fp
end
+ if params.ech and params.ech ~= "" then
+ result.ech = "1"
+ result.ech_config = params.ech
+ end
if params.security == "reality" then
result.reality = "1"
result.reality_publicKey = params.pbk or nil
result.reality_shortId = params.sid or nil
result.reality_spiderX = params.spx or nil
+ result.use_mldsa65Verify = (params.pqv and params.pqv ~= "") and "1" or nil
+ result.reality_mldsa65Verify = params.pqv or nil
end
end
@@ -1220,6 +1234,14 @@ local function processData(szType, content, add_mode, add_from)
end
end
elseif szType == 'hysteria' then
+ if has_singbox then
+ result.type = 'sing-box'
+ result.protocol = "hysteria"
+ else
+ log("跳过 Hysteria 节点,因未安装 Hysteria 核心程序 Sing-box。")
+ return nil
+ end
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1267,10 +1289,6 @@ local function processData(szType, content, add_mode, add_from)
result.hysteria_down_mbps = params.downmbps
result.hysteria_hop = params.mport
- if has_singbox then
- result.type = 'sing-box'
- result.protocol = "hysteria"
- end
elseif szType == 'hysteria2' or szType == 'hy2' then
local alias = ""
if content:find("#") then
@@ -1330,8 +1348,19 @@ local function processData(szType, content, add_mode, add_from)
if params["obfs-password"] or params["obfs_password"] then
result.hysteria2_obfs = params["obfs-password"] or params["obfs_password"]
end
+ else
+ log("跳过 Hysteria2 节点,因未适配到 Hysteria2 核心程序,或未正确设置节点使用类型。")
+ return nil
end
elseif szType == 'tuic' then
+ if has_singbox then
+ result.type = 'sing-box'
+ result.protocol = "tuic"
+ else
+ log("跳过 Tuic 节点,因未安装 Tuic 核心程序 Sing-box。")
+ return nil
+ end
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1384,11 +1413,15 @@ local function processData(szType, content, add_mode, add_from)
else
result.tls_allowInsecure = allowInsecure_default and "1" or "0"
end
- result.type = 'sing-box'
- result.protocol = "tuic"
elseif szType == "anytls" then
- result.type = 'sing-box'
- result.protocol = "anytls"
+ if has_singbox then
+ result.type = 'sing-box'
+ result.protocol = "anytls"
+ else
+ log("跳过 AnyTLS 节点,因未安装 AnyTLS 核心程序 Sing-box 1.12。")
+ return nil
+ end
+
local alias = ""
if content:find("#") then
local idx_sp = content:find("#")
@@ -1422,9 +1455,12 @@ local function processData(szType, content, add_mode, add_from)
result.address = host_port
end
result.tls = "0"
+ if (not params.security or params.security == "") and params.sni and params.sni ~= "" then
+ params.security = "tls"
+ end
if params.security == "tls" or params.security == "reality" then
result.tls = "1"
- result.tls_serverName = (params.sni and params.sni ~= "") and params.sni or params.host
+ result.tls_serverName = params.sni
result.alpn = params.alpn
if params.fp and params.fp ~= "" then
result.utls = "1"
@@ -1536,7 +1572,9 @@ local function select_node(nodes, config, parentConfig)
if config.currentNode[".name"] then
for index, node in pairs(nodes) do
if node[".name"] == config.currentNode[".name"] then
- log('更新【' .. config.remarks .. '】匹配节点:' .. node.remarks)
+ if config.log == nil or config.log == true then
+ log('更新【' .. config.remarks .. '】匹配节点:' .. node.remarks)
+ end
server = node[".name"]
break
end
@@ -1704,6 +1742,9 @@ local function update_node(manual)
for _, config in pairs(CONFIG) do
if config.currentNodes and #config.currentNodes > 0 then
+ if config.remarks and config.currentNodes[1].log ~= false then
+ log('----【' .. config.remarks .. '】----')
+ end
for kk, vv in pairs(config.currentNodes) do
select_node(nodes, vv, config)
end
@@ -1816,7 +1857,7 @@ local execute = function()
do
local subscribe_list = {}
local fail_list = {}
- if arg[2] then
+ if arg[2] ~= "all" then
string.gsub(arg[2], '[^' .. "," .. ']+', function(w)
subscribe_list[#subscribe_list + 1] = uci:get_all(appname, w) or {}
end)
@@ -1826,6 +1867,8 @@ local execute = function()
end)
end
+ local manual_sub = arg[3] == "manual"
+
for index, value in ipairs(subscribe_list) do
local cfgid = value[".name"]
local remark = value.remark
@@ -1893,8 +1936,7 @@ local execute = function()
local raw_data = api.trim(stdout)
local old_md5 = value.md5 or ""
local new_md5 = luci.sys.exec("md5sum " .. tmp_file .. " 2>/dev/null | awk '{print $1}'"):gsub("\n", "")
- os.remove(tmp_file)
- if old_md5 == new_md5 then
+ if not manual_sub and old_md5 == new_md5 then
log('订阅:【' .. remark .. '】没有变化,无需更新。')
else
parse_link(raw_data, "2", remark, cfgid)
@@ -1905,6 +1947,7 @@ local execute = function()
end
end
allowInsecure_default = true
+ luci.sys.call("rm -f " .. tmp_file)
filter_keyword_mode_default = uci:get(appname, "@global_subscribe[0]", "filter_keyword_mode") or "0"
filter_keyword_discard_list_default = uci:get(appname, "@global_subscribe[0]", "filter_discard_list") or {}
filter_keyword_keep_list_default = uci:get(appname, "@global_subscribe[0]", "filter_keep_list") or {}
@@ -1932,7 +1975,7 @@ if arg[1] then
log(debug.traceback())
log('发生错误, 正在恢复服务')
end)
- log('订阅完毕...')
+ log('订阅完毕...\n')
elseif arg[1] == "add" then
local f = assert(io.open("/tmp/links.conf", 'r'))
local raw = f:read('*all')
diff --git a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua
index 95aad5832a..a5d7c4d21f 100644
--- a/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua
+++ b/small/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua
@@ -344,78 +344,89 @@ o.rmempty = false
-- [[ fragmen Settings ]]--
if is_finded("xray") then
-s = m:section(TypedSection, "global_xray_fragment", translate("Xray Fragment Settings"))
-s.anonymous = true
+ s = m:section(TypedSection, "global_xray_fragment", translate("Xray Fragment Settings"))
+ s.anonymous = true
-o = s:option(Flag, "fragment", translate("Fragment"), translate("TCP fragments, which can deceive the censorship system in some cases, such as bypassing SNI blacklists."))
-o.default = 0
+ o = s:option(Flag, "fragment", translate("Fragment"), translate("TCP fragments, which can deceive the censorship system in some cases, such as bypassing SNI blacklists."))
+ o.default = 0
-o = s:option(ListValue, "fragment_packets", translate("Fragment Packets"), translate("\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 data writes by the client. \"tlshello\" is for TLS client hello packet fragmentation."))
-o.default = "tlshello"
-o:value("tlshello", "tlshello")
-o:value("1-1", "1-1")
-o:value("1-2", "1-2")
-o:value("1-3", "1-3")
-o:value("1-5", "1-5")
-o:depends("fragment", true)
+ o = s:option(ListValue, "fragment_packets", translate("Fragment Packets"), translate("\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 data writes by the client. \"tlshello\" is for TLS client hello packet fragmentation."))
+ o.default = "tlshello"
+ o:value("tlshello", "tlshello")
+ o:value("1-1", "1-1")
+ o:value("1-2", "1-2")
+ o:value("1-3", "1-3")
+ o:value("1-5", "1-5")
+ o:depends("fragment", true)
-o = s:option(Value, "fragment_length", translate("Fragment Length"), translate("Fragmented packet length (byte)"))
-o.default = "100-200"
-o:depends("fragment", true)
+ o = s:option(Value, "fragment_length", translate("Fragment Length"), translate("Fragmented packet length (byte)"))
+ o.default = "100-200"
+ o:depends("fragment", true)
-o = s:option(Value, "fragment_interval", translate("Fragment Interval"), translate("Fragmentation interval (ms)"))
-o.default = "10-20"
-o:depends("fragment", true)
+ o = s:option(Value, "fragment_interval", translate("Fragment Interval"), translate("Fragmentation interval (ms)"))
+ o.default = "10-20"
+ o:depends("fragment", true)
-o = s:option(Flag, "noise", translate("Noise"), translate("UDP noise, Under some circumstances it can bypass some UDP based protocol restrictions."))
-o.default = 0
+ o = s:option(Value, "fragment_maxsplit", translate("Fragment maxSplit"), translate("Fragmented maxSplit (byte)"))
+ o.default = "100-200"
+ o:depends("fragment", true)
-s = m:section(TypedSection, "xray_noise_packets", translate("Xray Noise Packets"))
-s.description = translate(
- "" .. translate("To send noise packets, select \"Noise\" in Xray Settings.") .. "" ..
- " " .. translate("For specific usage, see:") .. "" ..
- "" ..
- "" .. translate("Click to the page") .. "")
-s.template = "cbi/tblsection"
-s.sortable = true
-s.anonymous = true
-s.addremove = true
+ o = s:option(Flag, "noise", translate("Noise"), translate("UDP noise, Under some circumstances it can bypass some UDP based protocol restrictions."))
+ o.default = 0
-s.remove = function(self, section)
- for k, v in pairs(self.children) do
- v.rmempty = true
- v.validate = nil
+ s = m:section(TypedSection, "xray_noise_packets", translate("Xray Noise Packets"))
+ s.description = translate(
+ "" .. translate("To send noise packets, select \"Noise\" in Xray Settings.") .. "" ..
+ " " .. translate("For specific usage, see:") .. "" ..
+ "" ..
+ "" .. translate("Click to the page") .. "")
+ s.template = "cbi/tblsection"
+ s.sortable = true
+ s.anonymous = true
+ s.addremove = true
+
+ s.remove = function(self, section)
+ for k, v in pairs(self.children) do
+ v.rmempty = true
+ v.validate = nil
+ end
+ TypedSection.remove(self, section)
end
- TypedSection.remove(self, section)
-end
-o = s:option(Flag, "enabled", translate("Enable"))
-o.default = 1
-o.rmempty = false
+ o = s:option(Flag, "enabled", translate("Enable"))
+ o.default = 1
+ o.rmempty = false
-o = s:option(ListValue, "type", translate("Type"))
-o.default = "base64"
-o:value("rand", "rand")
-o:value("str", "str")
-o:value("hex", "hex")
-o:value("base64", "base64")
+ o = s:option(ListValue, "type", translate("Type"))
+ o.default = "base64"
+ o:value("rand", "rand")
+ o:value("str", "str")
+ o:value("hex", "hex")
+ o:value("base64", "base64")
-o = s:option(Value, "domainStrategy", translate("Domain Strategy"))
-o.default = "UseIP"
-o:value("AsIs", "AsIs")
-o:value("UseIP", "UseIP")
-o:value("UseIPv4", "UseIPv4")
-o:value("ForceIP", "ForceIP")
-o:value("ForceIPv4", "ForceIPv4")
-o.rmempty = false
+ o = s:option(Value, "domainStrategy", translate("Domain Strategy"))
+ o.default = "UseIP"
+ o:value("AsIs", "AsIs")
+ o:value("UseIP", "UseIP")
+ o:value("UseIPv4", "UseIPv4")
+ o:value("ForceIP", "ForceIP")
+ o:value("ForceIPv4", "ForceIPv4")
+ o.rmempty = false
-o = s:option(Value, "packet", translate("Packet"))
-o.datatype = "minlength(1)"
-o.rmempty = false
+ o = s:option(Value, "packet", translate("Packet"))
+ o.datatype = "minlength(1)"
+ o.rmempty = false
-o = s:option(Value, "delay", translate("Delay (ms)"))
-o.datatype = "or(uinteger,portrange)"
-o.rmempty = false
+ o = s:option(Value, "delay", translate("Delay (ms)"))
+ o.datatype = "or(uinteger,portrange)"
+ o.rmempty = false
+
+ o = s:option(Value, "applyto", translate("ApplyTo (IP type)"))
+ o.default = "IP"
+ o:value("IP", "IP")
+ o:value("IPV4", "IPv4")
+ o:value("IPV6", "IPv6")
+ o.rmempty = false
end
return m
diff --git a/small/luci-app-ssr-plus/po/templates/ssr-plus.pot b/small/luci-app-ssr-plus/po/templates/ssr-plus.pot
index 7ad8e5a91a..55f7c2a168 100644
--- a/small/luci-app-ssr-plus/po/templates/ssr-plus.pot
+++ b/small/luci-app-ssr-plus/po/templates/ssr-plus.pot
@@ -64,7 +64,7 @@ msgstr ""
msgid "8 Threads"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:379
msgid ""
msgstr ""
@@ -173,6 +173,10 @@ msgstr ""
msgid "Apply"
msgstr ""
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:424
+msgid "ApplyTo (IP type)"
+msgstr ""
+
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/backup_restore.htm:133
msgid "Are you sure you want to restore the client to default settings?"
msgstr ""
@@ -313,7 +317,7 @@ msgstr ""
msgid "Click here to view or manage the DNS list file"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:378
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:382
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:833
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1138
msgid "Click to the page"
@@ -477,7 +481,7 @@ msgid ""
"fastest_addr (default: load_balance)."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:416
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:420
msgid "Delay (ms)"
msgstr ""
@@ -542,7 +546,7 @@ msgstr ""
msgid "DoT upstream (Need use wolfssl version)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:403
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:407
msgid "Domain Strategy"
msgstr ""
@@ -568,7 +572,7 @@ msgid "Edit ShadowSocksR Server"
msgstr ""
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:263
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:392
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:396
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:82
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
msgid "Enable"
@@ -741,7 +745,7 @@ msgid ""
"Chinese CDN IP addresses"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:376
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:380
msgid "For specific usage, see:"
msgstr ""
@@ -771,10 +775,18 @@ msgstr ""
msgid "Fragment Packets"
msgstr ""
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+msgid "Fragment maxSplit"
+msgstr ""
+
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:366
msgid "Fragmentation interval (ms)"
msgstr ""
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+msgid "Fragmented maxSplit (byte)"
+msgstr ""
+
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:362
msgid "Fragmented packet length (byte)"
msgstr ""
@@ -1223,7 +1235,7 @@ msgstr ""
msgid "No specify upload file."
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:374
msgid "Noise"
msgstr ""
@@ -1323,7 +1335,7 @@ msgstr ""
msgid "Oversea Mode DNS-2 (114.114.115.115)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:412
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:416
msgid "Packet"
msgstr ""
@@ -1857,7 +1869,7 @@ msgstr ""
msgid "Tips: Dnsproxy DNS Parse List Path:"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:379
msgid "To send noise packets, select \"Noise\" in Xray Settings."
msgstr ""
@@ -1878,7 +1890,7 @@ msgstr ""
msgid "Trojan"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:396
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:400
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:185
msgid "Type"
msgstr ""
@@ -1887,7 +1899,7 @@ msgstr ""
msgid "UDP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:374
msgid ""
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
"restrictions."
@@ -2160,7 +2172,7 @@ msgstr ""
msgid "Xray Fragment Settings"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:377
msgid "Xray Noise Packets"
msgstr ""
diff --git a/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
index c96ef4af3f..ee2ff59964 100644
--- a/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
+++ b/small/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po
@@ -66,7 +66,7 @@ msgstr ""
msgid "8 Threads"
msgstr "8 线程"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:379
msgid ""
msgstr ""
@@ -175,6 +175,10 @@ msgstr "Apple 域名解析优化"
msgid "Apply"
msgstr "应用"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:424
+msgid "ApplyTo (IP type)"
+msgstr "ApplyTo(IP 类型)"
+
#: applications/luci-app-ssr-plus/luasrc/view/shadowsocksr/backup_restore.htm:133
msgid "Are you sure you want to restore the client to default settings?"
msgstr "是否真的要恢复客户端默认配置?"
@@ -315,7 +319,7 @@ msgstr "清空日志"
msgid "Click here to view or manage the DNS list file"
msgstr "点击此处查看或管理 DNS 列表文件"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:378
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:382
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:833
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua:1138
msgid "Click to the page"
@@ -487,7 +491,7 @@ msgstr ""
"定义上游逻辑模式,可选择值:负载均衡、并行查询、最快响应(默认值:负载均"
"衡)。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:416
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:420
msgid "Delay (ms)"
msgstr "延迟(ms)"
@@ -552,7 +556,7 @@ msgstr "是否要恢复客户端默认配置?"
msgid "DoT upstream (Need use wolfssl version)"
msgstr "DoT 上游(需使用 wolfssl 版本)"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:403
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:407
msgid "Domain Strategy"
msgstr "域名解析策略"
@@ -578,7 +582,7 @@ msgid "Edit ShadowSocksR Server"
msgstr "编辑服务器配置"
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:263
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:392
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:396
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua:82
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua:101
msgid "Enable"
@@ -751,7 +755,7 @@ msgid ""
"Chinese CDN IP addresses"
msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:376
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:380
msgid "For specific usage, see:"
msgstr "具体使用方法,请参见:"
@@ -781,10 +785,18 @@ msgstr "分片包长"
msgid "Fragment Packets"
msgstr "分片方式"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+msgid "Fragment maxSplit"
+msgstr "分片数据包拆分"
+
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:366
msgid "Fragmentation interval (ms)"
msgstr "分片间隔(ms)"
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+msgid "Fragmented maxSplit (byte)"
+msgstr "分片数据包的拆分数量 (byte)"
+
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:362
msgid "Fragmented packet length (byte)"
msgstr "分片包长 (byte)"
@@ -1236,7 +1248,7 @@ msgstr "你已经是最新数据,无需更新!"
msgid "No specify upload file."
msgstr "没有上传证书。"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:374
msgid "Noise"
msgstr "噪声"
@@ -1336,7 +1348,7 @@ msgstr ""
msgid "Oversea Mode DNS-2 (114.114.115.115)"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:412
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:416
msgid "Packet"
msgstr "数据包"
@@ -1873,7 +1885,7 @@ msgstr "连接超时时间(单位:秒)"
msgid "Tips: Dnsproxy DNS Parse List Path:"
msgstr "提示:Dnsproxy 的 DNS 解析列表路径:"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:375
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:379
msgid "To send noise packets, select \"Noise\" in Xray Settings."
msgstr "在 Xray 设置中勾选 “噪声” 以发送噪声包。"
@@ -1894,7 +1906,7 @@ msgstr "传输协议"
msgid "Trojan"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:396
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:400
#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua:185
msgid "Type"
msgstr "类型"
@@ -1903,7 +1915,7 @@ msgstr "类型"
msgid "UDP"
msgstr ""
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:370
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:374
msgid ""
"UDP noise, Under some circumstances it can bypass some UDP based protocol "
"restrictions."
@@ -2178,7 +2190,7 @@ msgstr "XHTTP 路径"
msgid "Xray Fragment Settings"
msgstr "Xray 分片设置"
-#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:373
+#: applications/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua:377
msgid "Xray Noise Packets"
msgstr "Xray 噪声数据包"
diff --git a/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua b/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
index d5bc9804be..f919f72773 100755
--- a/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
+++ b/small/luci-app-ssr-plus/root/usr/share/shadowsocksr/gen_config.lua
@@ -338,13 +338,15 @@ if xray_fragment.fragment ~= "0" or (xray_fragment.noise ~= "0" and xray_noise.e
fragment = (xray_fragment.fragment == "1") and {
packets = (xray_fragment.fragment_packets ~= "") and xray_fragment.fragment_packets or nil,
length = (xray_fragment.fragment_length ~= "") and xray_fragment.fragment_length or nil,
- interval = (xray_fragment.fragment_interval ~= "") and xray_fragment.fragment_interval or nil
+ interval = (xray_fragment.fragment_interval ~= "") and xray_fragment.fragment_interval or nil,
+ maxSplit = (xray_fragment.fragment_maxsplit ~= "") and xray_fragment.fragment_maxsplit or nil
} or nil,
noises = (xray_fragment.noise == "1" and xray_noise.enabled == "1") and {
{
type = xray_noise.type,
packet = xray_noise.packet,
- delay = xray_noise.delay:find("-") and xray_noise.delay or tonumber(xray_noise.delay)
+ delay = xray_noise.delay:find("-") and xray_noise.delay or tonumber(xray_noise.delay),
+ applyTo = xray_noise.applyto
}
} or nil
},
diff --git a/small/nikki/files/nikki.conf b/small/nikki/files/nikki.conf
index 116ef3010c..75ba51a2f7 100644
--- a/small/nikki/files/nikki.conf
+++ b/small/nikki/files/nikki.conf
@@ -28,7 +28,7 @@ config proxy 'proxy'
option 'proxy_tcp_dport' '0-65535'
option 'proxy_udp_dport' '0-65535'
option 'tun_timeout' '30'
- option 'tun_inverval' '1'
+ option 'tun_interval' '1'
config subscription 'subscription'
option 'name' 'default'
diff --git a/v2rayng/README.md b/v2rayng/README.md
index 4bd6f8ecf4..af99cf4546 100644
--- a/v2rayng/README.md
+++ b/v2rayng/README.md
@@ -3,7 +3,7 @@
A V2Ray client for Android, support [Xray core](https://github.com/XTLS/Xray-core) and [v2fly core](https://github.com/v2fly/v2ray-core)
[](https://developer.android.com/about/versions/lollipop)
-[](https://kotlinlang.org)
+[](https://kotlinlang.org)
[](https://github.com/2dust/v2rayNG/commits/master)
[](https://www.codefactor.io/repository/github/2dust/v2rayng)
[](https://github.com/2dust/v2rayNG/releases)
diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt
index f7adb61ab0..3b57311446 100644
--- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt
+++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt
@@ -63,6 +63,8 @@ object AppConfig {
const val PREF_CHECK_UPDATE_PRE_RELEASE = "pref_check_update_pre_release"
const val PREF_GEO_FILES_SOURCES = "pref_geo_files_sources"
const val PREF_USE_HEV_TUNNEL = "pref_use_hev_tunnel"
+ const val PREF_HEV_TUNNEL_LOGLEVEL = "pref_hev_tunnel_loglevel"
+ const val PREF_HEV_TUNNEL_RW_TIMEOUT = "pref_hev_tunnel_rw_timeout"
/** Cache keys. */
const val CACHE_SUBSCRIPTION_ID = "cache_subscription_id"
@@ -166,6 +168,9 @@ object AppConfig {
const val VPN = "VPN"
const val VPN_MTU = 1500
+ /** hev-sock5-tunnel read-write-timeout value */
+ const val HEVTUN_RW_TIMEOUT = "300000"
+
// Google API rule constants
const val GOOGLEAPIS_CN_DOMAIN = "domain:googleapis.cn"
const val GOOGLEAPIS_COM_DOMAIN = "googleapis.com"
diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt
index 66370b8a3e..2e76435757 100644
--- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt
+++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/service/TProxyService.kt
@@ -72,12 +72,11 @@ class TProxyService(
appendLine(" address: ${AppConfig.LOOPBACK}")
appendLine(" udp: 'udp'")
- MmkvManager.decodeSettingsString(AppConfig.PREF_LOGLEVEL)?.let { logPref ->
- if (logPref != "none") {
- val logLevel = if (logPref == "warning") "warn" else logPref
- appendLine("misc:")
- appendLine(" log-level: $logLevel")
- }
+ appendLine("misc:")
+ appendLine(" read-write-timeout: ${MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT) ?: AppConfig.HEVTUN_RW_TIMEOUT}")
+ val hevTunLogLevel = MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL) ?: "none"
+ if (hevTunLogLevel != "none") {
+ appendLine(" log-level: $hevTunLogLevel")
}
}
}
diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt
index f0317b6f00..f465c7292c 100644
--- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt
+++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/ui/SettingsActivity.kt
@@ -66,6 +66,10 @@ class SettingsActivity : BaseActivity() {
private val delayTestUrl by lazy { findPreference(AppConfig.PREF_DELAY_TEST_URL) }
private val mode by lazy { findPreference(AppConfig.PREF_MODE) }
+ private val hevTunLogLevel by lazy { findPreference(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL) }
+ private val hevTunRwTimeout by lazy { findPreference(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT) }
+ private val useHevTun by lazy { findPreference(AppConfig.PREF_USE_HEV_TUNNEL) }
+
override fun onCreatePreferences(bundle: Bundle?, s: String?) {
addPreferencesFromResource(R.xml.pref_settings)
@@ -172,6 +176,16 @@ class SettingsActivity : BaseActivity() {
mode?.dialogLayoutResource = R.layout.preference_with_help_link
//loglevel.summary = "LogLevel"
+ useHevTun?.setOnPreferenceChangeListener { _, newValue ->
+ updateHevTunSettings(newValue as Boolean)
+ true
+ }
+
+ hevTunRwTimeout?.setOnPreferenceChangeListener { _, any ->
+ val nval = any as String
+ hevTunRwTimeout?.summary = if (TextUtils.isEmpty(nval)) AppConfig.HEVTUN_RW_TIMEOUT else nval
+ true
+ }
}
override fun onStart() {
@@ -205,6 +219,9 @@ class SettingsActivity : BaseActivity() {
dnsHosts?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DNS_HOSTS)
delayTestUrl?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL, AppConfig.DELAY_TEST_URL)
+ updateHevTunSettings(MmkvManager.decodeSettingsBool(AppConfig.PREF_USE_HEV_TUNNEL, false))
+ hevTunRwTimeout?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT, AppConfig.HEVTUN_RW_TIMEOUT)
+
initSharedPreference()
}
@@ -220,7 +237,8 @@ class SettingsActivity : BaseActivity() {
socksPort,
remoteDns,
domesticDns,
- delayTestUrl
+ delayTestUrl,
+ hevTunRwTimeout
).forEach { key ->
key?.text = key?.summary.toString()
}
@@ -260,7 +278,8 @@ class SettingsActivity : BaseActivity() {
AppConfig.PREF_LOGLEVEL,
AppConfig.PREF_OUTBOUND_DOMAIN_RESOLVE_METHOD,
AppConfig.PREF_INTELLIGENT_SELECTION_METHOD,
- AppConfig.PREF_MODE
+ AppConfig.PREF_MODE,
+ AppConfig.PREF_HEV_TUNNEL_LOGLEVEL
).forEach { key ->
if (MmkvManager.decodeSettingsString(key) != null) {
findPreference(key)?.value = MmkvManager.decodeSettingsString(key)
@@ -366,6 +385,11 @@ class SettingsActivity : BaseActivity() {
private fun updateFragmentInterval(value: String?) {
fragmentInterval?.summary = value.toString()
}
+
+ private fun updateHevTunSettings(enabled: Boolean) {
+ hevTunLogLevel?.isEnabled = enabled
+ hevTunRwTimeout?.isEnabled = enabled
+ }
}
fun onModeHelpClicked(view: View) {
diff --git a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt
index 0001ad0564..fee9a80f20 100644
--- a/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt
+++ b/v2rayng/V2rayNG/app/src/main/java/com/v2ray/ang/viewmodel/SettingsViewModel.kt
@@ -59,6 +59,8 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
AppConfig.PREF_FRAGMENT_LENGTH,
AppConfig.PREF_FRAGMENT_INTERVAL,
AppConfig.PREF_MUX_XUDP_QUIC,
+ AppConfig.PREF_HEV_TUNNEL_LOGLEVEL,
+ AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT
-> {
MmkvManager.encodeSettings(key, sharedPreferences.getString(key, ""))
}
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml
index 278ee7387b..181b6f4541 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-ar/strings.xml
@@ -249,6 +249,8 @@
إعدادات وضع واجهة المستخدم ليلاًEnable New TUN FeatureWhen enabled, TUN will use hev-socks5-tunnel; otherwise, it will use badvpn-tun2socks.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)Logcatنسخ
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml
index c717b5f75e..58567af1b2 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-bn/strings.xml
@@ -250,6 +250,8 @@
ইউআই মোড সেটিংসEnable New TUN FeatureWhen enabled, TUN will use hev-socks5-tunnel; otherwise, it will use badvpn-tun2socks.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)লগক্যাটকপি করুন
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
index 830dac26ca..e7b8416f06 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml
@@ -250,6 +250,8 @@
سامووا هالت رابت منتوریفعال کردن ویژیی نۊ TUNمجالی ک فعال بۊ، TUN ، hev-socks5-tunnel ن و کار اگره؛ ٱر چینووݩ نبۊ و جاس badvpn-tun2socks و کار گرؽڌه ابۊ.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)داسووالف گیری
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml
index f0c78546a9..944979eeb7 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-fa/strings.xml
@@ -247,6 +247,8 @@
تنظیمات حالت رابط کاربریفعالسازی قابلیت TUN جدیددر صورت فعال بودن، TUN از hev-socks5-tunnel استفاده میکند؛ در غیر این صورت از badvpn-tun2socks.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)گزارشاتکپی
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml
index 264d9738d3..7e3f11b0ac 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-ru/strings.xml
@@ -249,6 +249,8 @@
Тема интерфейсаИспользовать новую версию TUNЕсли включено, TUN будет использовать hev-socks5-tunnel; иначе будет использоваться badvpn-tun2socks.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)ЖурналКопировать
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml
index 62d9515fd6..15991f9485 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-vi/strings.xml
@@ -250,6 +250,8 @@
Cài đặt chế độ UIEnable New TUN FeatureWhen enabled, TUN will use hev-socks5-tunnel; otherwise, it will use badvpn-tun2socks.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)LogcatSao chép
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
index 5a4e51218d..9ea47e2407 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
@@ -247,6 +247,8 @@
界面颜色设置启用新的 TUN 功能选择启用后 TUN 将使用 hev-socks5-tunnel 否则使用 badvpn-tun2socks
+ HevTun 日志级别
+ HevTun 读写超时 (ms, 默认 300000)Logcat复制
diff --git a/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
index 72cf283aa0..a7510e483a 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
@@ -248,6 +248,8 @@
介面顯示模式啟用新 TUN 功能選擇啟用後,TUN 將使用 hev-socks5-tunnel,否則使用 badvpn-tun2socks。
+ HevTun 日誌級別
+ HevTun 讀寫逾時 (ms, 預設 300000)Logcat複製
diff --git a/v2rayng/V2rayNG/app/src/main/res/values/arrays.xml b/v2rayng/V2rayNG/app/src/main/res/values/arrays.xml
index 63ca4c6d75..7d49c8249d 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values/arrays.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values/arrays.xml
@@ -118,6 +118,13 @@
Proxy only
+
+ none
+ error
+ warn
+ debug
+
+
xtls-rprx-vision
diff --git a/v2rayng/V2rayNG/app/src/main/res/values/strings.xml b/v2rayng/V2rayNG/app/src/main/res/values/strings.xml
index 4a93fa9557..df3735904c 100644
--- a/v2rayng/V2rayNG/app/src/main/res/values/strings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/values/strings.xml
@@ -251,6 +251,8 @@
UI mode settingsEnable New TUN FeatureWhen enabled, TUN will use hev-socks5-tunnel; otherwise, it will use badvpn-tun2socks.
+ Hev Tun Log Level
+ Hev Tun Read/Write Timeout (ms, default 300000)LogcatCopy
diff --git a/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml b/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml
index c51c828122..99f35aee22 100644
--- a/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml
+++ b/v2rayng/V2rayNG/app/src/main/res/xml/pref_settings.xml
@@ -71,6 +71,25 @@
android:key="pref_vpn_interface_address_config_index"
android:summary="%s"
android:title="@string/title_pref_vpn_interface_address" />
+
+
+
+
+
+
@@ -256,11 +275,6 @@
android:summary="%s"
android:title="@string/title_mode" />
-
-
\ No newline at end of file
diff --git a/v2rayng/V2rayNG/gradle/libs.versions.toml b/v2rayng/V2rayNG/gradle/libs.versions.toml
index 75d217fd0b..aec0224b59 100644
--- a/v2rayng/V2rayNG/gradle/libs.versions.toml
+++ b/v2rayng/V2rayNG/gradle/libs.versions.toml
@@ -2,7 +2,7 @@
agp = "8.12.0"
desugarJdkLibs = "2.1.5"
gradleLicensePlugin = "0.9.8"
-kotlin = "2.1.21"
+kotlin = "2.2.0"
coreKtx = "1.16.0"
junit = "4.13.2"
junitVersion = "1.2.1"
@@ -11,7 +11,7 @@ appcompat = "1.7.1"
material = "1.12.0"
activity = "1.10.1"
constraintlayout = "2.2.1"
-mmkvStatic = "1.3.12"
+mmkvStatic = "1.3.14"
gson = "2.12.1"
quickieFoss = "1.14.0"
kotlinxCoroutinesAndroid = "1.10.2"
diff --git a/v2rayng/V2rayNG/gradle/wrapper/gradle-wrapper.properties b/v2rayng/V2rayNG/gradle/wrapper/gradle-wrapper.properties
index b2eeb9db50..116f5b742c 100644
--- a/v2rayng/V2rayNG/gradle/wrapper/gradle-wrapper.properties
+++ b/v2rayng/V2rayNG/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Thu Nov 14 12:42:51 BDT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/xray-core/app/proxyman/inbound/worker.go b/xray-core/app/proxyman/inbound/worker.go
index d490777c76..0e3483e1cd 100644
--- a/xray-core/app/proxyman/inbound/worker.go
+++ b/xray-core/app/proxyman/inbound/worker.go
@@ -91,6 +91,7 @@ func (w *tcpWorker) callback(conn stat.Connection) {
}
ctx = session.ContextWithInbound(ctx, &session.Inbound{
Source: net.DestinationFromAddr(conn.RemoteAddr()),
+ Local: net.DestinationFromAddr(conn.LocalAddr()),
Gateway: net.TCPDestination(w.address, w.port),
Tag: w.tag,
Conn: conn,
@@ -321,8 +322,10 @@ func (w *udpWorker) callback(b *buf.Buffer, source net.Destination, originalDest
outbounds[0].Target = originalDest
}
ctx = session.ContextWithOutbounds(ctx, outbounds)
+
ctx = session.ContextWithInbound(ctx, &session.Inbound{
Source: source,
+ Local: net.DestinationFromAddr(w.hub.Addr()),
Gateway: net.UDPDestination(w.address, w.port),
Tag: w.tag,
})
@@ -472,6 +475,7 @@ func (w *dsWorker) callback(conn stat.Connection) {
}
ctx = session.ContextWithInbound(ctx, &session.Inbound{
Source: net.DestinationFromAddr(conn.RemoteAddr()),
+ Local: net.DestinationFromAddr(conn.LocalAddr()),
Gateway: net.UnixDestination(w.address),
Tag: w.tag,
Conn: conn,
diff --git a/xray-core/app/router/command/command.pb.go b/xray-core/app/router/command/command.pb.go
index 6e388901e4..65bf3078b8 100644
--- a/xray-core/app/router/command/command.pb.go
+++ b/xray-core/app/router/command/command.pb.go
@@ -42,6 +42,8 @@ type RoutingContext struct {
Attributes map[string]string `protobuf:"bytes,10,rep,name=Attributes,proto3" json:"Attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
OutboundGroupTags []string `protobuf:"bytes,11,rep,name=OutboundGroupTags,proto3" json:"OutboundGroupTags,omitempty"`
OutboundTag string `protobuf:"bytes,12,opt,name=OutboundTag,proto3" json:"OutboundTag,omitempty"`
+ LocalIPs [][]byte `protobuf:"bytes,13,rep,name=LocalIPs,proto3" json:"LocalIPs,omitempty"`
+ LocalPort uint32 `protobuf:"varint,14,opt,name=LocalPort,proto3" json:"LocalPort,omitempty"`
}
func (x *RoutingContext) Reset() {
@@ -158,6 +160,20 @@ func (x *RoutingContext) GetOutboundTag() string {
return ""
}
+func (x *RoutingContext) GetLocalIPs() [][]byte {
+ if x != nil {
+ return x.LocalIPs
+ }
+ return nil
+}
+
+func (x *RoutingContext) GetLocalPort() uint32 {
+ if x != nil {
+ return x.LocalPort
+ }
+ return 0
+}
+
// SubscribeRoutingStatsRequest subscribes to routing statistics channel if
// opened by xray-core.
// * FieldSelectors selects a subset of fields in routing statistics to return.
@@ -827,7 +843,7 @@ var file_app_router_command_command_proto_rawDesc = []byte{
0x6d, 0x6f, 0x6e, 0x2f, 0x6e, 0x65, 0x74, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x73, 0x65,
0x72, 0x69, 0x61, 0x6c, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
- 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9c, 0x04, 0x0a, 0x0e, 0x52, 0x6f, 0x75,
+ 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x04, 0x0a, 0x0e, 0x52, 0x6f, 0x75,
0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x49,
0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0a, 0x49, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x12, 0x32, 0x0a, 0x07, 0x4e,
@@ -857,123 +873,127 @@ var file_app_router_command_command_proto_rawDesc = []byte{
0x03, 0x28, 0x09, 0x52, 0x11, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x47, 0x72, 0x6f,
0x75, 0x70, 0x54, 0x61, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75,
0x6e, 0x64, 0x54, 0x61, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x75, 0x74,
- 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x46, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x73, 0x63,
- 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64,
- 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22,
- 0xb1, 0x01, 0x0a, 0x10, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43,
- 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78,
- 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63,
- 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f,
- 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f,
- 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65,
- 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x46,
- 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x24, 0x0a,
- 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x22, 0x27, 0x0a, 0x13, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65,
- 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61,
- 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x26, 0x0a, 0x0c,
- 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
- 0x72, 0x67, 0x65, 0x74, 0x22, 0xa9, 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65,
- 0x72, 0x4d, 0x73, 0x67, 0x12, 0x41, 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70,
+ 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x49, 0x50, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x4c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x49, 0x50, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72,
+ 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f,
+ 0x72, 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x22, 0x46, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f,
+ 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64,
+ 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0xb1, 0x01, 0x0a, 0x10, 0x54, 0x65,
+ 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f,
+ 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70,
0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
- 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6f,
- 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x6e, 0x63,
- 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75,
- 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e,
- 0x63, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
- 0x0f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
- 0x22, 0x2a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49,
- 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61,
- 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x5b, 0x0a, 0x17,
- 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e,
- 0x63, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x72, 0x61, 0x79,
- 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
- 0x61, 0x6e, 0x64, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52,
- 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x1d, 0x4f, 0x76, 0x65,
- 0x72, 0x72, 0x69, 0x64, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61,
- 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0b, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61,
- 0x72, 0x67, 0x65, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
- 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6e, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66,
- 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x54, 0x79,
- 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66,
- 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x41, 0x70, 0x70, 0x65,
- 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
- 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x0a, 0x11, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18,
- 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x07, 0x72, 0x75, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f,
- 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08,
- 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x32, 0xbf, 0x05, 0x0a, 0x0e, 0x52, 0x6f, 0x75,
- 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x15, 0x53,
- 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53,
- 0x74, 0x61, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e,
- 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x53,
- 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53,
- 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x72,
+ 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52,
+ 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12,
+ 0x26, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x65,
+ 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x73, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d,
+ 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x27, 0x0a,
+ 0x13, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x26, 0x0a, 0x0c, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69,
+ 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0xa9,
+ 0x01, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x41,
+ 0x0a, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x25, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74,
+ 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72,
+ 0x69, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
+ 0x65, 0x12, 0x57, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x74,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x72,
0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f,
- 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e,
- 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74,
- 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70,
- 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e,
- 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x27, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74,
- 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69,
- 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x0f, 0x47,
- 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f,
- 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61,
- 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x30, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
- 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c,
+ 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x54,
+ 0x61, 0x72, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x6e, 0x63,
+ 0x69, 0x70, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x2a, 0x0a, 0x16, 0x47, 0x65,
+ 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x5b, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c,
0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01, 0x0a, 0x16, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
- 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x36,
+ 0x65, 0x12, 0x40, 0x0a, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72,
+ 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x42, 0x61,
+ 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4d, 0x73, 0x67, 0x52, 0x08, 0x62, 0x61, 0x6c, 0x61, 0x6e,
+ 0x63, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x1d, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x42,
+ 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72,
+ 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x6c, 0x61, 0x6e,
+ 0x63, 0x65, 0x72, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x20,
+ 0x0a, 0x1e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
+ 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x6e, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+ 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0c,
+ 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x0c, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64,
+ 0x22, 0x11, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6c, 0x65,
+ 0x54, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x54,
+ 0x61, 0x67, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x32, 0xbf, 0x05, 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x15, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
+ 0x62, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x35,
0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64,
- 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70,
- 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
- 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65,
- 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x5e, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x78,
- 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63,
- 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
+ 0x62, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70,
0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e,
- 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x67, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12,
- 0x2a, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
- 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x72,
- 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f,
- 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x67, 0x0a, 0x1b, 0x63, 0x6f,
- 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
- 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x69, 0x74,
- 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61,
- 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65,
- 0x72, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0xaa, 0x02, 0x17, 0x58, 0x72, 0x61, 0x79,
- 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
- 0x61, 0x6e, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00,
+ 0x30, 0x01, 0x12, 0x61, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12,
+ 0x29, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x6f,
+ 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x72, 0x61,
+ 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x74,
+ 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61,
+ 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
+ 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e,
+ 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x78, 0x72, 0x61, 0x79,
+ 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49,
+ 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8b, 0x01,
+ 0x0a, 0x16, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
+ 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x36, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
+ 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e,
+ 0x63, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x37, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74,
+ 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x72,
+ 0x69, 0x64, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65,
+ 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x07, 0x41,
+ 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70,
+ 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
+ 0x2e, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x28, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x41, 0x64, 0x64, 0x52, 0x75, 0x6c,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x67, 0x0a, 0x0a, 0x52,
+ 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x2a, 0x2e, 0x78, 0x72, 0x61, 0x79,
+ 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70,
+ 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e,
+ 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x00, 0x42, 0x67, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79,
+ 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65,
+ 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2f, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0xaa, 0x02, 0x17, 0x58, 0x72, 0x61, 0x79, 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x52,
+ 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/xray-core/app/router/command/command.proto b/xray-core/app/router/command/command.proto
index 756f8226cd..2a764b31fa 100644
--- a/xray-core/app/router/command/command.proto
+++ b/xray-core/app/router/command/command.proto
@@ -25,6 +25,8 @@ message RoutingContext {
map Attributes = 10;
repeated string OutboundGroupTags = 11;
string OutboundTag = 12;
+ repeated bytes LocalIPs = 13;
+ uint32 LocalPort = 14;
}
// SubscribeRoutingStatsRequest subscribes to routing statistics channel if
diff --git a/xray-core/app/router/command/config.go b/xray-core/app/router/command/config.go
index 8c2e134385..b5d677a622 100644
--- a/xray-core/app/router/command/config.go
+++ b/xray-core/app/router/command/config.go
@@ -28,6 +28,14 @@ func (c routingContext) GetTargetPort() net.Port {
return net.Port(c.RoutingContext.GetTargetPort())
}
+func (c routingContext) GetLocalIPs() []net.IP {
+ return mapBytesToIPs(c.RoutingContext.GetLocalIPs())
+}
+
+func (c routingContext) GetLocalPort() net.Port {
+ return net.Port(c.RoutingContext.GetLocalPort())
+}
+
func (c routingContext) GetRuleTag() string {
return ""
}
@@ -54,8 +62,10 @@ var fieldMap = map[string]func(*RoutingContext, routing.Route){
"network": func(s *RoutingContext, r routing.Route) { s.Network = r.GetNetwork() },
"ip_source": func(s *RoutingContext, r routing.Route) { s.SourceIPs = mapIPsToBytes(r.GetSourceIPs()) },
"ip_target": func(s *RoutingContext, r routing.Route) { s.TargetIPs = mapIPsToBytes(r.GetTargetIPs()) },
+ "ip_local": func(s *RoutingContext, r routing.Route) { s.LocalIPs = mapIPsToBytes(r.GetLocalIPs()) },
"port_source": func(s *RoutingContext, r routing.Route) { s.SourcePort = uint32(r.GetSourcePort()) },
"port_target": func(s *RoutingContext, r routing.Route) { s.TargetPort = uint32(r.GetTargetPort()) },
+ "port_local": func(s *RoutingContext, r routing.Route) { s.LocalPort = uint32(r.GetLocalPort()) },
"domain": func(s *RoutingContext, r routing.Route) { s.TargetDomain = r.GetTargetDomain() },
"protocol": func(s *RoutingContext, r routing.Route) { s.Protocol = r.GetProtocol() },
"user": func(s *RoutingContext, r routing.Route) { s.User = r.GetUser() },
diff --git a/xray-core/app/router/condition.go b/xray-core/app/router/condition.go
index 35e2424dc5..ea09a56051 100644
--- a/xray-core/app/router/condition.go
+++ b/xray-core/app/router/condition.go
@@ -113,10 +113,10 @@ func (m *DomainMatcher) Apply(ctx routing.Context) bool {
type MultiGeoIPMatcher struct {
matchers []*GeoIPMatcher
- onSource bool
+ asType string // local, source, target
}
-func NewMultiGeoIPMatcher(geoips []*GeoIP, onSource bool) (*MultiGeoIPMatcher, error) {
+func NewMultiGeoIPMatcher(geoips []*GeoIP, asType string) (*MultiGeoIPMatcher, error) {
var matchers []*GeoIPMatcher
for _, geoip := range geoips {
matcher, err := GlobalGeoIPContainer.Add(geoip)
@@ -128,7 +128,7 @@ func NewMultiGeoIPMatcher(geoips []*GeoIP, onSource bool) (*MultiGeoIPMatcher, e
matcher := &MultiGeoIPMatcher{
matchers: matchers,
- onSource: onSource,
+ asType: asType,
}
return matcher, nil
@@ -137,11 +137,18 @@ func NewMultiGeoIPMatcher(geoips []*GeoIP, onSource bool) (*MultiGeoIPMatcher, e
// Apply implements Condition.
func (m *MultiGeoIPMatcher) Apply(ctx routing.Context) bool {
var ips []net.IP
- if m.onSource {
+
+ switch m.asType {
+ case "local":
+ ips = ctx.GetLocalIPs()
+ case "source":
ips = ctx.GetSourceIPs()
- } else {
+ case "target":
ips = ctx.GetTargetIPs()
+ default:
+ panic("unreachable, asType should be local or source or target")
}
+
for _, ip := range ips {
for _, matcher := range m.matchers {
if matcher.Match(ip) {
@@ -153,25 +160,31 @@ func (m *MultiGeoIPMatcher) Apply(ctx routing.Context) bool {
}
type PortMatcher struct {
- port net.MemoryPortList
- onSource bool
+ port net.MemoryPortList
+ asType string // local, source, target
}
-// NewPortMatcher create a new port matcher that can match source or destination port
-func NewPortMatcher(list *net.PortList, onSource bool) *PortMatcher {
+// NewPortMatcher create a new port matcher that can match source or local or destination port
+func NewPortMatcher(list *net.PortList, asType string) *PortMatcher {
return &PortMatcher{
- port: net.PortListFromProto(list),
- onSource: onSource,
+ port: net.PortListFromProto(list),
+ asType: asType,
}
}
// Apply implements Condition.
func (v *PortMatcher) Apply(ctx routing.Context) bool {
- if v.onSource {
+ switch v.asType {
+ case "local":
+ return v.port.Contains(ctx.GetLocalPort())
+ case "source":
return v.port.Contains(ctx.GetSourcePort())
- } else {
+ case "target":
return v.port.Contains(ctx.GetTargetPort())
+ default:
+ panic("unreachable, asType should be local or source or target")
}
+
}
type NetworkMatcher struct {
diff --git a/xray-core/app/router/condition_test.go b/xray-core/app/router/condition_test.go
index 97d05db96b..a5e54770a8 100644
--- a/xray-core/app/router/condition_test.go
+++ b/xray-core/app/router/condition_test.go
@@ -495,7 +495,7 @@ func BenchmarkMultiGeoIPMatcher(b *testing.B) {
})
}
- matcher, err := NewMultiGeoIPMatcher(geoips, false)
+ matcher, err := NewMultiGeoIPMatcher(geoips, "target")
common.Must(err)
ctx := withOutbound(&session.Outbound{Target: net.TCPDestination(net.ParseAddress("8.8.8.8"), 80)})
diff --git a/xray-core/app/router/config.go b/xray-core/app/router/config.go
index f1740610cc..3c7e493e77 100644
--- a/xray-core/app/router/config.go
+++ b/xray-core/app/router/config.go
@@ -61,11 +61,15 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) {
}
if rr.PortList != nil {
- conds.Add(NewPortMatcher(rr.PortList, false))
+ conds.Add(NewPortMatcher(rr.PortList, "target"))
}
if rr.SourcePortList != nil {
- conds.Add(NewPortMatcher(rr.SourcePortList, true))
+ conds.Add(NewPortMatcher(rr.SourcePortList, "source"))
+ }
+
+ if rr.LocalPortList != nil {
+ conds.Add(NewPortMatcher(rr.LocalPortList, "local"))
}
if len(rr.Networks) > 0 {
@@ -73,7 +77,7 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) {
}
if len(rr.Geoip) > 0 {
- cond, err := NewMultiGeoIPMatcher(rr.Geoip, false)
+ cond, err := NewMultiGeoIPMatcher(rr.Geoip, "target")
if err != nil {
return nil, err
}
@@ -81,13 +85,22 @@ func (rr *RoutingRule) BuildCondition() (Condition, error) {
}
if len(rr.SourceGeoip) > 0 {
- cond, err := NewMultiGeoIPMatcher(rr.SourceGeoip, true)
+ cond, err := NewMultiGeoIPMatcher(rr.SourceGeoip, "source")
if err != nil {
return nil, err
}
conds.Add(cond)
}
+ if len(rr.LocalGeoip) > 0 {
+ cond, err := NewMultiGeoIPMatcher(rr.LocalGeoip, "local")
+ if err != nil {
+ return nil, err
+ }
+ conds.Add(cond)
+ errors.LogWarning(context.Background(), "Due to some limitations, in UDP connections, localIP is always equal to listen interface IP, so \"localIP\" rule condition does not work properly on UDP inbound connections that listen on all interfaces")
+ }
+
if len(rr.Protocol) > 0 {
conds.Add(NewProtocolMatcher(rr.Protocol))
}
diff --git a/xray-core/app/router/config.pb.go b/xray-core/app/router/config.pb.go
index ca6cc38fcc..f029f22d1f 100644
--- a/xray-core/app/router/config.pb.go
+++ b/xray-core/app/router/config.pb.go
@@ -470,7 +470,7 @@ type RoutingRule struct {
// *RoutingRule_Tag
// *RoutingRule_BalancingTag
TargetTag isRoutingRule_TargetTag `protobuf_oneof:"target_tag"`
- RuleTag string `protobuf:"bytes,18,opt,name=rule_tag,json=ruleTag,proto3" json:"rule_tag,omitempty"`
+ RuleTag string `protobuf:"bytes,20,opt,name=rule_tag,json=ruleTag,proto3" json:"rule_tag,omitempty"`
// List of domains for target domain matching.
Domain []*Domain `protobuf:"bytes,2,rep,name=domain,proto3" json:"domain,omitempty"`
// List of GeoIPs for target IP address matching. If this entry exists, the
@@ -492,6 +492,8 @@ type RoutingRule struct {
Protocol []string `protobuf:"bytes,9,rep,name=protocol,proto3" json:"protocol,omitempty"`
Attributes map[string]string `protobuf:"bytes,15,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
DomainMatcher string `protobuf:"bytes,17,opt,name=domain_matcher,json=domainMatcher,proto3" json:"domain_matcher,omitempty"`
+ LocalGeoip []*GeoIP `protobuf:"bytes,18,rep,name=local_geoip,json=localGeoip,proto3" json:"local_geoip,omitempty"`
+ LocalPortList *net.PortList `protobuf:"bytes,19,opt,name=local_port_list,json=localPortList,proto3" json:"local_port_list,omitempty"`
}
func (x *RoutingRule) Reset() {
@@ -629,6 +631,20 @@ func (x *RoutingRule) GetDomainMatcher() string {
return ""
}
+func (x *RoutingRule) GetLocalGeoip() []*GeoIP {
+ if x != nil {
+ return x.LocalGeoip
+ }
+ return nil
+}
+
+func (x *RoutingRule) GetLocalPortList() *net.PortList {
+ if x != nil {
+ return x.LocalPortList
+ }
+ return nil
+}
+
type isRoutingRule_TargetTag interface {
isRoutingRule_TargetTag()
}
@@ -1069,13 +1085,13 @@ var file_app_router_config_proto_rawDesc = []byte{
0x6f, 0x53, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x6e, 0x74,
0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x53, 0x69,
- 0x74, 0x65, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xce, 0x05, 0x0a, 0x0b, 0x52, 0x6f,
+ 0x74, 0x65, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0xca, 0x06, 0x0a, 0x0b, 0x52, 0x6f,
0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x74, 0x61, 0x67,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x25, 0x0a,
0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x0c,
0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e,
0x67, 0x54, 0x61, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x74, 0x61, 0x67,
- 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x12,
+ 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6c, 0x65, 0x54, 0x61, 0x67, 0x12,
0x2f, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x17, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65,
0x72, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
@@ -1109,67 +1125,75 @@ var file_app_router_config_proto_rawDesc = []byte{
0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72,
0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
- 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x1a, 0x3d, 0x0a,
- 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, 0x0a,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x42,
- 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03,
- 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x2b,
- 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63,
- 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f,
- 0x75, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73,
- 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73,
- 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x4d, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x61, 0x74,
- 0x65, 0x67, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
- 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x52, 0x10, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x53, 0x65,
- 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61,
- 0x63, 0x6b, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61,
- 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x61, 0x67, 0x22, 0x54, 0x0a, 0x0e, 0x53, 0x74, 0x72,
- 0x61, 0x74, 0x65, 0x67, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72,
- 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x67,
- 0x65, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
- 0xc0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x4c, 0x65, 0x61, 0x73,
- 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x05, 0x63,
- 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x72, 0x61,
- 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72,
- 0x61, 0x74, 0x65, 0x67, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x63, 0x6f, 0x73,
- 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18,
- 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73,
- 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06,
- 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61,
- 0x78, 0x52, 0x54, 0x54, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63,
- 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e,
- 0x63, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a,
- 0x0f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70,
- 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
- 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e,
- 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x30,
- 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78,
- 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x52,
- 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65,
- 0x12, 0x45, 0x0a, 0x0e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75,
- 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
- 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e,
- 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63,
- 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x47, 0x0a, 0x0e, 0x44, 0x6f, 0x6d, 0x61, 0x69,
- 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x73, 0x49,
- 0x73, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x49, 0x70, 0x10, 0x01, 0x12, 0x10,
- 0x0a, 0x0c, 0x49, 0x70, 0x49, 0x66, 0x4e, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x02,
- 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x70, 0x4f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x03,
- 0x42, 0x4f, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70,
- 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75,
- 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, 0x2d,
- 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0xaa,
- 0x02, 0x0f, 0x58, 0x72, 0x61, 0x79, 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65,
- 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x12, 0x37, 0x0a,
+ 0x0b, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x67, 0x65, 0x6f, 0x69, 0x70, 0x18, 0x12, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f,
+ 0x75, 0x74, 0x65, 0x72, 0x2e, 0x47, 0x65, 0x6f, 0x49, 0x50, 0x52, 0x0a, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x47, 0x65, 0x6f, 0x69, 0x70, 0x12, 0x41, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f,
+ 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x19, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6e, 0x65,
+ 0x74, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67,
+ 0x65, 0x74, 0x5f, 0x74, 0x61, 0x67, 0x22, 0xdc, 0x01, 0x0a, 0x0d, 0x42, 0x61, 0x6c, 0x61, 0x6e,
+ 0x63, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x2b, 0x0a, 0x11, 0x6f, 0x75,
+ 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18,
+ 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74,
+ 0x65, 0x67, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74,
+ 0x65, 0x67, 0x79, 0x12, 0x4d, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f,
+ 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
+ 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x73, 0x65, 0x72,
+ 0x69, 0x61, 0x6c, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x52, 0x10, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+ 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x74,
+ 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61,
+ 0x63, 0x6b, 0x54, 0x61, 0x67, 0x22, 0x54, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67,
+ 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x65, 0x78,
+ 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12,
+ 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x17,
+ 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x61,
+ 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70,
+ 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67,
+ 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1c,
+ 0x0a, 0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
+ 0x03, 0x52, 0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08,
+ 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08,
+ 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x52,
+ 0x54, 0x54, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54,
+ 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x02, 0x52, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x9b,
+ 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4f, 0x0a, 0x0f, 0x64, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f,
+ 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x30, 0x0a, 0x04, 0x72, 0x75,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e,
+ 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69,
+ 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x0e,
+ 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e,
+ 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67,
+ 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52,
+ 0x75, 0x6c, 0x65, 0x22, 0x47, 0x0a, 0x0e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72,
+ 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x73, 0x49, 0x73, 0x10, 0x00, 0x12,
+ 0x09, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x49, 0x70, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x70,
+ 0x49, 0x66, 0x4e, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a,
+ 0x49, 0x70, 0x4f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x03, 0x42, 0x4f, 0x0a, 0x13,
+ 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75,
+ 0x74, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x24, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65,
+ 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0xaa, 0x02, 0x0f, 0x58, 0x72,
+ 0x61, 0x79, 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1220,16 +1244,18 @@ var file_app_router_config_proto_depIdxs = []int32{
4, // 10: xray.app.router.RoutingRule.source_geoip:type_name -> xray.app.router.GeoIP
15, // 11: xray.app.router.RoutingRule.source_port_list:type_name -> xray.common.net.PortList
14, // 12: xray.app.router.RoutingRule.attributes:type_name -> xray.app.router.RoutingRule.AttributesEntry
- 17, // 13: xray.app.router.BalancingRule.strategy_settings:type_name -> xray.common.serial.TypedMessage
- 10, // 14: xray.app.router.StrategyLeastLoadConfig.costs:type_name -> xray.app.router.StrategyWeight
- 1, // 15: xray.app.router.Config.domain_strategy:type_name -> xray.app.router.Config.DomainStrategy
- 8, // 16: xray.app.router.Config.rule:type_name -> xray.app.router.RoutingRule
- 9, // 17: xray.app.router.Config.balancing_rule:type_name -> xray.app.router.BalancingRule
- 18, // [18:18] is the sub-list for method output_type
- 18, // [18:18] is the sub-list for method input_type
- 18, // [18:18] is the sub-list for extension type_name
- 18, // [18:18] is the sub-list for extension extendee
- 0, // [0:18] is the sub-list for field type_name
+ 4, // 13: xray.app.router.RoutingRule.local_geoip:type_name -> xray.app.router.GeoIP
+ 15, // 14: xray.app.router.RoutingRule.local_port_list:type_name -> xray.common.net.PortList
+ 17, // 15: xray.app.router.BalancingRule.strategy_settings:type_name -> xray.common.serial.TypedMessage
+ 10, // 16: xray.app.router.StrategyLeastLoadConfig.costs:type_name -> xray.app.router.StrategyWeight
+ 1, // 17: xray.app.router.Config.domain_strategy:type_name -> xray.app.router.Config.DomainStrategy
+ 8, // 18: xray.app.router.Config.rule:type_name -> xray.app.router.RoutingRule
+ 9, // 19: xray.app.router.Config.balancing_rule:type_name -> xray.app.router.BalancingRule
+ 20, // [20:20] is the sub-list for method output_type
+ 20, // [20:20] is the sub-list for method input_type
+ 20, // [20:20] is the sub-list for extension type_name
+ 20, // [20:20] is the sub-list for extension extendee
+ 0, // [0:20] is the sub-list for field type_name
}
func init() { file_app_router_config_proto_init() }
diff --git a/xray-core/app/router/config.proto b/xray-core/app/router/config.proto
index 505f0712d4..3539dce766 100644
--- a/xray-core/app/router/config.proto
+++ b/xray-core/app/router/config.proto
@@ -79,7 +79,7 @@ message RoutingRule {
// Tag of routing balancer.
string balancing_tag = 12;
}
- string rule_tag = 18;
+ string rule_tag = 20;
// List of domains for target domain matching.
repeated Domain domain = 2;
@@ -110,6 +110,9 @@ message RoutingRule {
map attributes = 15;
string domain_matcher = 17;
+
+ repeated GeoIP local_geoip = 18;
+ xray.common.net.PortList local_port_list = 19;
}
message BalancingRule {
diff --git a/xray-core/common/session/session.go b/xray-core/common/session/session.go
index 4de9737459..d341cc63d7 100644
--- a/xray-core/common/session/session.go
+++ b/xray-core/common/session/session.go
@@ -36,6 +36,8 @@ func ExportIDToError(ctx context.Context) errors.ExportOption {
type Inbound struct {
// Source address of the inbound connection.
Source net.Destination
+ // Local address of the inbound connection.
+ Local net.Destination
// Gateway address.
Gateway net.Destination
// Tag of the inbound proxy that handles the connection.
diff --git a/xray-core/features/routing/context.go b/xray-core/features/routing/context.go
index e52e247001..77ec0d50c9 100644
--- a/xray-core/features/routing/context.go
+++ b/xray-core/features/routing/context.go
@@ -23,6 +23,12 @@ type Context interface {
// GetTargetPort returns the target port of the connection.
GetTargetPort() net.Port
+ // GetLocalIPs returns the local IPs bound to the connection.
+ GetLocalIPs() []net.IP
+
+ // GetLocalPort returns the local port of the connection.
+ GetLocalPort() net.Port
+
// GetTargetDomain returns the target domain of the connection, if exists.
GetTargetDomain() string
diff --git a/xray-core/features/routing/session/context.go b/xray-core/features/routing/session/context.go
index f87066a011..54ba907c48 100644
--- a/xray-core/features/routing/session/context.go
+++ b/xray-core/features/routing/session/context.go
@@ -28,12 +28,13 @@ func (ctx *Context) GetSourceIPs() []net.IP {
if ctx.Inbound == nil || !ctx.Inbound.Source.IsValid() {
return nil
}
- dest := ctx.Inbound.Source
- if dest.Address.Family().IsDomain() {
- return nil
+
+ if ctx.Inbound.Source.Address.Family().IsIP() {
+ return []net.IP{ctx.Inbound.Source.Address.IP()}
}
- return []net.IP{dest.Address.IP()}
+ return nil
+
}
// GetSourcePort implements routing.Context.
@@ -65,6 +66,27 @@ func (ctx *Context) GetTargetPort() net.Port {
return ctx.Outbound.Target.Port
}
+// GetLocalIPs implements routing.Context.
+func (ctx *Context) GetLocalIPs() []net.IP {
+ if ctx.Inbound == nil || !ctx.Inbound.Local.IsValid() {
+ return nil
+ }
+
+ if ctx.Inbound.Local.Address.Family().IsIP() {
+ return []net.IP{ctx.Inbound.Local.Address.IP()}
+ }
+
+ return nil
+}
+
+// GetLocalPort implements routing.Context.
+func (ctx *Context) GetLocalPort() net.Port {
+ if ctx.Inbound == nil || !ctx.Inbound.Local.IsValid() {
+ return 0
+ }
+ return ctx.Inbound.Local.Port
+}
+
// GetTargetDomain implements routing.Context.
func (ctx *Context) GetTargetDomain() string {
if ctx.Outbound == nil || !ctx.Outbound.Target.IsValid() {
diff --git a/xray-core/go.mod b/xray-core/go.mod
index 44ac0ed571..6408d162b7 100644
--- a/xray-core/go.mod
+++ b/xray-core/go.mod
@@ -21,13 +21,13 @@ require (
github.com/vishvananda/netlink v1.3.1
github.com/xtls/reality v0.0.0-20250725142056-5b52a03d4fb7
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
- golang.org/x/crypto v0.40.0
- golang.org/x/net v0.42.0
+ golang.org/x/crypto v0.41.0
+ golang.org/x/net v0.43.0
golang.org/x/sync v0.16.0
- golang.org/x/sys v0.34.0
+ golang.org/x/sys v0.35.0
golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173
google.golang.org/grpc v1.74.2
- google.golang.org/protobuf v1.36.6
+ google.golang.org/protobuf v1.36.7
gvisor.dev/gvisor v0.0.0-20250428193742-2d800c3129d5
h12.io/socks v1.0.3
lukechampine.com/blake3 v1.4.1
@@ -47,10 +47,10 @@ require (
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
github.com/vishvananda/netns v0.0.5 // indirect
go.uber.org/mock v0.5.0 // indirect
- golang.org/x/mod v0.25.0 // indirect
- golang.org/x/text v0.27.0 // indirect
+ golang.org/x/mod v0.26.0 // indirect
+ golang.org/x/text v0.28.0 // indirect
golang.org/x/time v0.7.0 // indirect
- golang.org/x/tools v0.34.0 // indirect
+ golang.org/x/tools v0.35.0 // indirect
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
diff --git a/xray-core/go.sum b/xray-core/go.sum
index e48a40f5c9..c0d8f92c33 100644
--- a/xray-core/go.sum
+++ b/xray-core/go.sum
@@ -96,16 +96,16 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
-golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
+golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
+golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
-golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
-golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
+golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
+golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
-golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
+golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
+golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
@@ -117,21 +117,21 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
-golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
+golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
-golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
+golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
+golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
-golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
-golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
+golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
+golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -143,8 +143,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:
google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=
google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM=
-google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
-google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
+google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A=
+google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
diff --git a/xray-core/infra/conf/freedom.go b/xray-core/infra/conf/freedom.go
index 15f1bcff69..39b1a431d8 100644
--- a/xray-core/infra/conf/freedom.go
+++ b/xray-core/infra/conf/freedom.go
@@ -27,12 +27,14 @@ type Fragment struct {
Packets string `json:"packets"`
Length *Int32Range `json:"length"`
Interval *Int32Range `json:"interval"`
+ MaxSplit *Int32Range `json:"maxSplit"`
}
type Noise struct {
- Type string `json:"type"`
- Packet string `json:"packet"`
- Delay *Int32Range `json:"delay"`
+ Type string `json:"type"`
+ Packet string `json:"packet"`
+ Delay *Int32Range `json:"delay"`
+ ApplyTo string `json:"applyTo"`
}
// Build implements Buildable
@@ -108,6 +110,13 @@ func (c *FreedomConfig) Build() (proto.Message, error) {
config.Fragment.IntervalMin = uint64(c.Fragment.Interval.From)
config.Fragment.IntervalMax = uint64(c.Fragment.Interval.To)
}
+
+ {
+ if c.Fragment.MaxSplit != nil {
+ config.Fragment.MaxSplitMin = uint64(c.Fragment.MaxSplit.From)
+ config.Fragment.MaxSplitMax = uint64(c.Fragment.MaxSplit.To)
+ }
+ }
}
if c.Noise != nil {
@@ -193,5 +202,15 @@ func ParseNoise(noise *Noise) (*freedom.Noise, error) {
NConfig.DelayMin = uint64(noise.Delay.From)
NConfig.DelayMax = uint64(noise.Delay.To)
}
+ switch strings.ToLower(noise.ApplyTo) {
+ case "", "ip", "all":
+ NConfig.ApplyTo = "ip"
+ case "ipv4":
+ NConfig.ApplyTo = "ipv4"
+ case "ipv6":
+ NConfig.ApplyTo = "ipv6"
+ default:
+ return nil, errors.New("Invalid applyTo, only ip/ipv4/ipv6 are supported")
+ }
return NConfig, nil
}
diff --git a/xray-core/infra/conf/router.go b/xray-core/infra/conf/router.go
index 2065f96ba0..2ae2fc0dcf 100644
--- a/xray-core/infra/conf/router.go
+++ b/xray-core/infra/conf/router.go
@@ -536,12 +536,15 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) {
IP *StringList `json:"ip"`
Port *PortList `json:"port"`
Network *NetworkList `json:"network"`
- SourceIP *StringList `json:"source"`
+ SourceIP *StringList `json:"sourceIP"`
+ Source *StringList `json:"source"`
SourcePort *PortList `json:"sourcePort"`
User *StringList `json:"user"`
InboundTag *StringList `json:"inboundTag"`
Protocols *StringList `json:"protocol"`
Attributes map[string]string `json:"attrs"`
+ LocalIP *StringList `json:"localIP"`
+ LocalPort *PortList `json:"localPort"`
}
rawFieldRule := new(RawFieldRule)
err := json.Unmarshal(msg, rawFieldRule)
@@ -604,6 +607,10 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) {
rule.Networks = rawFieldRule.Network.Build()
}
+ if rawFieldRule.SourceIP == nil {
+ rawFieldRule.SourceIP = rawFieldRule.Source
+ }
+
if rawFieldRule.SourceIP != nil {
geoipList, err := ToCidrList(*rawFieldRule.SourceIP)
if err != nil {
@@ -616,6 +623,18 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) {
rule.SourcePortList = rawFieldRule.SourcePort.Build()
}
+ if rawFieldRule.LocalIP != nil {
+ geoipList, err := ToCidrList(*rawFieldRule.LocalIP)
+ if err != nil {
+ return nil, err
+ }
+ rule.LocalGeoip = geoipList
+ }
+
+ if rawFieldRule.LocalPort != nil {
+ rule.LocalPortList = rawFieldRule.LocalPort.Build()
+ }
+
if rawFieldRule.User != nil {
for _, s := range *rawFieldRule.User {
rule.UserEmail = append(rule.UserEmail, s)
diff --git a/xray-core/proxy/freedom/config.pb.go b/xray-core/proxy/freedom/config.pb.go
index 83bb15d6d2..96855aecaa 100644
--- a/xray-core/proxy/freedom/config.pb.go
+++ b/xray-core/proxy/freedom/config.pb.go
@@ -150,6 +150,8 @@ type Fragment struct {
LengthMax uint64 `protobuf:"varint,4,opt,name=length_max,json=lengthMax,proto3" json:"length_max,omitempty"`
IntervalMin uint64 `protobuf:"varint,5,opt,name=interval_min,json=intervalMin,proto3" json:"interval_min,omitempty"`
IntervalMax uint64 `protobuf:"varint,6,opt,name=interval_max,json=intervalMax,proto3" json:"interval_max,omitempty"`
+ MaxSplitMin uint64 `protobuf:"varint,7,opt,name=max_split_min,json=maxSplitMin,proto3" json:"max_split_min,omitempty"`
+ MaxSplitMax uint64 `protobuf:"varint,8,opt,name=max_split_max,json=maxSplitMax,proto3" json:"max_split_max,omitempty"`
}
func (x *Fragment) Reset() {
@@ -224,6 +226,20 @@ func (x *Fragment) GetIntervalMax() uint64 {
return 0
}
+func (x *Fragment) GetMaxSplitMin() uint64 {
+ if x != nil {
+ return x.MaxSplitMin
+ }
+ return 0
+}
+
+func (x *Fragment) GetMaxSplitMax() uint64 {
+ if x != nil {
+ return x.MaxSplitMax
+ }
+ return 0
+}
+
type Noise struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -234,6 +250,7 @@ type Noise struct {
DelayMin uint64 `protobuf:"varint,3,opt,name=delay_min,json=delayMin,proto3" json:"delay_min,omitempty"`
DelayMax uint64 `protobuf:"varint,4,opt,name=delay_max,json=delayMax,proto3" json:"delay_max,omitempty"`
Packet []byte `protobuf:"bytes,5,opt,name=packet,proto3" json:"packet,omitempty"`
+ ApplyTo string `protobuf:"bytes,6,opt,name=apply_to,json=applyTo,proto3" json:"apply_to,omitempty"`
}
func (x *Noise) Reset() {
@@ -301,6 +318,13 @@ func (x *Noise) GetPacket() []byte {
return nil
}
+func (x *Noise) GetApplyTo() string {
+ if x != nil {
+ return x.ApplyTo
+ }
+ return ""
+}
+
type Config struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -399,7 +423,7 @@ var file_proxy_freedom_config_proto_rawDesc = []byte{
0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x72, 0x61,
0x79, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f,
0x6c, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74,
- 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xd0, 0x01, 0x0a, 0x08, 0x46, 0x72, 0x61,
+ 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x98, 0x02, 0x0a, 0x08, 0x46, 0x72, 0x61,
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73,
0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x70, 0x61, 0x63,
0x6b, 0x65, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b,
@@ -412,57 +436,63 @@ var file_proxy_freedom_config_proto_rawDesc = []byte{
0x6c, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65,
0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b,
- 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x61, 0x78, 0x22, 0x97, 0x01, 0x0a, 0x05,
- 0x4e, 0x6f, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f,
- 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6c, 0x65, 0x6e, 0x67, 0x74,
- 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d,
- 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
- 0x4d, 0x61, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x69, 0x6e,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x69, 0x6e,
- 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x16, 0x0a,
- 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70,
- 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x97, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
- 0x12, 0x52, 0x0a, 0x0f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74,
- 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x78, 0x72, 0x61, 0x79,
- 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x43,
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61,
- 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61,
- 0x74, 0x65, 0x67, 0x79, 0x12, 0x5a, 0x0a, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e,
- 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x13, 0x64, 0x65, 0x73,
- 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65,
- 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12,
- 0x38, 0x0a, 0x08, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x66,
- 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52,
- 0x08, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f,
- 0x78, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x0d, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c,
- 0x12, 0x31, 0x0a, 0x06, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x19, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x66, 0x72,
- 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x4e, 0x6f, 0x69, 0x73, 0x65, 0x52, 0x06, 0x6e, 0x6f, 0x69,
- 0x73, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x0e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74,
- 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x53, 0x5f, 0x49, 0x53, 0x10,
- 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x53, 0x45, 0x5f, 0x49, 0x50, 0x10, 0x01, 0x12, 0x0b, 0x0a,
- 0x07, 0x55, 0x53, 0x45, 0x5f, 0x49, 0x50, 0x34, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x53,
- 0x45, 0x5f, 0x49, 0x50, 0x36, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x49,
- 0x50, 0x34, 0x36, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x53, 0x45, 0x5f, 0x49, 0x50, 0x36,
- 0x34, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x10,
- 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x34, 0x10, 0x07,
- 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x36, 0x10, 0x08, 0x12,
- 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x34, 0x36, 0x10, 0x09, 0x12,
- 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x36, 0x34, 0x10, 0x0a, 0x42,
- 0x58, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78,
- 0x79, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, 0x74,
- 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61,
- 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f, 0x66, 0x72, 0x65,
- 0x65, 0x64, 0x6f, 0x6d, 0xaa, 0x02, 0x12, 0x58, 0x72, 0x61, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x78,
- 0x79, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x33,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x61, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x6d,
+ 0x61, 0x78, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x4d, 0x69, 0x6e, 0x12,
+ 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x6d, 0x61, 0x78,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x53, 0x70, 0x6c, 0x69, 0x74,
+ 0x4d, 0x61, 0x78, 0x22, 0xb2, 0x01, 0x0a, 0x05, 0x4e, 0x6f, 0x69, 0x73, 0x65, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x04, 0x52, 0x09, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
+ 0x52, 0x09, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x4d, 0x61, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x64,
+ 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08,
+ 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x61,
+ 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x6c,
+ 0x61, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x19, 0x0a,
+ 0x08, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x74, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x22, 0x97, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x0f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74,
+ 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x78,
+ 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f,
+ 0x6d, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53,
+ 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53,
+ 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x5a, 0x0a, 0x14, 0x64, 0x65, 0x73, 0x74, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f,
+ 0x78, 0x79, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x52, 0x13,
+ 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x76, 0x65, 0x72, 0x72,
+ 0x69, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x65, 0x76, 0x65,
+ 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x65, 0x76,
+ 0x65, 0x6c, 0x12, 0x38, 0x0a, 0x08, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78,
+ 0x79, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x46, 0x72, 0x61, 0x67, 0x6d, 0x65,
+ 0x6e, 0x74, 0x52, 0x08, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e,
+ 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x06,
+ 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f,
+ 0x63, 0x6f, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x78, 0x79,
+ 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x2e, 0x4e, 0x6f, 0x69, 0x73, 0x65, 0x52, 0x06,
+ 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x0e, 0x44, 0x6f, 0x6d, 0x61, 0x69,
+ 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x53, 0x5f,
+ 0x49, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x53, 0x45, 0x5f, 0x49, 0x50, 0x10, 0x01,
+ 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x53, 0x45, 0x5f, 0x49, 0x50, 0x34, 0x10, 0x02, 0x12, 0x0b, 0x0a,
+ 0x07, 0x55, 0x53, 0x45, 0x5f, 0x49, 0x50, 0x36, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x53,
+ 0x45, 0x5f, 0x49, 0x50, 0x34, 0x36, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x53, 0x45, 0x5f,
+ 0x49, 0x50, 0x36, 0x34, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f,
+ 0x49, 0x50, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50,
+ 0x34, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x36,
+ 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x34, 0x36,
+ 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x49, 0x50, 0x36, 0x34,
+ 0x10, 0x0a, 0x42, 0x58, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x70,
+ 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x50, 0x01, 0x5a, 0x27,
+ 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f,
+ 0x78, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2f,
+ 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0xaa, 0x02, 0x12, 0x58, 0x72, 0x61, 0x79, 0x2e, 0x50,
+ 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x62, 0x06, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/xray-core/proxy/freedom/config.proto b/xray-core/proxy/freedom/config.proto
index 5d05ab9ee7..3a59e44d58 100644
--- a/xray-core/proxy/freedom/config.proto
+++ b/xray-core/proxy/freedom/config.proto
@@ -19,6 +19,8 @@ message Fragment {
uint64 length_max = 4;
uint64 interval_min = 5;
uint64 interval_max = 6;
+ uint64 max_split_min = 7;
+ uint64 max_split_max = 8;
}
message Noise {
uint64 length_min = 1;
@@ -26,6 +28,7 @@ message Noise {
uint64 delay_min = 3;
uint64 delay_max = 4;
bytes packet = 5;
+ string apply_to = 6;
}
message Config {
diff --git a/xray-core/proxy/freedom/freedom.go b/xray-core/proxy/freedom/freedom.go
index 1f9d5ae5db..99b24fef77 100644
--- a/xray-core/proxy/freedom/freedom.go
+++ b/xray-core/proxy/freedom/freedom.go
@@ -194,7 +194,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
if destination.Network == net.Network_TCP {
if h.config.Fragment != nil {
errors.LogDebug(ctx, "FRAGMENT", h.config.Fragment.PacketsFrom, h.config.Fragment.PacketsTo, h.config.Fragment.LengthMin, h.config.Fragment.LengthMax,
- h.config.Fragment.IntervalMin, h.config.Fragment.IntervalMax)
+ h.config.Fragment.IntervalMin, h.config.Fragment.IntervalMax, h.config.Fragment.MaxSplitMin, h.config.Fragment.MaxSplitMax)
writer = buf.NewWriter(&FragmentWriter{
fragment: h.config.Fragment,
writer: conn,
@@ -211,6 +211,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
noises: h.config.Noises,
firstWrite: true,
UDPOverride: UDPOverride,
+ remoteAddr: net.DestinationFromAddr(conn.RemoteAddr()).Address,
}
}
}
@@ -289,14 +290,13 @@ func NewPacketReader(conn net.Conn, UDPOverride net.Destination, DialDest net.De
if UDPOverride.Address != nil || UDPOverride.Port != 0 {
isOverridden = true
}
- changedAddress, _, _ := net.SplitHostPort(conn.RemoteAddr().String())
return &PacketReader{
PacketConnWrapper: c,
Counter: counter,
IsOverridden: isOverridden,
InitUnchangedAddr: DialDest.Address,
- InitChangedAddr: net.ParseAddress(changedAddress),
+ InitChangedAddr: net.DestinationFromAddr(conn.RemoteAddr()).Address,
}
}
return &buf.PacketReader{Reader: conn}
@@ -354,8 +354,7 @@ func NewPacketWriter(conn net.Conn, h *Handler, ctx context.Context, UDPOverride
// check this behavior and add it to map
resolvedUDPAddr := utils.NewTypedSyncMap[string, net.Address]()
if DialDest.Address.Family().IsDomain() {
- RemoteAddress, _, _ := net.SplitHostPort(conn.RemoteAddr().String())
- resolvedUDPAddr.Store(DialDest.Address.String(), net.ParseAddress(RemoteAddress))
+ resolvedUDPAddr.Store(DialDest.Address.Domain(), net.DestinationFromAddr(conn.RemoteAddr()).Address)
}
return &PacketWriter{
PacketConnWrapper: c,
@@ -456,6 +455,7 @@ type NoisePacketWriter struct {
noises []*Noise
firstWrite bool
UDPOverride net.Destination
+ remoteAddr net.Address
}
// MultiBuffer writer with Noise before first packet
@@ -468,8 +468,24 @@ func (w *NoisePacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
}
var noise []byte
var err error
+ if w.remoteAddr.Family().IsDomain() {
+ panic("impossible, remoteAddr is always IP")
+ }
for _, n := range w.noises {
- //User input string or base64 encoded string
+ switch n.ApplyTo {
+ case "ipv4":
+ if w.remoteAddr.Family().IsIPv6() {
+ continue
+ }
+ case "ipv6":
+ if w.remoteAddr.Family().IsIPv4() {
+ continue
+ }
+ case "ip":
+ default:
+ panic("unreachable, applyTo is ip/ipv4/ipv6")
+ }
+ //User input string or base64 encoded string or hex string
if n.Packet != nil {
noise = n.Packet
} else {
@@ -509,23 +525,29 @@ func (f *FragmentWriter) Write(b []byte) (int, error) {
return f.writer.Write(b)
}
data := b[5:recordLen]
- buf := make([]byte, 1024)
+ buff := make([]byte, 2048)
var hello []byte
+ maxSplit := crypto.RandBetween(int64(f.fragment.MaxSplitMin), int64(f.fragment.MaxSplitMax))
+ var splitNum int64
for from := 0; ; {
to := from + int(crypto.RandBetween(int64(f.fragment.LengthMin), int64(f.fragment.LengthMax)))
- if to > len(data) {
+ splitNum++
+ if to > len(data) || (maxSplit > 0 && splitNum >= maxSplit) {
to = len(data)
}
- copy(buf[:3], b)
- copy(buf[5:], data[from:to])
l := to - from
+ if 5+l > len(buff) {
+ buff = make([]byte, 5+l)
+ }
+ copy(buff[:3], b)
+ copy(buff[5:], data[from:to])
from = to
- buf[3] = byte(l >> 8)
- buf[4] = byte(l)
+ buff[3] = byte(l >> 8)
+ buff[4] = byte(l)
if f.fragment.IntervalMax == 0 { // combine fragmented tlshello if interval is 0
- hello = append(hello, buf[:5+l]...)
+ hello = append(hello, buff[:5+l]...)
} else {
- _, err := f.writer.Write(buf[:5+l])
+ _, err := f.writer.Write(buff[:5+l])
time.Sleep(time.Duration(crypto.RandBetween(int64(f.fragment.IntervalMin), int64(f.fragment.IntervalMax))) * time.Millisecond)
if err != nil {
return 0, err
@@ -552,17 +574,20 @@ func (f *FragmentWriter) Write(b []byte) (int, error) {
if f.fragment.PacketsFrom != 0 && (f.count < f.fragment.PacketsFrom || f.count > f.fragment.PacketsTo) {
return f.writer.Write(b)
}
+ maxSplit := crypto.RandBetween(int64(f.fragment.MaxSplitMin), int64(f.fragment.MaxSplitMax))
+ var splitNum int64
for from := 0; ; {
to := from + int(crypto.RandBetween(int64(f.fragment.LengthMin), int64(f.fragment.LengthMax)))
- if to > len(b) {
+ splitNum++
+ if to > len(b) || (maxSplit > 0 && splitNum >= maxSplit) {
to = len(b)
}
n, err := f.writer.Write(b[from:to])
from += n
- time.Sleep(time.Duration(crypto.RandBetween(int64(f.fragment.IntervalMin), int64(f.fragment.IntervalMax))) * time.Millisecond)
if err != nil {
return from, err
}
+ time.Sleep(time.Duration(crypto.RandBetween(int64(f.fragment.IntervalMin), int64(f.fragment.IntervalMax))) * time.Millisecond)
if from >= len(b) {
return from, nil
}
diff --git a/yt-dlp/yt_dlp/extractor/motherless.py b/yt-dlp/yt_dlp/extractor/motherless.py
index 86551950b7..e236ec3db8 100644
--- a/yt-dlp/yt_dlp/extractor/motherless.py
+++ b/yt-dlp/yt_dlp/extractor/motherless.py
@@ -51,23 +51,7 @@ class MotherlessIE(InfoExtractor):
'skip': '404',
}, {
'url': 'http://motherless.com/g/cosplay/633979F',
- 'md5': '0b2a43f447a49c3e649c93ad1fafa4a0',
- 'info_dict': {
- 'id': '633979F',
- 'ext': 'mp4',
- 'title': 'Turtlette',
- 'categories': ['superheroine heroine superher'],
- 'upload_date': '20140827',
- 'uploader_id': 'shade0230',
- 'thumbnail': r're:https?://.*\.jpg',
- 'age_limit': 18,
- 'like_count': int,
- 'comment_count': int,
- 'view_count': int,
- },
- 'params': {
- 'nocheckcertificate': True,
- },
+ 'expected_exception': 'ExtractorError',
}, {
'url': 'http://motherless.com/8B4BBC1',
'info_dict': {
@@ -113,8 +97,10 @@ class MotherlessIE(InfoExtractor):
webpage = self._download_webpage(url, video_id)
if any(p in webpage for p in (
- '404 - MOTHERLESS.COM<',
- ">The page you're looking for cannot be found.<")):
+ '404 - MOTHERLESS.COM<',
+ ">The page you're looking for cannot be found.<",
+ '