HarmonyOS 鸿蒙Next中本地开启 TCP 端口 19401 进行监听

HarmonyOS 鸿蒙Next中本地开启 TCP 端口 19401 进行监听 APP 在运行过程中,本地开启 TCP 端口 19401 进行监听。该端口为 HarmonyOS ArkWeb 引擎的远程调试端口,若被恶意利用,可能导致用户敏感信息泄露或服务器被攻击。

续性问题(未完全解决):在移除了所有显式初始化调用、关闭了调试开关、使用了 release 签名后,19401 端口在 pro 产品构建中仍然打开

  • 通过 cat /proc/38710/net/tcp 确认端口属于 APP 进程
  • 分析认为:在 HarmonyOS 6.1(compileSdkVersion 6.1.0.105)上,ArkWeb 引擎在首次初始化 Web 组件时(被动初始化),系统级行为会自动打开 19401 无线调试端口,setWebDebuggingAccess(false) 在这一版本上对此端口无效。
  • 此行为与 APP 代码无关,属于系统/固件层面的默认行为。

更多关于HarmonyOS 鸿蒙Next中本地开启 TCP 端口 19401 进行监听的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

尊敬的开发者,您好,关于您所反馈的问题:

这边尝试在DevEco Studio 6.1.0 release以及 6.1.1 release,compatibleSdkVersion 也替换为对应版本的情况下复现该问题,未能复现成功。 在Web组件初始化时,未主动调用 webview.WebviewController.setWebDebuggingAccess(true, 19401) 接口的情况下,并不会出现自动开启19401调试端口的情况;并且在主动调用setWebDebuggingAccess接口开启19401端口作为调试端口情况下,再次调用setWebDebuggingAccess(false)也能正常关闭调试模式。

复现代码如下:

import { webview } from '@kit.ArkWeb'

@Entry
@Component
struct WebTest {
  webController: webview.WebviewController = new webview.WebviewController();

  aboutToAppear(): void {
    webview.WebviewController.setWebDebuggingAccess(true, 19401);
  }

  build() {
    Column() {
      Button('关闭远程调试')
        .onClick(() => {
          webview.WebviewController.setWebDebuggingAccess(false);
        })
      Web({
        src: '',
        controller: this.webController
      })
    }.width('100%')
    .height('100%')
  }
}

建议您升级至6.1.1 release版本后重新尝试,如果问题依旧存在,麻烦您提供以下信息以便更好的排查问题:

  • 能够复现问题的简单Demo代码
  • 您所使用的SDK版本,DevEco Studio版本以及复现该问题的设备类型和版本

请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。

更多关于HarmonyOS 鸿蒙Next中本地开启 TCP 端口 19401 进行监听的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者你好,正式Release版本务必关闭ArkWeb的网页调试功能。setWebDebuggingAccess()可以用于开启ArkWeb网页调试功能,默认配置下,调试功能处于关闭状态。在正式Release版本上务必保持关闭该功能。若开发者主动开启调试功能,将增加业务对外接口被恶意利用的风险。

错误做法:

try {
  webview.WebviewController.setWebDebuggingAccess(true); //为true表示开启
} catch (error) {}

参考文档:

关闭ArkWeb的网页调试功能

我这边建议把它当成“release 取证问题”来排:先不要直接认定是系统默认行为,先把所有可能开启 ArkWeb DevTools 的入口封死,并留下可复现证据。官方 WebviewController.setWebDebuggingAccess 文档里默认值是 false,也明确提示正式发布版本不建议启用网页调试,所以 release/pro 包里出现 19401,优先查构建分支和三方容器。

可以按这个顺序做:

  1. 全仓搜索,不只搜 ArkTS,也搜三方插件产物:
grep -R "setWebDebuggingAccess|19401|webDebug" ./entry ./oh_modules ./src -n
  1. 把开关集中到 Web 初始化前,并用构建变量硬限制:
import { webview } from '@kit.ArkWeb';

const ENABLE_WEB_DEBUG = false; // release/pro 固定 false,可由 debug product 覆盖
webview.WebviewController.setWebDebuggingAccess(ENABLE_WEB_DEBUG);
  1. 分别打 debug、release、pro 三个包,首次创建 Web 前后各执行一次端口核验:
hdc shell cat /proc/$(pidof your.bundle.name)/net/tcp | grep -i 4BC9
# 19401 十六进制是 4BC9
  1. 如果最小 Demo 只保留一个 Web 组件、未调用该接口仍出现监听,再把 demo、SDK/DevEco 版本、设备版本、端口归属进程、hilog 一起给官方复现。这样能区分“代码/插件误开”和“特定固件行为”。

参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-webview-webviewcontroller#setwebdebuggingaccess

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-debugging-with-devtools

19401 基本可以按 ArkWeb DevTools/远程调试链路来排查。建议先确认不是代码或三方插件在 release/pro 构建里仍调用了 webview.WebviewController.setWebDebuggingAccess(true, port),包括 Flutter/uni-app/Web 容器封装层里的调试开关。这个开关应在 Web 初始化前按构建类型控制,release 中不要开启;如果曾经开启过,后面再调用 false 不一定能覆盖已经创建出来的调试监听。若你确认所有显式调用、构建开关、三方插件调试配置都关了,最小工程只创建一个 Web 组件仍自动监听 19401,就建议作为 ArkWeb 6.1 行为问题反馈,并附上 release 构建方式、compileSdkVersion、设备版本和端口归属进程信息。

在HarmonyOS Next中,可使用@ohos.net.socket模块的TCPSocketServer类。创建实例后调用bind({address:'0.0.0.0', port:19401, family:1})绑定,再调用listen()开始监听。通过on('connect')事件处理接入连接。具体API参考官方文档。

该问题属于 HarmonyOS NEXT 6.1 系统行为:进程中首次加载 ArkWeb 引擎(哪怕只是被动依赖)时,系统会自动在 127.0.0.1:19401 开启内部调试端口,setWebDebuggingAccess(false) 对该端口无效。

解决/规避方式(按有效性排序):

  1. 移除 Web 依赖 – 应用若不使用 Web 组件,检查并排除所有 ArkWeb 相关模块,避免引擎被加载。
  2. 工程配置文件 – 在 src/main/resources/res/raw/ 下放置 enable_web_debugging 文件,内容为 false(部分 6.1 版本有效)。
  3. 系统升级 – 该行为已在后续系统更新中修正,升级至最新 HarmonyOS NEXT 版本可彻底解决。
  4. 端口安全性说明 – 该端口仅绑定 127.0.0.1,外网无法直接访问,风险有限。可通过 netstat -anp | grep 19401 确认监听地址。

若无法立即升级且应用确需使用 Web 组件,可评估业务对本地 Web 调试的需求,等待系统修复。核心是避免触发 ArkWeb 初始化或更新系统。

回到顶部