diff --git a/.github/update.log b/.github/update.log index 0dae56d533..becb45fb39 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1134,3 +1134,4 @@ Update On Wed Sep 24 20:34:28 CEST 2025 Update On Thu Sep 25 20:42:08 CEST 2025 Update On Fri Sep 26 20:35:20 CEST 2025 Update On Sat Sep 27 20:33:29 CEST 2025 +Update On Sun Sep 28 20:32:41 CEST 2025 diff --git a/brook/ping/ping.json b/brook/ping/ping.json index c73501a732..7c43db6cf1 100644 --- a/brook/ping/ping.json +++ b/brook/ping/ping.json @@ -1,7 +1,7 @@ { "version": "20250808", - "text": "I've purchased code signing certificates for all my product Windows apps", - "link": "https://www.txthinking.com/talks/articles/windows-code-sign-en.article", - "text_zh": "我已经为我的所有产品的 Windows 客户端购买了代码签名证书", - "link_zh": "https://www.txthinking.com/talks/articles/windows-code-sign.article" + "text": "Brook Business: Powering Your Own Branded Client", + "link": "https://www.txthinking.com/talks/articles/brook-business-en.article", + "text_zh": "Brook Business: 让你拥有自己品牌的 Brook 客户端", + "link_zh": "https://www.txthinking.com/talks/articles/brook-business.article" } diff --git a/clash-meta/adapter/outbound/mieru.go b/clash-meta/adapter/outbound/mieru.go index bfdf0e519f..8ef9cfd758 100644 --- a/clash-meta/adapter/outbound/mieru.go +++ b/clash-meta/adapter/outbound/mieru.go @@ -5,7 +5,6 @@ import ( "fmt" "net" "strconv" - "strings" "sync" CN "github.com/metacubex/mihomo/common/net" @@ -31,8 +30,8 @@ type MieruOption struct { BasicOption Name string `proxy:"name"` Server string `proxy:"server"` - Port string `proxy:"port,omitempty"` - PortRange string `proxy:"port-range,omitempty"` // deprecated + Port int `proxy:"port,omitempty"` + PortRange string `proxy:"port-range,omitempty"` Transport string `proxy:"transport"` UDP bool `proxy:"udp,omitempty"` UserName string `proxy:"username"` @@ -124,19 +123,13 @@ func NewMieru(option MieruOption) (*Mieru, error) { } // Client is started lazily on the first use. - // Use the first port to construct the address. var addr string - var portStr string - if option.Port != "" { - portStr = option.Port + if option.Port != 0 { + addr = net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) } else { - portStr = option.PortRange + beginPort, _, _ := beginAndEndPortFromPortRange(option.PortRange) + addr = net.JoinHostPort(option.Server, strconv.Itoa(beginPort)) } - firstPort, err := getFirstPort(portStr) - if err != nil { - return nil, fmt.Errorf("failed to get first port from port string %q: %w", portStr, err) - } - addr = net.JoinHostPort(option.Server, strconv.Itoa(firstPort)) outbound := &Mieru{ Base: &Base{ name: option.Name, @@ -190,62 +183,54 @@ func buildMieruClientConfig(option MieruOption) (*mieruclient.ClientConfig, erro } transportProtocol := mierupb.TransportProtocol_TCP.Enum() - - portBindings := make([]*mierupb.PortBinding, 0) - if option.Port != "" { - parts := strings.Split(option.Port, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if strings.Contains(part, "-") { - _, _, err := beginAndEndPortFromPortRange(part) - if err == nil { - portBindings = append(portBindings, &mierupb.PortBinding{ - PortRange: proto.String(part), - Protocol: transportProtocol, - }) - } else { - return nil, err - } - } else { - p, err := strconv.Atoi(part) - if err != nil { - return nil, fmt.Errorf("invalid port value: %s", part) - } - portBindings = append(portBindings, &mierupb.PortBinding{ - Port: proto.Int32(int32(p)), - Protocol: transportProtocol, - }) - } - } - } - if option.PortRange != "" { - parts := strings.Split(option.PortRange, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if _, _, err := beginAndEndPortFromPortRange(part); err == nil { - portBindings = append(portBindings, &mierupb.PortBinding{ - PortRange: proto.String(part), - Protocol: transportProtocol, - }) - } - } - } - var server *mierupb.ServerEndpoint if net.ParseIP(option.Server) != nil { // server is an IP address - server = &mierupb.ServerEndpoint{ - IpAddress: proto.String(option.Server), - PortBindings: portBindings, + if option.PortRange != "" { + server = &mierupb.ServerEndpoint{ + IpAddress: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + PortRange: proto.String(option.PortRange), + Protocol: transportProtocol, + }, + }, + } + } else { + server = &mierupb.ServerEndpoint{ + IpAddress: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + Port: proto.Int32(int32(option.Port)), + Protocol: transportProtocol, + }, + }, + } } } else { // server is a domain name - server = &mierupb.ServerEndpoint{ - DomainName: proto.String(option.Server), - PortBindings: portBindings, + if option.PortRange != "" { + server = &mierupb.ServerEndpoint{ + DomainName: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + PortRange: proto.String(option.PortRange), + Protocol: transportProtocol, + }, + }, + } + } else { + server = &mierupb.ServerEndpoint{ + DomainName: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + Port: proto.Int32(int32(option.Port)), + Protocol: transportProtocol, + }, + }, + } } } - config := &mieruclient.ClientConfig{ Profile: &mierupb.ClientProfile{ ProfileName: proto.String(option.Name), @@ -274,9 +259,31 @@ func validateMieruOption(option MieruOption) error { if option.Server == "" { return fmt.Errorf("server is empty") } - if option.Port == "" && option.PortRange == "" { - return fmt.Errorf("port must be set") + if option.Port == 0 && option.PortRange == "" { + return fmt.Errorf("either port or port-range must be set") } + if option.Port != 0 && option.PortRange != "" { + return fmt.Errorf("port and port-range cannot be set at the same time") + } + if option.Port != 0 && (option.Port < 1 || option.Port > 65535) { + return fmt.Errorf("port must be between 1 and 65535") + } + if option.PortRange != "" { + begin, end, err := beginAndEndPortFromPortRange(option.PortRange) + if err != nil { + return fmt.Errorf("invalid port-range format") + } + if begin < 1 || begin > 65535 { + return fmt.Errorf("begin port must be between 1 and 65535") + } + if end < 1 || end > 65535 { + return fmt.Errorf("end port must be between 1 and 65535") + } + if begin > end { + return fmt.Errorf("begin port must be less than or equal to end port") + } + } + if option.Transport != "TCP" { return fmt.Errorf("transport must be TCP") } @@ -299,36 +306,8 @@ func validateMieruOption(option MieruOption) error { return nil } -func getFirstPort(portStr string) (int, error) { - if portStr == "" { - return 0, fmt.Errorf("port string is empty") - } - parts := strings.Split(portStr, ",") - firstPart := parts[0] - - if strings.Contains(firstPart, "-") { - begin, _, err := beginAndEndPortFromPortRange(firstPart) - if err != nil { - return 0, err - } - return begin, nil - } - - port, err := strconv.Atoi(firstPart) - if err != nil { - return 0, fmt.Errorf("invalid port format: %s", firstPart) - } - return port, nil -} - func beginAndEndPortFromPortRange(portRange string) (int, int, error) { var begin, end int _, err := fmt.Sscanf(portRange, "%d-%d", &begin, &end) - if err != nil { - return 0, 0, fmt.Errorf("invalid port range format: %w", err) - } - if begin > end { - return 0, 0, fmt.Errorf("begin port is greater than end port: %s", portRange) - } return begin, end, err } diff --git a/clash-meta/adapter/outbound/mieru_test.go b/clash-meta/adapter/outbound/mieru_test.go index 2b7976e4c7..086b791044 100644 --- a/clash-meta/adapter/outbound/mieru_test.go +++ b/clash-meta/adapter/outbound/mieru_test.go @@ -1,51 +1,22 @@ package outbound -import ( - "reflect" - "testing" - - mieruclient "github.com/enfein/mieru/v3/apis/client" - mierupb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" - "google.golang.org/protobuf/proto" -) +import "testing" func TestNewMieru(t *testing.T) { - transportProtocol := mierupb.TransportProtocol_TCP.Enum() testCases := []struct { option MieruOption wantBaseAddr string - wantConfig *mieruclient.ClientConfig }{ { option: MieruOption{ Name: "test", Server: "1.2.3.4", - Port: "10000", + Port: 10000, Transport: "TCP", UserName: "test", Password: "test", }, wantBaseAddr: "1.2.3.4:10000", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - IpAddress: proto.String("1.2.3.4"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10000), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, }, { option: MieruOption{ @@ -57,212 +28,28 @@ func TestNewMieru(t *testing.T) { Password: "test", }, wantBaseAddr: "[2001:db8::1]:10001", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - IpAddress: proto.String("2001:db8::1"), - PortBindings: []*mierupb.PortBinding{ - { - PortRange: proto.String("10001-10002"), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, }, { option: MieruOption{ Name: "test", Server: "example.com", - Port: "10003", + Port: 10003, Transport: "TCP", UserName: "test", Password: "test", }, wantBaseAddr: "example.com:10003", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10003), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, - }, - { - option: MieruOption{ - Name: "test", - Server: "example.com", - Port: "10004,10005", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - wantBaseAddr: "example.com:10004", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10004), - Protocol: transportProtocol, - }, - { - Port: proto.Int32(10005), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, - }, - { - option: MieruOption{ - Name: "test", - Server: "example.com", - Port: "10006-10007,11000", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - wantBaseAddr: "example.com:10006", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - PortRange: proto.String("10006-10007"), - Protocol: transportProtocol, - }, - { - Port: proto.Int32(11000), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, - }, - { - option: MieruOption{ - Name: "test", - Server: "example.com", - Port: "10008", - PortRange: "10009-10010", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - wantBaseAddr: "example.com:10008", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10008), - Protocol: transportProtocol, - }, - { - PortRange: proto.String("10009-10010"), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, }, } for _, testCase := range testCases { mieru, err := NewMieru(testCase.option) if err != nil { - t.Fatal(err) + t.Error(err) } - config, err := mieru.client.Load() - if err != nil { - t.Fatal(err) - } - config.Dialer = nil if mieru.addr != testCase.wantBaseAddr { t.Errorf("got addr %q, want %q", mieru.addr, testCase.wantBaseAddr) } - if !reflect.DeepEqual(config, testCase.wantConfig) { - t.Errorf("got config %+v, want %+v", config, testCase.wantConfig) - } - } -} - -func TestNewMieruError(t *testing.T) { - testCases := []MieruOption{ - { - Name: "test", - Server: "example.com", - Port: "invalid", - PortRange: "invalid", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - { - Name: "test", - Server: "example.com", - Port: "", - PortRange: "", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - } - - for _, option := range testCases { - _, err := NewMieru(option) - if err == nil { - t.Errorf("expected error for option %+v, but got nil", option) - } } } @@ -276,7 +63,6 @@ func TestBeginAndEndPortFromPortRange(t *testing.T) { {"1-10", 1, 10, false}, {"1000-2000", 1000, 2000, false}, {"65535-65535", 65535, 65535, false}, - {"2000-1000", 0, 0, true}, {"1", 0, 0, true}, {"1-", 0, 0, true}, {"-10", 0, 0, true}, diff --git a/clash-meta/docs/config.yaml b/clash-meta/docs/config.yaml index 090e273668..0650bc5364 100644 --- a/clash-meta/docs/config.yaml +++ b/clash-meta/docs/config.yaml @@ -1024,8 +1024,8 @@ proxies: # socks5 - name: mieru type: mieru server: 1.2.3.4 - port: 2999 # 支持使用 ports 格式,例如 2999,3999 或 2999-3010,3950,3995-3999 - # port-range: 2090-2099 # 已废弃,请使用 port + port: 2999 + # port-range: 2090-2099 #(不可同时填写 port 和 port-range) transport: TCP # 只支持 TCP udp: true # 支持 UDP over TCP username: user diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 37ff152331..b4a09f970e 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -74,7 +74,7 @@ "@types/react-dom": "19.1.9", "@types/validator": "13.15.3", "@vitejs/plugin-legacy": "7.2.1", - "@vitejs/plugin-react": "5.0.3", + "@vitejs/plugin-react": "5.0.4", "@vitejs/plugin-react-swc": "4.1.0", "change-case": "5.4.4", "clsx": "2.1.1", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index 6daf1be2e5..fadd60706c 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -20,7 +20,7 @@ "@tauri-apps/api": "2.8.0", "@types/d3": "7.4.3", "@types/react": "19.1.14", - "@vitejs/plugin-react": "5.0.3", + "@vitejs/plugin-react": "5.0.4", "ahooks": "3.9.5", "d3": "7.9.0", "framer-motion": "12.23.22", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 7dddadd7d2..007d5ed794 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -400,8 +400,8 @@ importers: specifier: 7.2.1 version: 7.2.1(terser@5.36.0)(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitejs/plugin-react': - specifier: 5.0.3 - version: 5.0.3(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: 5.0.4 + version: 5.0.4(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitejs/plugin-react-swc': specifier: 4.1.0 version: 4.1.0(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) @@ -490,8 +490,8 @@ importers: specifier: 19.1.14 version: 19.1.14 '@vitejs/plugin-react': - specifier: 5.0.3 - version: 5.0.3(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: 5.0.4 + version: 5.0.4(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) ahooks: specifier: 3.9.5 version: 3.9.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -2613,6 +2613,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.35': resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} + '@rolldown/pluginutils@1.0.0-beta.38': + resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} + '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -3710,8 +3713,8 @@ packages: peerDependencies: vite: ^4 || ^5 || ^6 || ^7 - '@vitejs/plugin-react@5.0.3': - resolution: {integrity: sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==} + '@vitejs/plugin-react@5.0.4': + resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -10928,6 +10931,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.35': {} + '@rolldown/pluginutils@1.0.0-beta.38': {} + '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 @@ -11573,7 +11578,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.3 + '@babel/parser': 7.28.4 '@babel/types': 7.28.4 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 @@ -12067,12 +12072,12 @@ snapshots: transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@5.0.3(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitejs/plugin-react@5.0.4(vite@7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.35 + '@rolldown/pluginutils': 1.0.0-beta.38 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 vite: 7.1.7(@types/node@24.5.2)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) diff --git a/lede/package/libs/xcrypt/libcrypt-compat/Makefile b/lede/package/libs/xcrypt/libcrypt-compat/Makefile new file mode 100644 index 0000000000..a503523267 --- /dev/null +++ b/lede/package/libs/xcrypt/libcrypt-compat/Makefile @@ -0,0 +1,40 @@ +include $(TOPDIR)/rules.mk +include ../libxcrypt-common.mk + +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 +PKG_BUILD_DIR:=$(BUILD_DIR)/libcrypt-compat/$(PKG_SOURCE_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define Package/libcrypt-compat +$(Package/libxcrypt/Default) + TITLE+= - libc compatibility + DEPENDS:=@USE_GLIBC +endef + +Package/libcrypt-compat/description=$(Package/libxcrypt/description) + +CONFIGURE_ARGS += \ + --with-pic \ + --enable-year2038 \ + --disable-xcrypt-compat-files \ + --enable-obsolete-api=glibc \ + --enable-hashes=glibc + +define Package/libcrypt-compat/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcrypt.so.* $(1)/usr/lib/ +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcrypt.{a,la,so*} $(1)/usr/lib/ + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + # libcrypt.pc is symlink to libxcrypt.pc + $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libxcrypt.pc $(1)/usr/lib/pkgconfig/libcrypt.pc +endef + +$(eval $(call BuildPackage,libcrypt-compat)) diff --git a/lede/package/libs/xcrypt/libxcrypt-common.mk b/lede/package/libs/xcrypt/libxcrypt-common.mk new file mode 100644 index 0000000000..f4c5809d7d --- /dev/null +++ b/lede/package/libs/xcrypt/libxcrypt-common.mk @@ -0,0 +1,28 @@ +PKG_SOURCE_NAME:=libxcrypt +PKG_VERSION:=4.4.38 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=https://github.com/besser82/$(PKG_SOURCE_NAME)/releases/download/v$(PKG_VERSION) +PKG_HASH:=80304b9c306ea799327f01d9a7549bdb28317789182631f1b54f4511b4206dd6 + +PKG_MAINTAINER:= +PKG_LICENSE:=LGPL-2.1-or-later +PKG_LICENSE_FILES:=COPYING.LIB + +define Package/libxcrypt/Default + SECTION:=libs + CATEGORY:=Libraries + URL:=https://github.com/besser82/libxcrypt + TITLE:=Extended crypt library +endef + +define Package/libxcrypt/description + libxcrypt is a modern library for one-way hashing of passwords. It supports + a wide variety of both modern and historical hashing methods: yescrypt, + gost-yescrypt, scrypt, bcrypt, sha512crypt, sha256crypt, md5crypt, SunMD5, + sha1crypt, NT, bsdicrypt, bigcrypt, and descrypt. It provides the traditional + Unix crypt and crypt_r interfaces, as well as a set of extended interfaces + pioneered by Openwall Linux, crypt_rn, crypt_ra, crypt_gensalt, + crypt_gensalt_rn, and crypt_gensalt_ra. +endef diff --git a/lede/package/libs/xcrypt/libxcrypt/Makefile b/lede/package/libs/xcrypt/libxcrypt/Makefile new file mode 100644 index 0000000000..fea6b4854b --- /dev/null +++ b/lede/package/libs/xcrypt/libxcrypt/Makefile @@ -0,0 +1,47 @@ +include $(TOPDIR)/rules.mk +include ../libxcrypt-common.mk + +PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define Package/libxcrypt +$(Package/libxcrypt/Default) + BUILDONLY:=1 +endef + +define Package/libxcrypt/description + libxcrypt is a modern library for one-way hashing of passwords. It supports + a wide variety of both modern and historical hashing methods: yescrypt, + gost-yescrypt, scrypt, bcrypt, sha512crypt, sha256crypt, md5crypt, SunMD5, + sha1crypt, NT, bsdicrypt, bigcrypt, and descrypt. It provides the traditional + Unix crypt and crypt_r interfaces, as well as a set of extended interfaces + pioneered by Openwall Linux, crypt_rn, crypt_ra, crypt_gensalt, + crypt_gensalt_rn, and crypt_gensalt_ra. +endef + +CONFIGURE_ARGS += \ + --with-pic \ + --enable-year2038 \ + --disable-xcrypt-compat-files \ + --disable-shared \ + --disable-failure-tokens \ + --disable-obsolete-api \ + --enable-hashes=solaris + +define Package/libxcrypt/install + true +endef + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/ + $(INSTALL_DIR) $(1)/usr/lib/libxcrypt + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libcrypt.{a,la} $(1)/usr/lib/libxcrypt + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libxcrypt.pc $(1)/usr/lib/pkgconfig/ +endef + +$(eval $(call BuildPackage,libxcrypt)) diff --git a/mihomo/adapter/outbound/mieru.go b/mihomo/adapter/outbound/mieru.go index bfdf0e519f..8ef9cfd758 100644 --- a/mihomo/adapter/outbound/mieru.go +++ b/mihomo/adapter/outbound/mieru.go @@ -5,7 +5,6 @@ import ( "fmt" "net" "strconv" - "strings" "sync" CN "github.com/metacubex/mihomo/common/net" @@ -31,8 +30,8 @@ type MieruOption struct { BasicOption Name string `proxy:"name"` Server string `proxy:"server"` - Port string `proxy:"port,omitempty"` - PortRange string `proxy:"port-range,omitempty"` // deprecated + Port int `proxy:"port,omitempty"` + PortRange string `proxy:"port-range,omitempty"` Transport string `proxy:"transport"` UDP bool `proxy:"udp,omitempty"` UserName string `proxy:"username"` @@ -124,19 +123,13 @@ func NewMieru(option MieruOption) (*Mieru, error) { } // Client is started lazily on the first use. - // Use the first port to construct the address. var addr string - var portStr string - if option.Port != "" { - portStr = option.Port + if option.Port != 0 { + addr = net.JoinHostPort(option.Server, strconv.Itoa(option.Port)) } else { - portStr = option.PortRange + beginPort, _, _ := beginAndEndPortFromPortRange(option.PortRange) + addr = net.JoinHostPort(option.Server, strconv.Itoa(beginPort)) } - firstPort, err := getFirstPort(portStr) - if err != nil { - return nil, fmt.Errorf("failed to get first port from port string %q: %w", portStr, err) - } - addr = net.JoinHostPort(option.Server, strconv.Itoa(firstPort)) outbound := &Mieru{ Base: &Base{ name: option.Name, @@ -190,62 +183,54 @@ func buildMieruClientConfig(option MieruOption) (*mieruclient.ClientConfig, erro } transportProtocol := mierupb.TransportProtocol_TCP.Enum() - - portBindings := make([]*mierupb.PortBinding, 0) - if option.Port != "" { - parts := strings.Split(option.Port, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if strings.Contains(part, "-") { - _, _, err := beginAndEndPortFromPortRange(part) - if err == nil { - portBindings = append(portBindings, &mierupb.PortBinding{ - PortRange: proto.String(part), - Protocol: transportProtocol, - }) - } else { - return nil, err - } - } else { - p, err := strconv.Atoi(part) - if err != nil { - return nil, fmt.Errorf("invalid port value: %s", part) - } - portBindings = append(portBindings, &mierupb.PortBinding{ - Port: proto.Int32(int32(p)), - Protocol: transportProtocol, - }) - } - } - } - if option.PortRange != "" { - parts := strings.Split(option.PortRange, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - if _, _, err := beginAndEndPortFromPortRange(part); err == nil { - portBindings = append(portBindings, &mierupb.PortBinding{ - PortRange: proto.String(part), - Protocol: transportProtocol, - }) - } - } - } - var server *mierupb.ServerEndpoint if net.ParseIP(option.Server) != nil { // server is an IP address - server = &mierupb.ServerEndpoint{ - IpAddress: proto.String(option.Server), - PortBindings: portBindings, + if option.PortRange != "" { + server = &mierupb.ServerEndpoint{ + IpAddress: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + PortRange: proto.String(option.PortRange), + Protocol: transportProtocol, + }, + }, + } + } else { + server = &mierupb.ServerEndpoint{ + IpAddress: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + Port: proto.Int32(int32(option.Port)), + Protocol: transportProtocol, + }, + }, + } } } else { // server is a domain name - server = &mierupb.ServerEndpoint{ - DomainName: proto.String(option.Server), - PortBindings: portBindings, + if option.PortRange != "" { + server = &mierupb.ServerEndpoint{ + DomainName: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + PortRange: proto.String(option.PortRange), + Protocol: transportProtocol, + }, + }, + } + } else { + server = &mierupb.ServerEndpoint{ + DomainName: proto.String(option.Server), + PortBindings: []*mierupb.PortBinding{ + { + Port: proto.Int32(int32(option.Port)), + Protocol: transportProtocol, + }, + }, + } } } - config := &mieruclient.ClientConfig{ Profile: &mierupb.ClientProfile{ ProfileName: proto.String(option.Name), @@ -274,9 +259,31 @@ func validateMieruOption(option MieruOption) error { if option.Server == "" { return fmt.Errorf("server is empty") } - if option.Port == "" && option.PortRange == "" { - return fmt.Errorf("port must be set") + if option.Port == 0 && option.PortRange == "" { + return fmt.Errorf("either port or port-range must be set") } + if option.Port != 0 && option.PortRange != "" { + return fmt.Errorf("port and port-range cannot be set at the same time") + } + if option.Port != 0 && (option.Port < 1 || option.Port > 65535) { + return fmt.Errorf("port must be between 1 and 65535") + } + if option.PortRange != "" { + begin, end, err := beginAndEndPortFromPortRange(option.PortRange) + if err != nil { + return fmt.Errorf("invalid port-range format") + } + if begin < 1 || begin > 65535 { + return fmt.Errorf("begin port must be between 1 and 65535") + } + if end < 1 || end > 65535 { + return fmt.Errorf("end port must be between 1 and 65535") + } + if begin > end { + return fmt.Errorf("begin port must be less than or equal to end port") + } + } + if option.Transport != "TCP" { return fmt.Errorf("transport must be TCP") } @@ -299,36 +306,8 @@ func validateMieruOption(option MieruOption) error { return nil } -func getFirstPort(portStr string) (int, error) { - if portStr == "" { - return 0, fmt.Errorf("port string is empty") - } - parts := strings.Split(portStr, ",") - firstPart := parts[0] - - if strings.Contains(firstPart, "-") { - begin, _, err := beginAndEndPortFromPortRange(firstPart) - if err != nil { - return 0, err - } - return begin, nil - } - - port, err := strconv.Atoi(firstPart) - if err != nil { - return 0, fmt.Errorf("invalid port format: %s", firstPart) - } - return port, nil -} - func beginAndEndPortFromPortRange(portRange string) (int, int, error) { var begin, end int _, err := fmt.Sscanf(portRange, "%d-%d", &begin, &end) - if err != nil { - return 0, 0, fmt.Errorf("invalid port range format: %w", err) - } - if begin > end { - return 0, 0, fmt.Errorf("begin port is greater than end port: %s", portRange) - } return begin, end, err } diff --git a/mihomo/adapter/outbound/mieru_test.go b/mihomo/adapter/outbound/mieru_test.go index 2b7976e4c7..086b791044 100644 --- a/mihomo/adapter/outbound/mieru_test.go +++ b/mihomo/adapter/outbound/mieru_test.go @@ -1,51 +1,22 @@ package outbound -import ( - "reflect" - "testing" - - mieruclient "github.com/enfein/mieru/v3/apis/client" - mierupb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb" - "google.golang.org/protobuf/proto" -) +import "testing" func TestNewMieru(t *testing.T) { - transportProtocol := mierupb.TransportProtocol_TCP.Enum() testCases := []struct { option MieruOption wantBaseAddr string - wantConfig *mieruclient.ClientConfig }{ { option: MieruOption{ Name: "test", Server: "1.2.3.4", - Port: "10000", + Port: 10000, Transport: "TCP", UserName: "test", Password: "test", }, wantBaseAddr: "1.2.3.4:10000", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - IpAddress: proto.String("1.2.3.4"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10000), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, }, { option: MieruOption{ @@ -57,212 +28,28 @@ func TestNewMieru(t *testing.T) { Password: "test", }, wantBaseAddr: "[2001:db8::1]:10001", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - IpAddress: proto.String("2001:db8::1"), - PortBindings: []*mierupb.PortBinding{ - { - PortRange: proto.String("10001-10002"), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, }, { option: MieruOption{ Name: "test", Server: "example.com", - Port: "10003", + Port: 10003, Transport: "TCP", UserName: "test", Password: "test", }, wantBaseAddr: "example.com:10003", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10003), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, - }, - { - option: MieruOption{ - Name: "test", - Server: "example.com", - Port: "10004,10005", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - wantBaseAddr: "example.com:10004", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10004), - Protocol: transportProtocol, - }, - { - Port: proto.Int32(10005), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, - }, - { - option: MieruOption{ - Name: "test", - Server: "example.com", - Port: "10006-10007,11000", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - wantBaseAddr: "example.com:10006", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - PortRange: proto.String("10006-10007"), - Protocol: transportProtocol, - }, - { - Port: proto.Int32(11000), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, - }, - { - option: MieruOption{ - Name: "test", - Server: "example.com", - Port: "10008", - PortRange: "10009-10010", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - wantBaseAddr: "example.com:10008", - wantConfig: &mieruclient.ClientConfig{ - Profile: &mierupb.ClientProfile{ - ProfileName: proto.String("test"), - User: &mierupb.User{ - Name: proto.String("test"), - Password: proto.String("test"), - }, - Servers: []*mierupb.ServerEndpoint{ - { - DomainName: proto.String("example.com"), - PortBindings: []*mierupb.PortBinding{ - { - Port: proto.Int32(10008), - Protocol: transportProtocol, - }, - { - PortRange: proto.String("10009-10010"), - Protocol: transportProtocol, - }, - }, - }, - }, - }, - }, }, } for _, testCase := range testCases { mieru, err := NewMieru(testCase.option) if err != nil { - t.Fatal(err) + t.Error(err) } - config, err := mieru.client.Load() - if err != nil { - t.Fatal(err) - } - config.Dialer = nil if mieru.addr != testCase.wantBaseAddr { t.Errorf("got addr %q, want %q", mieru.addr, testCase.wantBaseAddr) } - if !reflect.DeepEqual(config, testCase.wantConfig) { - t.Errorf("got config %+v, want %+v", config, testCase.wantConfig) - } - } -} - -func TestNewMieruError(t *testing.T) { - testCases := []MieruOption{ - { - Name: "test", - Server: "example.com", - Port: "invalid", - PortRange: "invalid", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - { - Name: "test", - Server: "example.com", - Port: "", - PortRange: "", - Transport: "TCP", - UserName: "test", - Password: "test", - }, - } - - for _, option := range testCases { - _, err := NewMieru(option) - if err == nil { - t.Errorf("expected error for option %+v, but got nil", option) - } } } @@ -276,7 +63,6 @@ func TestBeginAndEndPortFromPortRange(t *testing.T) { {"1-10", 1, 10, false}, {"1000-2000", 1000, 2000, false}, {"65535-65535", 65535, 65535, false}, - {"2000-1000", 0, 0, true}, {"1", 0, 0, true}, {"1-", 0, 0, true}, {"-10", 0, 0, true}, diff --git a/mihomo/docs/config.yaml b/mihomo/docs/config.yaml index 090e273668..0650bc5364 100644 --- a/mihomo/docs/config.yaml +++ b/mihomo/docs/config.yaml @@ -1024,8 +1024,8 @@ proxies: # socks5 - name: mieru type: mieru server: 1.2.3.4 - port: 2999 # 支持使用 ports 格式,例如 2999,3999 或 2999-3010,3950,3995-3999 - # port-range: 2090-2099 # 已废弃,请使用 port + port: 2999 + # port-range: 2090-2099 #(不可同时填写 port 和 port-range) transport: TCP # 只支持 TCP udp: true # 支持 UDP over TCP username: user diff --git a/v2rayn/v2rayN/Directory.Build.props b/v2rayn/v2rayN/Directory.Build.props index c9f59177b7..69df0c7e2f 100644 --- a/v2rayn/v2rayN/Directory.Build.props +++ b/v2rayn/v2rayN/Directory.Build.props @@ -1,7 +1,7 @@ - 7.14.12 + 7.15.0 diff --git a/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs b/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs index a0518d2127..2f5ccb64d8 100644 --- a/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs +++ b/v2rayn/v2rayN/ServiceLib/Manager/AppManager.cs @@ -1,5 +1,3 @@ -using System.Reactive; - namespace ServiceLib.Manager; public sealed class AppManager diff --git a/v2rayn/v2rayN/ServiceLib/Sample/pac b/v2rayn/v2rayN/ServiceLib/Sample/pac index 1378c49f13..f4f5939b56 100644 --- a/v2rayn/v2rayN/ServiceLib/Sample/pac +++ b/v2rayn/v2rayN/ServiceLib/Sample/pac @@ -7,12 +7,12 @@ var rules = [ "030buy.com", "0rz.tw", "1-apple.com.tw", - "10.tt", "1000giri.net", "100ke.org", "10beasts.net", "10conditionsoflove.com", "10musume.com", + "111666.best", "123rf.com", "12bet.com", "12vpn.com", @@ -29,7 +29,6 @@ var rules = [ "177pic.info", "17t17p.com", "18board.com", - "18board.info", "18comic.org", "18comic.vip", "18hmanga.click", @@ -42,20 +41,18 @@ var rules = [ "1984bbs.com", "1984bbs.org", "1991way.com", - "1998cdp.org", "1bao.org", "1dumb.com", "1e100.net", "1eew.com", "1lib.domains", + "1lib.sk", "1mobile.com", - "1mobile.tw", "1point3acres.com", "1pondo.tv", "2-hand.info", "2000fun.com", "2008xianzhang.info", - "2017.hk", "2021hkcharter.com", "2047.name", "2047.one", @@ -68,7 +65,6 @@ var rules = [ "233abc.com", "233v2.com", "24hrs.ca", - "24smile.org", "25u.com", "2du5.com", "2lipstube.com", @@ -87,11 +83,11 @@ var rules = [ "3ren.ca", "3tui.net", "404museum.com", - "43110.cf", "466453.com", "4bluestones.biz", "4chan.com", "4dq.com", + "4everland.io", "4everproxy.com", "4gtv.tv", "4irc.com", @@ -109,7 +105,7 @@ var rules = [ "5278.cc", "5299.tv", "55comic.com", - "5aimiku.com", + "5657.com.tw", "5i01.com", "5isotoi5.org", "5maodang.com", @@ -124,6 +120,7 @@ var rules = [ "666kb.com", "666pool.cn", "69shu.com", + "69shuba.com", "69shuba.cx", "6do.news", "6do.world", @@ -146,8 +143,7 @@ var rules = [ "8news.com.tw", "8world.com", "8z1.net", - "9001700.com", - "908taiwan.org", + "91dasai.com", "91jinman.com", "91porn.com", "91porny.com", @@ -169,16 +165,13 @@ var rules = [ "abc.net.au", "abc.xyz", "abchinese.com", - "abclite.net", "abebooks.co.uk", "abebooks.com", "ablwang.com", "aboluowang.com", - "about.google", "about.me", - "aboutgfw.com", + "abplive.com", "abs.edu", - "ac.jp", "acast.com", "accim.org", "accountkit.com", @@ -226,7 +219,6 @@ var rules = [ "agro.hk", "ai-kan.net", "ai-wen.net", - "ai.google", "aiosearch.com", "aiph.net", "airasia.com", @@ -308,9 +300,9 @@ var rules = [ "amnesty.tw", "amnestyusa.org", "amnyemachen.org", - "amoiist.com", "ampproject.org", "amtb-taipei.org", + "amuletmc.com", "anchor.fm", "anchorfree.com", "ancsconf.org", @@ -363,8 +355,8 @@ var rules = [ "aol.co.uk", "aol.com", "aolnews.com", + "aomedia.org", "aomiwang.com", - "ap.org", "apartmentratings.com", "apartments.com", "apat1989.org", @@ -384,6 +376,7 @@ var rules = [ "aplusvpn.com", "appadvice.com", "appbrain.com", + "appdefensealliance.dev", "appdownloader.net", "appledaily.com", "appledaily.com.hk", @@ -412,12 +405,14 @@ var rules = [ "arethusa.su", "arlingtoncemetery.mil", "army.mil", + "arstechnica.net", "art4tibet1998.org", "arte.tv", "artofpeacefoundation.org", "artstation.com", "artsy.net", "arunachalforests.gov.in", + "arvanstorage.ir", "asacp.org", "asdfg.jp", "asg.to", @@ -425,10 +420,7 @@ var rules = [ "asiaharvest.org", "asianage.com", "asianews.it", - "asianfreeforum.com", "asiansexdiary.com", - "asianspiss.com", - "asianwomensfilm.de", "asiaone.com", "asiatgp.com", "asiatimes.com", @@ -447,13 +439,11 @@ var rules = [ "atgfw.org", "athenaeizou.com", "atlanta168.com", - "atlaspost.com", "atnext.com", "audacy.com", "audionow.com", "authorizeddns.net", "authorizeddns.org", - "authorizeddns.us", "autodraw.com", "av-e-body.com", "av.com", @@ -480,7 +470,6 @@ var rules = [ "azerbaycan.tv", "azerimix.com", "azirevpn.com", - "azubu.tv", "azurewebsites.net", "b-cdn.net", "b-ok.cc", @@ -525,7 +514,6 @@ var rules = [ "bartvpn.com", "bastillepost.com", "bayvoice.net", - "baywords.com", "bb-chat.tv", "bbc.co.uk", "bbc.com", @@ -583,6 +571,7 @@ var rules = [ "bet365.com", "betaclouds.net", "betfair.com", + "betterhash.net", "betternet.co", "bettervpn.com", "bettween.com", @@ -616,6 +605,7 @@ var rules = [ "biliworld.com", "billypan.com", "binance.com", + "binance.org", "binance.us", "binancezh.cc", "bing.com", @@ -633,7 +623,6 @@ var rules = [ "bitfinex.com", "bitget.com", "bithumb.com", - "bitinka.com.ar", "bitmex.com", "bitshare.com", "bitsnoop.com", @@ -648,6 +637,7 @@ var rules = [ "bl-doujinsouko.com", "blacked.com", "blacklogic.com", + "blackmagicdesign.com", "blackvpn.com", "blewpass.com", "blingblingsquad.net", @@ -660,7 +650,6 @@ var rules = [ "blockless.com", "blocktempo.com", "blog.de", - "blog.google", "blog.jp", "blogblog.com", "blogcatalog.com", @@ -756,17 +745,18 @@ var rules = [ "bodog88.com", "bolehvpn.net", "bonbonme.com", - "bonbonsex.com", "bonfoundation.org", "bongacams.com", "boobstagram.com", "book.com.tw", "bookdepository.com", "bookepub.com", + "booklive.jp", + "bookmeter.com", "books.com.tw", "booktopia.com.au", "bookwalker.com.tw", - "boomssr.com", + "bookwalker.jp", "bootstrapcdn.com", "borgenmagazine.com", "bot.nu", @@ -796,11 +786,9 @@ var rules = [ "breaking911.com", "breakingtweets.com", "breakwall.net", - "briefdream.com", "briian.com", "brill.com", "brizzly.com", - "brkmd.com", "broadbook.com", "broadpressinc.com", "brockbbs.com", @@ -811,6 +799,8 @@ var rules = [ "bsky.network", "bsky.social", "bt2mag.com", + "bt4g.org", + "bt4gprx.com", "bt95.com", "btaia.com", "btbit.net", @@ -826,6 +816,7 @@ var rules = [ "btguard.com", "btku.me", "btku.org", + "btloader.com", "btspread.com", "btsynckeys.com", "budaedu.org", @@ -868,6 +859,7 @@ var rules = [ "c-est-simple.com", "c-span.org", "c-spanvideo.org", + "c.gle", "c100tibet.org", "c2cx.com", "c3pool.com", @@ -881,15 +873,12 @@ var rules = [ "cactusvpn.com", "cafepress.com", "cahr.org.tw", - "caijinglengyan.com", "calameo.com", "calebelston.com", "calendarz.com", "calgarychinese.ca", "calgarychinese.com", "calgarychinese.net", - "calibre-ebook.com", - "caltech.edu", "cam4.com", "cam4.jp", "cam4.sg", @@ -1021,7 +1010,6 @@ var rules = [ "chicagoncmtv.com", "china-mmm.jp.net", "china-mmm.net", - "china-mmm.sa.com", "china-review.com.ua", "china-week.com", "china101.com", @@ -1104,7 +1092,6 @@ var rules = [ "chrlawyers.hk", "chrome.com", "chromecast.com", - "chromeenterprise.google", "chromeexperiments.com", "chromercise.com", "chromestatus.com", @@ -1118,7 +1105,9 @@ var rules = [ "chushigangdrug.ch", "ci-en.jp", "cia.gov", + "cici.com", "ciciai.com", + "ciciaicdn.com", "cienen.com", "cineastentreff.de", "cipfg.org", @@ -1139,7 +1128,6 @@ var rules = [ "civilhrfront.org", "civiliangunner.com", "civilmedia.tw", - "civisec.org", "civitai.com", "cixiaoya.club", "cjb.net", @@ -1162,8 +1150,8 @@ var rules = [ "clips4sale.com", "cloakpoint.com", "cloudcone.com", + "cloudflare-dns.com", "cloudflare-ipfs.com", - "cloudfront.net", "cloudfunctions.net", "cloudokyo.cloud", "club1069.com", @@ -1192,17 +1180,15 @@ var rules = [ "cnpolitics.org", "cnproxy.com", "cnyes.com", - "co.tv", "coat.co.jp", "cobinhood.com", "cochina.co", "cochina.org", "code1984.com", - "codeplex.com", "codeshare.io", "codeskulptor.org", "cofacts.tw", - "coin2co.in", + "coffeemanga.to", "coinbase.com", "coinbene.com", "coinegg.com", @@ -1217,12 +1203,10 @@ var rules = [ "colacloud.net", "collateralmurder.com", "collateralmurder.org", - "com.google", "com.uk", "comedycentral.com", "comefromchina.com", "comic-mega.me", - "comico.tw", "commandarms.com", "comments.app", "commentshk.com", @@ -1251,10 +1235,13 @@ var rules = [ "cotweet.com", "counter.social", "coursehero.com", + "covenantswatch.org.tw", "coze.com", "cpj.org", + "cpu-monkey.com", "cq99.us", "crackle.com", + "crashlytics.com", "crazypool.org", "crazys.cc", "crazyshit.com", @@ -1264,7 +1251,6 @@ var rules = [ "creaders.net", "creadersnet.com", "creativelab5.com", - "crisisresponse.google", "cristyli.com", "crocotube.com", "crossfire.co.kr", @@ -1287,6 +1273,7 @@ var rules = [ "ct.org.tw", "ctao.org", "ctfriend.net", + "ctinews.com", "ctitv.com.tw", "ctowc.org", "cts.com.tw", @@ -1312,7 +1299,6 @@ var rules = [ "cz.cc", "d-fukyu.com", "d.cash", - "d0z.net", "d100.net", "d2bay.com", "d2pass.com", @@ -1407,10 +1393,11 @@ var rules = [ "delicious.com", "democrats.org", "demosisto.hk", + "deno.com", + "deno.dev", "depositphotos.com", "derekhsu.homeip.net", "desc.se", - "design.google", "desipro.de", "dessci.com", "destroy-china.jp", @@ -1435,7 +1422,6 @@ var rules = [ "digitalnomadsproject.org", "diigo.com", "dilber.se", - "dingchin.com.tw", "dipity.com", "directcreative.com", "discoins.com", @@ -1474,7 +1460,6 @@ var rules = [ "dmm.com", "dns-dns.com", "dns-stuff.com", - "dns.google", "dns04.com", "dns05.com", "dns1.us", @@ -1496,10 +1481,8 @@ var rules = [ "dok-forum.net", "dolc.de", "dolf.org.hk", - "dollf.com", "domain.club.tw", "domain.glass", - "domains.google", "domaintoday.com.au", "donga.com", "dongtaiwang.com", @@ -1508,6 +1491,7 @@ var rules = [ "donmai.us", "dontfilter.us", "dontmovetochina.com", + "doom9.org", "doosho.com", "doourbest.org", "dorjeshugden.com", @@ -1518,10 +1502,8 @@ var rules = [ "doubibackup.com", "doubiyunbackup.com", "doublethinklab.org", - "doubmirror.cf", "douchi.space", "dougscripts.com", - "douhokanko.net", "doujincafe.com", "dowei.org", "dowjones.com", @@ -1545,14 +1527,12 @@ var rules = [ "dsmtp.com", "dssott.com", "dstk.dk", - "dtdns.net", "dtiblog.com", "dtic.mil", "dtwang.org", "duanzhihu.com", "dubox.com", "duck.com", - "duckdns.org", "duckduckgo.com", "duckload.com", "duckmylife.com", @@ -1602,6 +1582,7 @@ var rules = [ "e-traderland.net", "e-zone.com.hk", "e123.hk", + "e621.net", "earlytibet.com", "earthcam.com", "earthvpn.com", @@ -1621,7 +1602,6 @@ var rules = [ "ebookee.com", "ebtcbank.com", "ecfa.org.tw", - "echainhost.com", "echofon.com", "ecimg.tw", "eckosia.org", @@ -1635,6 +1615,7 @@ var rules = [ "edmontonservice.com", "edns.biz", "edoors.com", + "edrdg.org", "edubridge.com", "edupro.org", "edx-cdn.org", @@ -1678,8 +1659,6 @@ var rules = [ "enlighten.org.tw", "entermap.com", "entnt.com", - "environment.google", - "epa.gov.tw", "epac.to", "episcopalchurch.org", "epochhk.com", @@ -1748,7 +1727,6 @@ var rules = [ "evozi.com", "evschool.net", "exam.gov.tw", - "exblog.co.jp", "exblog.jp", "exchristian.hk", "excite.co.jp", @@ -1766,7 +1744,6 @@ var rules = [ "extmatrix.com", "extrabux.com", "extremetube.com", - "exx.com", "ey.gov.tw", "eyevio.jp", "eyny.com", @@ -1877,7 +1854,6 @@ var rules = [ "fc2cn.com", "fc2web.com", "fda.gov.tw", - "fdbox.com", "fdc64.de", "fdc64.jp", "fdc64.org", @@ -1913,6 +1889,7 @@ var rules = [ "filmingfortibet.org", "filthdump.com", "financetwitter.com", + "financialexpress.com", "finchvpn.com", "findbook.tw", "findmespot.com", @@ -1977,7 +1954,6 @@ var rules = [ "fountmedia.io", "fourthinternational.org", "foxbusiness.com", - "foxdie.us", "foxgay.com", "foxsub.com", "foxtang.com", @@ -2086,6 +2062,8 @@ var rules = [ "ftx.com", "fucd.com", "fuchsia.dev", + "fuckccp.com", + "fuckccp.xyz", "fuckcnnic.net", "fuckgfw.org", "fuckgfw233.org", @@ -2101,7 +2079,7 @@ var rules = [ "furbo.org", "furhhdl.org", "furinkan.com", - "furl.net", + "furrybar.com", "futurechinaforum.org", "futuremessage.org", "fux.com", @@ -2147,6 +2125,7 @@ var rules = [ "gardennetworks.com", "gardennetworks.org", "gartlive.com", + "garudalinux.org", "gate-project.com", "gate.io", "gatecoin.com", @@ -2191,7 +2170,6 @@ var rules = [ "getchu.com", "getcloak.com", "getfoxyproxy.org", - "getfreedur.com", "getgom.com", "geti2p.net", "getiton.com", @@ -2221,6 +2199,7 @@ var rules = [ "ghanely.me", "ghidra-sre.org", "ghostpath.com", + "ghproxy.com", "ghut.org", "giantessnight.com", "gifree.com", @@ -2239,6 +2218,8 @@ var rules = [ "githubassets.com", "githubcopilot.com", "githubusercontent.com", + "gitlab.com", + "gitlab.net", "gizlen.net", "gjczz.com", "glarity.app", @@ -2264,6 +2245,7 @@ var rules = [ "gmiddle.net", "gmll.org", "gmodules.com", + "gmp4.com", "gmx.net", "gnci.org.hk", "gnews.org", @@ -2345,6 +2327,7 @@ var rules = [ "google.cl", "google.cm", "google.cn", + "google.co", "google.co.ao", "google.co.bw", "google.co.ck", @@ -2531,7 +2514,6 @@ var rules = [ "googlehosted.com", "googleideas.com", "googleinsidesearch.com", - "googlelabs.com", "googlelocal.nl", "googlemail.com", "googlemaps.sv", @@ -2540,7 +2522,6 @@ var rules = [ "googleplay.com", "googleplus.com", "googlescholar.com", - "googlesile.com", "googlesource.com", "googlesyndication.com", "googleusercontent.com", @@ -2555,8 +2536,10 @@ var rules = [ "got-game.org", "gotdns.ch", "gotgeeks.com", + "gotquestions.org", "gotrusted.com", "gotw.ca", + "gov.ir", "gov.taipei", "gov.tw", "gr8domain.biz", @@ -2575,7 +2558,6 @@ var rules = [ "great-roc.org", "greatfire.org", "greatfirewall.biz", - "greatfirewallofchina.net", "greatfirewallofchina.org", "greatroc.org", "greatroc.tw", @@ -2591,7 +2573,6 @@ var rules = [ "grok.com", "grotty-monday.com", "ground.news", - "grow.google", "gs-discuss.com", "gsearch.media", "gstatic.com", @@ -2606,7 +2587,6 @@ var rules = [ "guancha.org", "guaneryu.com", "guangming.com.my", - "guangnianvpn.com", "guardster.com", "guishan.org", "gumroad.com", @@ -2693,7 +2673,6 @@ var rules = [ "helpeachpeople.com", "helplinfen.com", "helpster.de", - "helpuyghursnow.org", "helpzhuling.org", "henduohao.com", "hentai.to", @@ -2705,12 +2684,12 @@ var rules = [ "heritage.org", "heroku.com", "herokuapp.com", + "herominers.com", "heungkongdiscuss.com", "hexieshe.com", "hexieshe.xyz", "hexxeh.net", "heyuedi.com", - "heywire.com", "heyzo.com", "hgamefree.info", "hgseav.com", @@ -2769,7 +2748,6 @@ var rules = [ "hkcmi.edu", "hkcnews.com", "hkcoc.com", - "hkctu.org.hk", "hkdailynews.com.hk", "hkday.net", "hkdc.us", @@ -2783,13 +2761,10 @@ var rules = [ "hkgalden.com", "hkgolden.com", "hkgpao.com", - "hkgreenradio.org", "hkheadline.com", "hkhkhk.com", "hkhrc.org.hk", - "hkhrm.org.hk", "hkip.org.uk", - "hkja.org.hk", "hkjc.com", "hkjp.org", "hklft.com", @@ -2804,7 +2779,6 @@ var rules = [ "hkusu.net", "hkvwet.com", "hkwcc.org.hk", - "hkzone.org", "hmoegirl.com", "hmonghot.com", "hmv.co.jp", @@ -2839,6 +2813,7 @@ var rules = [ "hotair.com", "hotav.tv", "hotcoin.com", + "hotcool.tw", "hotels.cn", "hotfrog.com.tw", "hotgoo.com", @@ -2930,7 +2905,6 @@ var rules = [ "huyandex.com", "hwadzan.tw", "hwayue.org.tw", - "hwinfo.com", "hxwk.org", "hxwq.org", "hybrid-analysis.com", @@ -2952,7 +2926,6 @@ var rules = [ "iav19.com", "iavian.net", "ibiblio.org", - "ibit.am", "iblist.com", "iblogserv-f.net", "ibros.org", @@ -2965,7 +2938,6 @@ var rules = [ "icij.org", "icl-fi.org", "icoco.com", - "iconfactory.net", "iconpaper.org", "icu-project.org", "idaiwan.com", @@ -2973,14 +2945,13 @@ var rules = [ "identi.ca", "idiomconnection.com", "idlcoyote.com", + "idope.se", "idouga.com", "idreamx.com", - "idsam.com", "idv.tw", "ieasy5.com", "ied2k.net", "ienergy1.com", - "iepl.us", "ifanqiang.com", "ifcss.org", "ifjc.org", @@ -3055,7 +3026,6 @@ var rules = [ "illusionfactory.com", "ilove80.be", "ilovelongtoes.com", - "im.tv", "im88.tw", "imageab.com", "imagefap.com", @@ -3088,6 +3058,7 @@ var rules = [ "incloak.com", "incredibox.fr", "independent.co.uk", + "india.com", "indiablooms.com", "indianarrative.com", "indiandefensenews.in", @@ -3098,7 +3069,7 @@ var rules = [ "indsr.org.tw", "info-graf.fr", "informer.com", - "ingress.com", + "infura.io", "inherit.live", "initiativesforchina.org", "inkbunny.net", @@ -3122,7 +3093,6 @@ var rules = [ "inthenameofconfuciusmovie.com", "invidio.us", "inxian.com", - "iownyour.biz", "iownyour.org", "ipalter.com", "ipdefenseforum.com", @@ -3133,6 +3103,7 @@ var rules = [ "iphonetaiwan.org", "iphonix.fr", "ipicture.ru", + "ipify.org", "ipjetable.net", "ipobar.com", "ipoock.com", @@ -3142,9 +3113,10 @@ var rules = [ "iptv.com.tw", "iptvbin.com", "ipvanish.com", - "iqiyi.com", + "irangov.ir", "iredmail.org", "irib.ir", + "irna.ir", "ironpython.net", "ironsocket.com", "is-a-hunter.com", @@ -3182,6 +3154,7 @@ var rules = [ "itemdb.com", "itemfix.com", "ithome.com.tw", + "itiger.com", "itsaol.com", "itshidden.com", "itsky.it", @@ -3222,6 +3195,7 @@ var rules = [ "javakiba.org", "javbus.co", "javbus.com", + "javbus.sbs", "javdb.com", "javfinder.ai", "javfor.me", @@ -3236,6 +3210,7 @@ var rules = [ "javmoo.xyz", "javseen.com", "javtag.com", + "javtrailers.com", "javzoo.com", "javzz.com", "jbtalks.cc", @@ -3330,7 +3305,6 @@ var rules = [ "jwmusic.org", "jwplayer.com", "jyxf.net", - "k-doujin.net", "ka-wai.com", "kadokawa.co.jp", "kagyu.org", @@ -3379,7 +3353,6 @@ var rules = [ "kichiku-doujinko.com", "kik.com", "killwall.com", - "kimy.com.tw", "kindle4rss.com", "kindleren.com", "kingdomsalvation.org", @@ -3402,6 +3375,7 @@ var rules = [ "knowledgerush.com", "knowyourmeme.com", "ko-fi.com", + "kobe-np.co.jp", "kobo.com", "kobobooks.com", "kodingen.com", @@ -3416,6 +3390,7 @@ var rules = [ "kpkuang.org", "kqes.net", "kraken.com", + "krtc.com.tw", "krtco.com.tw", "ksdl.org", "ksnews.com.tw", @@ -3430,7 +3405,6 @@ var rules = [ "kurtmunger.com", "kusocity.com", "kwcg.ca", - "kwok7.com", "kwongwah.com.my", "kxsw.life", "kyofun.com", @@ -3459,7 +3433,6 @@ var rules = [ "laomiu.com", "laowang.vip", "laoyang.info", - "laptoplockdown.com", "laqingdan.net", "larsgeorge.com", "lastcombat.com", @@ -3469,6 +3442,8 @@ var rules = [ "lausan.hk", "law.com", "lbank.info", + "ldplayer.net", + "ldplayer.tw", "le-vpn.com", "leafyvpn.net", "lecloud.net", @@ -3485,15 +3460,11 @@ var rules = [ "lematin.ch", "lemonde.fr", "lenwhite.com", - "leorockwell.com", "lerosua.org", - "lers.google", "lesoir.be", "lester850.info", "letou.com", "letscorp.net", - "letsencrypt.org", - "levyhsu.com", "lflink.com", "lflinkup.com", "lflinkup.net", @@ -3549,7 +3520,6 @@ var rules = [ "litenews.hk", "lithium.com", "liu-xiaobo.org", - "liudejun.com", "liuhanyu.com", "liujianshu.com", "liuxiaobo.net", @@ -3569,7 +3539,6 @@ var rules = [ "lkcn.net", "llss.me", "lmsys.org", - "lncn.org", "load.to", "lobsangwangyal.com", "localbitcoins.com", @@ -3608,6 +3577,8 @@ var rules = [ "lsxszzg.com", "ltn.com.tw", "luckydesigner.space", + "luckymobile.ca", + "ludepress.com", "luke54.com", "luke54.org", "lupm.org", @@ -3641,6 +3612,7 @@ var rules = [ "mail.ru", "mailchimp.com", "maildns.xyz", + "mainichi.jp", "maiplus.com", "maizhong.org", "makemymood.com", @@ -3689,17 +3661,17 @@ var rules = [ "matome-plus.com", "matome-plus.net", "matrix.org", - "matsushimakaede.com", "matters.news", "matters.town", "mattwilcox.net", - "maturejp.com", + "maxai.co", "maxing.jp", "mayimayi.com", "mcadforums.com", "mcaf.ee", "mcfog.com", "mcreasite.com", + "mcusercontent.com", "md-t.org", "me.com", "me.me", @@ -3754,6 +3726,7 @@ var rules = [ "metacafe.com", "metacubex.one", "metafilter.com", + "metamask.io", "metart.com", "metarthunter.com", "meteorshowersonline.com", @@ -3770,6 +3743,7 @@ var rules = [ "mh4u.org", "mhradio.org", "mi.com", + "miami-airport.com", "michaelmarketl.com", "microsoft.com", "microvpn.com", @@ -3808,6 +3782,7 @@ var rules = [ "miniforum.org", "miningpoolhub.com", "ministrybooks.org", + "minjian-danganguan.org", "minzhuhua.net", "minzhuzhanxian.com", "minzhuzhongguo.org", @@ -3818,6 +3793,7 @@ var rules = [ "mirrormedia.com.tw", "mirrormedia.mg", "missav.com", + "missav.ws", "mist.vip", "mit.edu", "mitao.com.tw", @@ -3849,18 +3825,18 @@ var rules = [ "moeerolibrary.com", "moegirl.org", "moeshare.cc", + "moeyy.xyz", "mofa.gov.tw", "mofaxiehui.com", "mofos.com", "mog.com", "mohu.club", - "mohu.ml", "mohu.rocks", + "moj.gov.tw", "mojim.com", "mol.gov.tw", "molihua.org", "momoshop.com.tw", - "monar.ch", "mondex.org", "money-link.com.tw", "moneydj.com", @@ -3886,7 +3862,6 @@ var rules = [ "mos.ru", "mosucloud.site", "motherless.com", - "motiyun.com", "motor4ik.ru", "mousebreaker.com", "movements.org", @@ -3912,6 +3887,7 @@ var rules = [ "msn.com.tw", "mstdn.social", "mswe1.org", + "mt.co.kr", "mthruf.com", "mtw.tl", "mtzfile.pw", @@ -3938,7 +3914,6 @@ var rules = [ "my-private-network.co.uk", "my-proxy.com", "my03.com", - "my903.com", "myactimes.com", "myanniu.com", "myaudiocast.com", @@ -3964,7 +3939,6 @@ var rules = [ "myfreepaysite.com", "myfreshnet.com", "myftp.info", - "myftp.name", "myip.com", "myiphide.com", "myiphider.com", @@ -3998,15 +3972,14 @@ var rules = [ "mywww.biz", "myz.info", "naacoalition.org", - "nabble.com", "naitik.net", + "naixi.net", "nakido.com", "nakuz.com", "nalandabodhi.org", "nalandawest.org", "namgyal.org", "namgyalmonastery.org", - "namsisi.com", "nanhuyt.com", "nanopool.org", "nanyang.com", @@ -4027,6 +4000,7 @@ var rules = [ "nationsonline.org", "nationwide.com", "naughtyamerica.com", + "naver.com", "naver.jp", "navy.mil", "naweeklytimes.com", @@ -4047,12 +4021,10 @@ var rules = [ "nekoslovakia.net", "nengcard.com", "neo-miracle.com", + "neoforged.net", "neowin.net", - "nepusoku.com", "nesnode.com", - "net-fits.pro", "netalert.me", - "netbig.com", "netbirds.com", "netcolony.com", "netfirms.com", @@ -4075,6 +4047,7 @@ var rules = [ "newchen.com", "newgrounds.com", "newhighlandvision.com", + "newindianexpress.com", "newipnow.com", "newlandmagazine.com.au", "newmitbbs.com", @@ -4118,27 +4091,29 @@ var rules = [ "nflximg.net", "nflxso.net", "nflxvideo.net", + "nftstorage.link", "ng.mil", "nga.mil", "ngensis.com", - "ngodupdongchung.com", "nhentai.net", "nhi.gov.tw", "nhk-ondemand.jp", - "nic.google", "nic.gov", "nicovideo.jp", "nighost.org", "nightlife141.com", "nightswatch.top", "nike.com", + "nikke-en.com", + "nikke-jp.com", + "nikke-kr.com", "nikkei.com", "ninecommentaries.com", "ning.com", "ninjacloak.com", "ninjaproxy.ninja", "nintendium.com", - "ninth.biz", + "nirsoft.net", "nitter.cc", "nitter.net", "niu.moe", @@ -4156,7 +4131,6 @@ var rules = [ "nobodycanstop.us", "nodeseek.com", "nodesnoop.com", - "nofile.io", "nokogiri.org", "nokola.com", "noodlevpn.com", @@ -4168,6 +4142,7 @@ var rules = [ "nordstromrack.com", "nordvpn.com", "nos.nl", + "note.com", "notepad-plus-plus.org", "notion.site", "nottinghampost.com", @@ -4212,7 +4187,6 @@ var rules = [ "ntdtv.ru", "ntdtvla.com", "ntrfun.com", - "ntsna.gov.tw", "ntu.edu.tw", "nu.nl", "nubiles.net", @@ -4225,7 +4199,6 @@ var rules = [ "nutsvpn.work", "nuuvem.com", "nuvid.com", - "nuzcom.com", "nvdst.com", "nvquan.org", "nvtongzhisheng.org", @@ -4247,7 +4220,6 @@ var rules = [ "nytimes.com", "nytimes.map.fastly.net", "nytimg.com", - "nytlog.com", "nytstyle.com", "nzchinese.com", "nzchinese.net.nz", @@ -4285,10 +4257,10 @@ var rules = [ "okayfreedom.com", "okcoin.com", "okex.com", + "okinawatimes.co.jp", "okk.tw", "okpool.me", "okx.com", - "olabloga.pl", "old-cat.net", "olehdtv.com", "olelive.com", @@ -4326,21 +4298,20 @@ var rules = [ "onmypc.info", "onmypc.net", "onmypc.org", - "onmypc.us", "onthehunt.com", "ontrac.com", - "oopsforum.com", + "oojj.de", "open-assistant.io", "open.com.hk", "openai.com", "openallweb.com", "opendemocracy.net", + "opendesktop.org", "opendn.xyz", "openervpn.in", "openid.net", "openleaks.org", "opensea.io", - "opensource.google", "openstreetmap.org", "opentech.fund", "openvpn.net", @@ -4350,8 +4321,6 @@ var rules = [ "opera-mini.net", "opera.com", "opus-gaming.com", - "oraclecloud.com", - "orchidbbs.com", "organcare.org.tw", "organharvestinvestigation.net", "organiccrap.com", @@ -4361,9 +4330,9 @@ var rules = [ "orient-doll.com", "orientaldaily.com.my", "orn.jp", - "orzdream.com", "orzistic.org", "osfoora.com", + "osm.tw", "otcbtc.com", "otnd.org", "otto.de", @@ -4409,6 +4378,7 @@ var rules = [ "paljorpublications.com", "palmislife.com", "paltalk.com", + "pancakeswap.finance", "pandafan.pub", "pandapow.co", "pandapow.net", @@ -4432,7 +4402,6 @@ var rules = [ "partypoker.com", "passion.com", "passiontimes.hk", - "passwords.google", "paste.ee", "pastebin.com", "pastie.org", @@ -4462,7 +4431,6 @@ var rules = [ "peace.ca", "peacefire.org", "peacehall.com", - "pearlher.org", "peeasian.com", "peing.net", "pekingduck.org", @@ -4485,6 +4453,7 @@ var rules = [ "perplexity.ai", "persecutionblog.com", "persiankitty.com", + "pewresearch.org", "pfd.org.hk", "phapluan.org", "phayul.com", @@ -4502,6 +4471,7 @@ var rules = [ "picacomic.com", "picacomiccn.com", "picasaweb.com", + "picgo.net", "picidae.net", "picturedip.com", "picturesocial.com", @@ -4598,6 +4568,7 @@ var rules = [ "pornhub.com", "pornhubdeutsch.net", "pornhubpremium.com", + "pornmate.com", "pornmm.net", "pornoxo.com", "pornrapidshare.com", @@ -4616,7 +4587,6 @@ var rules = [ "post76.com", "post852.com", "postadult.com", - "postimg.org", "potato.im", "potatso.com", "potvpn.com", @@ -4629,20 +4599,23 @@ var rules = [ "pp.ru", "ppy.sh", "prayforchina.net", + "prcleader.org", "premeforwindows7.com", "premproxy.com", "presentation.new", "presentationzen.com", + "president.ir", "presidentlee.tw", + "pressreader.com", "prestige-av.com", "prettyvirgin.com", - "pride.google", "primevideo.com", "printfriendly.com", "prism-break.org", "prisoneralert.com", "pritunl.com", "privacybox.de", + "privacyguides.org", "private.com", "privateinternetaccess.com", "privatepaste.com", @@ -4668,7 +4641,6 @@ var rules = [ "proxydns.com", "proxylist.org.uk", "proxynetwork.org.uk", - "proxypy.net", "proxyroad.com", "proxytunnel.net", "proxz.com", @@ -4702,13 +4674,13 @@ var rules = [ "pure18.com", "pureapk.com", "pureconcepts.net", + "puredns.org", "pureinsight.org", "purepdf.com", "purevpn.com", "purplelotus.org", "pursuestar.com", "pushchinawall.com", - "pussthecat.org", "pussyspace.com", "putihome.org", "putlocker.com", @@ -4737,7 +4709,7 @@ var rules = [ "qiwen.lu", "qixianglu.cn", "qkshare.com", - "qmzdd.com", + "qmp4.com", "qoos.com", "qpoe.com", "qq.co.za", @@ -4745,7 +4717,6 @@ var rules = [ "qtrac.eu", "qtweeter.com", "quannengshen.org", - "quantumbooter.net", "questvisual.com", "quitccp.net", "quitccp.org", @@ -4776,10 +4747,10 @@ var rules = [ "radiotime.com", "radiovaticana.org", "radiovncr.com", + "radmin-vpn.com", "rael.org", "raggedbanner.com", "raidcall.com.tw", - "raidtalk.com.tw", "rainbowplan.org", "raindrop.io", "raizoji.or.jp", @@ -4803,11 +4774,9 @@ var rules = [ "ratx.com", "rawgit.com", "rawgithub.com", - "raxcdn.com", "razyboard.com", "rcinet.ca", "rd.com", - "rdio.com", "reabble.com", "read01.com", "read100.com", @@ -4832,6 +4801,7 @@ var rules = [ "redchinacn.org", "redd.it", "reddit.com", + "reddithelp.com", "redditlist.com", "redditmedia.com", "redditspace.com", @@ -4840,7 +4810,6 @@ var rules = [ "redtube.com", "referer.us", "reflectivecode.com", - "registry.google", "reimu.net", "relaxbbs.com", "relay.com.tw", @@ -4849,8 +4818,6 @@ var rules = [ "religioustolerance.org", "renminbao.com", "renyurenquan.org", - "rerouted.org", - "research.google", "resilio.com", "resistchina.org", "retweeteffect.com", @@ -4868,8 +4835,6 @@ var rules = [ "rferl.org", "rfi.fr", "rfi.my", - "rightbtc.com", - "rightster.com", "rigpa.org", "riku.me", "rileyguide.com", @@ -4900,7 +4865,6 @@ var rules = [ "rotten.com", "rou.video", "roucdn.link", - "rpglogs.com", "rsdlmonitor.com", "rsf-chinese.org", "rsf.org", @@ -4917,6 +4881,7 @@ var rules = [ "ruanyifeng.com", "rukor.org", "rule34.xxx", + "rule34video.com", "rumble.com", "runbtx.com", "rushbee.com", @@ -4932,9 +4897,15 @@ var rules = [ "s-nbcnews.com", "s1heng.com", "s1s1s1.com", + "s3-ap-northeast-1.amazonaws.com", + "s3-ap-northeast-2.amazonaws.com", "s3-ap-southeast-1.amazonaws.com", "s3-ap-southeast-2.amazonaws.com", + "s3-eu-central-1.amazonaws.com", "s3.amazonaws.com", + "s3.ap-northeast-2.amazonaws.com", + "s3.eu-central-1.amazonaws.com", + "s3.us-east-1.amazonaws.com", "s4miniarchive.com", "s8forum.com", "saboom.com", @@ -4946,10 +4917,8 @@ var rules = [ "safechat.com", "safeguarddefenders.com", "safervpn.com", - "safety.google", "sagernet.org", "saintyculture.com", - "saiq.me", "sakura-paris.org", "sakuralive.com", "sakya.org", @@ -4974,7 +4943,6 @@ var rules = [ "savetibetstore.org", "saveuighur.org", "savevid.com", - "say2.info", "sbme.me", "sbs.com.au", "scasino.com", @@ -4982,6 +4950,7 @@ var rules = [ "sciencemag.org", "sciencenets.com", "scieron.com", + "sclub.com.tw", "scmp.com", "scmpchinese.com", "scramble.io", @@ -5023,7 +4992,6 @@ var rules = [ "sethwklein.net", "setn.com", "settv.com.tw", - "setty.com.tw", "sevenload.com", "sex-11.com", "sex.com", @@ -5036,7 +5004,6 @@ var rules = [ "sexidude.com", "sexinsex.net", "sextvx.com", - "sexxxy.biz", "sf.net", "sfileydy.com", "sfshibao.com", @@ -5054,7 +5021,6 @@ var rules = [ "shadowsocks.com.hk", "shadowsocks.nu", "shadowsocks.org", - "shadowsocks9.com", "shafaqna.com", "shahit.biz", "shambalapost.com", @@ -5086,7 +5052,6 @@ var rules = [ "shicheng.org", "shiksha.com", "shiksha.ws", - "shinychan.com", "shipcamouflage.com", "shireyishunjian.com", "shitaotv.org", @@ -5102,7 +5067,6 @@ var rules = [ "showtime.jp", "showwe.tw", "shutterstock.com", - "shvoong.com", "shwchurch.org", "shwchurch3.com", "siddharthasintent.org", @@ -5119,9 +5083,9 @@ var rules = [ "simplecd.org", "simpleproductivityblog.com", "simpleswap.io", + "simplex.chat", "sina.com", "sina.com.hk", - "sina.com.tw", "sinchew.com.my", "singaporepools.com.sg", "singfortibet.com", @@ -5209,7 +5173,6 @@ var rules = [ "soc.mil", "social.edu.ci", "socialblade.com", - "socialwhale.com", "socks-proxy.net", "sockscap64.com", "sockslist.net", @@ -5220,9 +5183,8 @@ var rules = [ "softether.org", "softfamous.com", "softlayer.net", - "softnology.biz", "softonic.cn", - "softsmirror.cf", + "softonic.com", "softwarebychuck.com", "sogclub.com", "sogoo.org", @@ -5256,7 +5218,6 @@ var rules = [ "soubory.com", "soul-plus.net", "soulcaliburhentai.net", - "soumo.info", "soundcloud.com", "soundofhope.kr", "soundofhope.org", @@ -5325,6 +5286,7 @@ var rules = [ "stackoverflow.com", "stacksocial.com", "stage64.hk", + "standard.co.uk", "standupfortibet.org", "standwithhk.org", "stanford.edu", @@ -5334,6 +5296,7 @@ var rules = [ "startuplivingchina.com", "stat.gov.tw", "state.gov", + "statearmor.org", "static-economist.com", "statically.io", "staticflickr.com", @@ -5361,11 +5324,11 @@ var rules = [ "stoporganharvesting.org", "stoptibetcrisis.net", "storagenewsletter.com", - "stories.google", "storify.com", "storj.io", "storm.mg", "stormmediagroup.com", + "storry.tv", "stoweboyd.com", "straitstimes.com", "stranabg.com", @@ -5382,9 +5345,11 @@ var rules = [ "strongwindpress.com", "student.tw", "studentsforafreetibet.org", + "studybuddhism.com", "stumbleupon.com", "stupidvideos.com", "stweetly.com", + "subhd.tv", "substack.com", "successfn.com", "sueddeutsche.de", @@ -5392,7 +5357,6 @@ var rules = [ "sugobbs.com", "sugumiru18.com", "suissl.com", - "sulian.me", "summify.com", "sumrando.com", "sun1911.com", @@ -5407,7 +5371,6 @@ var rules = [ "suoluo.org", "supchina.com", "superfreevpn.com", - "superokayama.com", "superpages.com", "supervpn.net", "superzooi.com", @@ -5419,7 +5382,6 @@ var rules = [ "surfshark.com", "suroot.com", "surrenderat20.net", - "sustainability.google", "suyangg.com", "svsfx.com", "swagbucks.com", @@ -5437,7 +5399,6 @@ var rules = [ "syosetu.com", "sysresccd.org", "sytes.net", - "syx86.cn", "syx86.com", "szbbs.net", "szetowah.org.hk", @@ -5484,6 +5445,7 @@ var rules = [ "taiwanus.net", "taiwanyes.com", "talk853.com", + "talkatone.com", "talkboxapp.com", "talkcc.com", "talkonly.net", @@ -5492,6 +5454,7 @@ var rules = [ "tanc.org", "tangben.com", "tangren.us", + "tanks.gg", "taoism.net", "taolun.info", "tapanwap.com", @@ -5505,13 +5468,11 @@ var rules = [ "taweet.com", "tbcollege.org", "tbi.org.hk", - "tbicn.org", "tbjyt.org", - "tbpic.info", "tbrc.org", "tbs-rainbow.org", + "tbs.co.jp", "tbsec.org", - "tbsmalaysia.org", "tbsn.org", "tbsseattle.org", "tbssqh.org", @@ -5544,8 +5505,8 @@ var rules = [ "teepr.com", "tehrantimes.com", "telecomspace.com", + "telega.one", "telegra.ph", - "telegram-cdn.org", "telegram.dog", "telegram.me", "telegram.org", @@ -5553,6 +5514,7 @@ var rules = [ "telegramdownload.com", "telegraph.co.uk", "telesco.pe", + "tellapart.com", "tellme.pw", "tenacy.com", "tenor.com", @@ -5566,6 +5528,7 @@ var rules = [ "tfhub.dev", "tfiflve.com", "tg-me.com", + "tg.dev", "tgstat.com", "thaicn.com", "thb.gov.tw", @@ -5590,11 +5553,11 @@ var rules = [ "thedw.us", "theepochtimes.com", "thefacebook.com", - "thefrontier.hk", "thegay.com", "thegioitinhoc.vn", "thegly.com", "theguardian.com", + "thehansindia.com", "thehindu.com", "thehots.info", "thehousenews.com", @@ -5606,7 +5569,6 @@ var rules = [ "theporndude.com", "theportalwiki.com", "theprint.in", - "thereallove.kr", "therock.net.nz", "thesaturdaypaper.com.au", "thespeeder.com", @@ -5620,7 +5582,6 @@ var rules = [ "thetibetpost.com", "thetrotskymovie.com", "thetvdb.com", - "thevivekspot.com", "thewgo.org", "thewirechina.com", "theync.com", @@ -5634,6 +5595,7 @@ var rules = [ "thomasbernhard.org", "thongdreams.com", "threadreaderapp.com", + "threads.com", "threads.net", "threatchaos.com", "throughnightsfire.com", @@ -5738,10 +5700,12 @@ var rules = [ "ticket.com.tw", "tigervpn.com", "tiktok.com", + "tiktokcdn-eu.com", "tiktokcdn-us.com", "tiktokcdn.com", "tiktokv.com", "tiktokv.us", + "tiktokw.us", "tiltbrush.com", "timdir.com", "time.com", @@ -5752,7 +5716,6 @@ var rules = [ "tiney.com", "tineye.com", "tingtalk.me", - "tintuc101.com", "tiny.cc", "tinychat.com", "tinypaste.com", @@ -5764,13 +5727,11 @@ var rules = [ "tl.gd", "tma.co.jp", "tmagazine.com", - "tmdfish.com", "tmi.me", "tmpp.org", "tnaflix.com", - "tngrnow.com", - "tngrnow.net", "tnp.org", + "tnt-ea.com", "to-porno.com", "togetter.com", "toh.info", @@ -5783,7 +5744,6 @@ var rules = [ "tomonews.net", "tomp3.cc", "tongil.or.kr", - "tono-oka.jp", "tonyyan.net", "toodoc.com", "toonel.net", @@ -5867,7 +5827,6 @@ var rules = [ "tuidang.net", "tuidang.org", "tuidang.se", - "tuitui.info", "tuitwit.com", "tukaani.org", "tumblr.com", @@ -5896,11 +5855,9 @@ var rules = [ "turkistantimes.com", "turntable.fm", "tushycash.com", - "tutanota.com", "tuvpn.com", "tuzaijidi.com", "tv.com", - "tv.google", "tvants.com", "tvb.com", "tvboxnow.com", @@ -5968,11 +5925,8 @@ var rules = [ "twisternow.com", "twistory.net", "twit2d.com", - "twitbrowser.net", - "twitcause.com", "twitch.tv", "twitchcdn.net", - "twitgether.com", "twitgoo.com", "twitiq.com", "twitlonger.com", @@ -6009,6 +5963,7 @@ var rules = [ "twttr.com", "twurl.nl", "twyac.org", + "tx.me", "txxx.com", "tycool.com", "typekit.net", @@ -6031,6 +5986,7 @@ var rules = [ "udn.com.tw", "udnbkk.com", "udndata.com", + "udomain.hk", "uforadio.com.tw", "ufreevpn.com", "ugo.com", @@ -6077,6 +6033,7 @@ var rules = [ "untraceable.us", "unwire.hk", "uocn.org", + "upbit.com", "updatestar.com", "upghsbc.com", "upholdjustice.org", @@ -6130,7 +6087,6 @@ var rules = [ "uyghuraa.org", "uyghuramerican.org", "uyghurbiz.org", - "uyghurcanadian.ca", "uyghurcanadiansociety.org", "uyghurcongress.org", "uyghurensemble.co.uk", @@ -6148,7 +6104,6 @@ var rules = [ "v2ray.com", "v2raya.org", "v2raycn.com", - "v2raytech.com", "valeursactuelles.com", "van001.com", "van698.com", @@ -6203,7 +6158,6 @@ var rules = [ "virginia.edu", "virtualrealporn.com", "visibletweets.com", - "visiontimes.com", "visualstudio.com", "vital247.org", "viu.com", @@ -6283,12 +6237,12 @@ var rules = [ "vpnworldwide.com", "vporn.com", "vpser.net", + "vpsxb.net", "vraiesagesse.net", "vrchat.com", "vrmtr.com", "vrporn.com", "vrsmash.com", - "vs.com", "vtunnel.com", "vuku.cc", "vultryhw.com", @@ -6297,6 +6251,7 @@ var rules = [ "w-pool.com", "w.wiki", "w3.org", + "w3s.link", "waffle1999.com", "wahas.com", "waigaobu.com", @@ -6304,6 +6259,7 @@ var rules = [ "wailaike.net", "wainao.me", "waiwaier.com", + "walletconnect.com", "wallhaven.cc", "wallmama.com", "wallornot.org", @@ -6323,7 +6279,6 @@ var rules = [ "want-daily.com", "wanz-factory.com", "wapedia.mobi", - "warehouse333.com", "warroom.org", "waselpro.com", "washeng.net", @@ -6364,7 +6319,6 @@ var rules = [ "webworkerdaily.com", "wechatlawsuit.com", "weebly.com", - "weekmag.info", "wefightcensorship.org", "wefong.com", "weiboleak.com", @@ -6380,7 +6334,6 @@ var rules = [ "wengewang.com", "wengewang.org", "wenhui.ch", - "wenweipo.com", "wenxuecity.com", "wenyunchao.com", "wenzhao.ca", @@ -6395,7 +6348,6 @@ var rules = [ "wezhiyong.org", "wezone.net", "wforum.com", - "wha.la", "whatblocked.com", "whatbrowser.org", "whats.new", @@ -6446,9 +6398,7 @@ var rules = [ "williamhill.com", "willw.net", "wilsoncenter.org", - "windowsphoneme.com", "windscribe.com", - "windy.com", "wingamestore.com", "wingy.site", "winning11.com", @@ -6488,7 +6438,6 @@ var rules = [ "workerempowerment.org", "workers.dev", "workersthebig.net", - "workflow.is", "worldcat.org", "worldjournal.com", "worldpopulationreview.com", @@ -6529,6 +6478,8 @@ var rules = [ "wwitv.com", "www1.biz", "wwwhost.biz", + "wxw.cat", + "wxw.moe", "wzyboy.im", "x-art.com", "x-berry.com", @@ -6569,6 +6520,7 @@ var rules = [ "xiaoma.org", "xiaomi.eu", "xiaxiaoqiang.net", + "xicons.org", "xiezhua.com", "xihua.es", "xinbao.de", @@ -6581,7 +6533,6 @@ var rules = [ "xinyubbs.net", "xiongpian.com", "xiuren.org", - "xixicui.icu", "xizang-zhiye.org", "xjp.cc", "xjtravelguide.com", @@ -6610,7 +6561,6 @@ var rules = [ "xsden.info", "xsden.org", "xskywalker.com", - "xskywalker.net", "xt.com", "xt.pub", "xtube.com", @@ -6633,7 +6583,6 @@ var rules = [ "xxx.xxx", "xxxfuckmom.com", "xxxx.com.au", - "xxxy.biz", "xxxy.info", "xxxymovies.com", "xys.org", @@ -6647,6 +6596,7 @@ var rules = [ "yahoo.com.hk", "yahoo.com.tw", "yahoo.net", + "yahooinc.com", "yahoosandbox.com", "yakbutterblues.com", "yam.com", @@ -6657,6 +6607,7 @@ var rules = [ "yandex.ru", "yanghengjun.com", "yangjianli.com", + "yangzhi.org", "yasni.co.uk", "yasukuni.or.jp", "yayabay.com", @@ -6686,9 +6637,11 @@ var rules = [ "yinlei.org", "yipub.com", "yizhihongxing.com", + "ylive.jp", "yobit.net", "yobt.com", "yobt.tv", + "yodobashi.com", "yogichen.org", "yolasite.com", "yomiuri.co.jp", @@ -6713,7 +6666,6 @@ var rules = [ "yourtrap.com", "yousendit.com", "youshun12.com", - "youthforfreechina.org", "youthnetradio.org", "youthwant.com.tw", "youtu.be", @@ -6748,8 +6700,13 @@ var rules = [ "yyjlymb.xyz", "yysub.net", "yzzk.com", + "z-lib.fm", + "z-lib.fo", + "z-lib.gd", + "z-lib.gl", "z-lib.io", "z-lib.org", + "z-library.sk", "zacebook.com", "zalmos.com", "zamimg.com", @@ -6786,11 +6743,9 @@ var rules = [ "zhongguo.ca", "zhongguorenquan.org", "zhongguotese.net", - "zhongmeng.org", "zhongzidi.com", "zhoushuguang.com", "zhreader.com", - "zhuangbi.me", "zhuanxing.cn", "zhuatieba.com", "zhuichaguoji.org", @@ -6808,6 +6763,7 @@ var rules = [ "zmedia.com.tw", "zmw.cn", "zodgame.us", + "zodgame.xyz", "zoho.com", "zomobo.net", "zonaeuropa.com", @@ -6829,11 +6785,9 @@ var rules = [ "zuobiao.me", "zuola.com", "zvereff.com", - "zynaima.com", "zynamics.com", "zyns.com", "zyxel.com", - "zyzc9.com", "zzcartoon.com", "zzcloud.me", "zzux.com" diff --git a/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs b/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs index ade01d3c57..4c07271243 100644 --- a/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs +++ b/v2rayn/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs @@ -338,6 +338,6 @@ public class CheckUpdateViewModel : MyReactiveObject { return; } - found.Remarks = model.Remarks; + found.Remarks = model.Remarks; } } diff --git a/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs index a3468a01da..9f4d605ff4 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/App.axaml.cs @@ -1,4 +1,3 @@ -using System.Reactive; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; diff --git a/v2rayn/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs b/v2rayn/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs index 976c156d7f..f59eccb16c 100644 --- a/v2rayn/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs +++ b/v2rayn/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs @@ -19,7 +19,7 @@ public partial class StatusBarView : ReactiveUserControl InitializeComponent(); _config = AppManager.Instance.Config; - + ViewModel = StatusBarViewModel.Instance; ViewModel?.InitUpdateView(UpdateViewHandler);