JDWP了解 与解决 ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(

本文介绍了JDWP(Java Debug Wire Protocol)的错误,特别是当使用JDK1.5环境时遇到的远程调试端口扫描导致JVM崩溃的问题。问题源于不合规的JDWP数据包导致JVM的缺陷,表现为`JDWP exit error JVMTI_ERROR_NONE(0)`。解决方案包括关闭远程调试模式或升级到JDK1.6b49以上版本。此外,文章还讨论了Java调试体系JPDA,包括其组成部分JVMTI、JDWP和JDI,以及它们的角色和交互方式。
摘要由CSDN通过智能技术生成

转: http://blog.csdn.net/cicada688/article/details/8549031

 

 

此问题,搜搜找到正解真困难,转来mark。

 

JDWP

  JDWP 协议介绍   协议分析   Packet 的结构   JDWP 传输接口(Java Debug Wire Protocol Transport Interface)   JDWP 的命令实现机制   JDWP 的事件处理机制   JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)   其中常用的开发平台Eclipse中自带了JDWP兼容的调试器,命令行中常见的有jdb等

 

Web安全漏洞之:JDK1.5环境下扫描远程调试端口导致JVM崩溃【JDWP exit error JVMTI_ERROR_NONE(0)】

问题描述:

对运行在JDK 1.5版本下的java应用服务器进行端口扫描,扫描的方式可以用相关扫描软件,最简单的是直接用ping/telnet命令,有闲情还可以自己写一段代码进行socket连接,扫描时会发现java进程crash,经测试百发百中;查看运行日志显示:
ERROR: transport error 202: handshake failed - received >GET / HTTP/1.0< - excepted >JDWP-Handshake< ["transport.c",L41]
JDWP exit error JVMTI_ERROR_NONE(0): could not connect, timeout or fatal error

问题原因:

该故障是JVM远程debug存在的缺陷,只有在开启远程debug端口时才会出现;原因是由于接收到不符合JDWP协议的数据包,导致JVM崩溃。
该问题早已确认为JDK的一个bug,具体见6339385:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6339385 中的描述;
要确认系统中是否存在该漏洞,可以检查java启动参数中是否有如下相关配置:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787
或者-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
若存在相关配置,那就说明java启动了远程调试端口,就会存在该漏洞;此时JVM虚拟机作为调试的服务提供端,通过8787端口监听一个连接,而调试器通过该连接与虚拟机进行交互。
目前,Windows平台的JVM提供了两种方式的连接:共享内存和 Socket连接,共享内存的服务提供端和调试端只能位于同一台机,而Socket连接则支持不同异机调试,即远程调试。
关于jdwp的参数列表详见官方文档:http://download-llnw.oracle.com/javase/1.5.0/docs/guide/jpda/conninv.html#Invocation
从官方文档中摘录几个配置事例:
-Xrunjdwp:transport=dt_socket,server=y,address=8000
在8000端口监听Socket连接,挂起VM(suspend默认为y)并且不加载运行主函数直到调试请求到达
-Xrunjdwp:transport=dt_shmem,server=y,suspend=n
选择一个可用的共享内存(因为没有指定address)并监听该内存连接,同时加载运行主函数,不挂起VM
-Xrunjdwp:transport=dt_socket,address=myhost:8000
连接到myhost:8000提供的调试服务(server=n,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值