From ed8fb7fa82712d4dd4a403746f9f3810766c982d Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 29 Sep 2024 11:07:45 +0800 Subject: [PATCH] Add obfs for Hysteria2 --- .../kotlin/com/v2ray/ang/dto/Hysteria2Bean.kt | 16 ++++++++++++--- .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 3 ++- .../kotlin/com/v2ray/ang/ui/ServerActivity.kt | 7 +++++++ .../com/v2ray/ang/util/fmt/Hysteria2Fmt.kt | 17 ++++++++++++++++ .../res/layout/activity_server_hysteria2.xml | 20 ++++++++++++++++++- .../app/src/main/res/values-ar/strings.xml | 1 + .../app/src/main/res/values-bn/strings.xml | 2 ++ .../app/src/main/res/values-fa/strings.xml | 1 + .../app/src/main/res/values-ru/strings.xml | 2 +- .../app/src/main/res/values-vi/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 2 +- .../src/main/res/values-zh-rTW/strings.xml | 1 + V2rayNG/app/src/main/res/values/strings.xml | 2 +- 13 files changed, 67 insertions(+), 8 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/Hysteria2Bean.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/Hysteria2Bean.kt index 387bfb6ae..c04f71b27 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/Hysteria2Bean.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/Hysteria2Bean.kt @@ -4,9 +4,19 @@ data class Hysteria2Bean( val server: String?, val auth: String?, val lazy: Boolean? = true, - val socks5: Socks5Bean?, - val tls: TlsBean? + val obfs: ObfsBean? = null, + val socks5: Socks5Bean? = null, + val tls: TlsBean? = null, ) { + data class ObfsBean( + val type: String?, + val salamander: SalamanderBean? + ) { + data class SalamanderBean( + val password: String?, + ) + } + data class Socks5Bean( val listen: String?, ) @@ -15,4 +25,4 @@ data class Hysteria2Bean( val sni: String?, val insecure: Boolean?, ) -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt index a2825dd0b..34e4402ac 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt @@ -104,7 +104,8 @@ data class V2rayConfig( var secretKey: String? = null, val peers: List? = null, var reserved: List? = null, - var mtu: Int? = null + var mtu: Int? = null, + var obfsPassword: String? = null, ) { data class VnextBean( diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt index f076c7fff..bc1ea3aff 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt @@ -118,6 +118,7 @@ class ServerActivity : BaseActivity() { private val et_reserved3: EditText? by lazy { findViewById(R.id.et_reserved3) } private val et_local_address: EditText? by lazy { findViewById(R.id.et_local_address) } private val et_local_mtu: EditText? by lazy { findViewById(R.id.et_local_mtu) } + private val et_obfs_password: EditText? by lazy { findViewById(R.id.et_obfs_password) } override fun onCreate(savedInstanceState: Bundle?) { @@ -292,7 +293,10 @@ class ServerActivity : BaseActivity() { } else { et_local_mtu?.text = Utils.getEditable(outbound.settings?.mtu.toString()) } + } else if (config.configType == EConfigType.HYSTERIA2) { + et_obfs_password?.text = Utils.getEditable(outbound.settings?.obfsPassword) } + val securityEncryptions = if (config.configType == EConfigType.SHADOWSOCKS) shadowsocksSecuritys else securitys val security = @@ -455,6 +459,9 @@ class ServerActivity : BaseActivity() { if (config.subscriptionId.isEmpty() && !subscriptionId.isNullOrEmpty()) { config.subscriptionId = subscriptionId.orEmpty() } + if (config.configType == EConfigType.HYSTERIA2) { + config.outboundBean?.settings?.obfsPassword = et_obfs_password?.text?.toString() + } MmkvManager.encodeServerConfig(editGuid, config) toast(R.string.toast_success) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/Hysteria2Fmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/Hysteria2Fmt.kt index a8e801d24..20312425b 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/Hysteria2Fmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/Hysteria2Fmt.kt @@ -40,6 +40,10 @@ object Hysteria2Fmt { server.port = uri.port server.password = uri.userInfo } + if (!queryParam["obfs-password"].isNullOrEmpty()) { + config.outboundBean?.settings?.obfsPassword = queryParam["obfs-password"] + } + return config } @@ -59,6 +63,10 @@ object Hysteria2Fmt { dicQuery["alpn"] = Utils.removeWhiteSpace(tlsSetting.alpn.joinToString(",")).orEmpty() } } + if (!outbound.settings?.obfsPassword.isNullOrEmpty()) { + dicQuery["obfs"] = "salamander" + dicQuery["obfs-password"] = outbound.settings?.obfsPassword ?: "" + } val query = "?" + dicQuery.toList().joinToString( separator = "&", @@ -76,9 +84,18 @@ object Hysteria2Fmt { fun toNativeConfig(config: ServerConfig, socksPort: Int): Hysteria2Bean? { val outbound = config.getProxyOutbound() ?: return null val tls = outbound.streamSettings?.tlsSettings + val obfs = if (outbound.settings?.obfsPassword.isNullOrEmpty()) null else + Hysteria2Bean.ObfsBean( + type = "salamander", + salamander = Hysteria2Bean.ObfsBean.SalamanderBean( + password = outbound.settings?.obfsPassword + ) + ) + val bean = Hysteria2Bean( server = outbound.getServerAddressAndPort(), auth = outbound.getPassword(), + obfs = obfs, socks5 = Hysteria2Bean.Socks5Bean( listen = "$LOOPBACK:${socksPort}", ), diff --git a/V2rayNG/app/src/main/res/layout/activity_server_hysteria2.xml b/V2rayNG/app/src/main/res/layout/activity_server_hysteria2.xml index f953cacc8..16b8feec7 100644 --- a/V2rayNG/app/src/main/res/layout/activity_server_hysteria2.xml +++ b/V2rayNG/app/src/main/res/layout/activity_server_hysteria2.xml @@ -13,6 +13,25 @@ + + + + + + + + - الملف غير موجود الملاحظات موجودة بالفعل الإجراء غير مسموح به + Obfs password جار التحميل diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml index b6264928f..a147c5be4 100644 --- a/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -111,6 +111,8 @@ ফাইল খুঁজে পাওয়া যায়নি মন্তব্য ইতিমধ্যে বিদ্যমান অ্যাকশন অনুমোদিত নয় + Obfs password + লোড হচ্ছে অনুসন্ধান করুন diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index 4ab979060..4993e6afc 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -105,6 +105,7 @@ URL دانلود فایل‌ها این عمل ممنوع است + Obfs password URL را اضافه کنید diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index 9acfee1dc..9489aeb30 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -110,7 +110,7 @@ Файл не найден Название уже существует Это действие запрещено - + Obfs password Загрузка… diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index e1b6cd542..7c2cfbaa8 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -105,6 +105,7 @@ URL Tải xuống tệp tin Hành động này bị cấm! + Obfs password Thêm URL nội dung diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index ba555d38c..147b61b56 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -105,7 +105,7 @@ URL 下载文件 禁止此项操作 - + 混淆密码 添加资产网址 diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index c7f61e2ad..e9b1b4729 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -105,6 +105,7 @@ URL 下載檔案 禁止此項操作 + 混淆密碼 新增資產網址 diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index 833b19a84..b93b66a3c 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -111,7 +111,7 @@ File not found The remarks already exists Action not allowed - + Obfs password Loading