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
尊敬的开发者,您好,关于您所反馈的问题:
这边尝试在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) {}
参考文档:
我这边建议把它当成“release 取证问题”来排:先不要直接认定是系统默认行为,先把所有可能开启 ArkWeb DevTools 的入口封死,并留下可复现证据。官方 WebviewController.setWebDebuggingAccess 文档里默认值是 false,也明确提示正式发布版本不建议启用网页调试,所以 release/pro 包里出现 19401,优先查构建分支和三方容器。
可以按这个顺序做:
- 全仓搜索,不只搜 ArkTS,也搜三方插件产物:
grep -R "setWebDebuggingAccess|19401|webDebug" ./entry ./oh_modules ./src -n
- 把开关集中到 Web 初始化前,并用构建变量硬限制:
import { webview } from '@kit.ArkWeb';
const ENABLE_WEB_DEBUG = false; // release/pro 固定 false,可由 debug product 覆盖
webview.WebviewController.setWebDebuggingAccess(ENABLE_WEB_DEBUG);
- 分别打 debug、release、pro 三个包,首次创建 Web 前后各执行一次端口核验:
hdc shell cat /proc/$(pidof your.bundle.name)/net/tcp | grep -i 4BC9
# 19401 十六进制是 4BC9
- 如果最小 Demo 只保留一个 Web 组件、未调用该接口仍出现监听,再把 demo、SDK/DevEco 版本、设备版本、端口归属进程、hilog 一起给官方复现。这样能区分“代码/插件误开”和“特定固件行为”。
参考:
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) 对该端口无效。
解决/规避方式(按有效性排序):
- 移除 Web 依赖 – 应用若不使用 Web 组件,检查并排除所有 ArkWeb 相关模块,避免引擎被加载。
- 工程配置文件 – 在
src/main/resources/res/raw/下放置enable_web_debugging文件,内容为false(部分 6.1 版本有效)。 - 系统升级 – 该行为已在后续系统更新中修正,升级至最新 HarmonyOS NEXT 版本可彻底解决。
- 端口安全性说明 – 该端口仅绑定
127.0.0.1,外网无法直接访问,风险有限。可通过netstat -anp | grep 19401确认监听地址。
若无法立即升级且应用确需使用 Web 组件,可评估业务对本地 Web 调试的需求,等待系统修复。核心是避免触发 ArkWeb 初始化或更新系统。

