当前位置: 首页 > 知识库问答 >
问题:

在ByteBuddy中附加远程主机进程

呼延臻
2023-03-14

我是ByteBuddy的新手,正在尝试为在远程进程上运行的进程设置指令插入。

我的远程进程是从-XX:startatachlistener开始的。

>

  • 在pom中创建了一个简单的Maven项目,其中包含以下内容。

     <dependency>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy-agent</artifactId>
         <version>1.10.7</version>
     </dependency>
     <!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy -->
     <dependency>
         <groupId>net.bytebuddy</groupId>
         <artifactId>byte-buddy</artifactId>
         <version>1.10.7</version>
     </dependency>
    

    使用premain方法创建了一个代理类。

     public class Agent {
    
          public static void premain(String args, Instrumentation instrumentation) {
    
                 System.out.println("Premain");
                 File file ;
                 try {
    
                         file = (new File("Agent.jar"));
                         ByteBuddyAgent.attach(file,"18467");
                     }
                     catch (Exception e)
                     {
                         e.printStackTrace();
                     }
    
             }
         }
    

    问题:-

    >

  • 我需要在这里生成一个gent.jar吗?否则,它会附带byte好友吗?

    ByteBuddyAgent。attach不接受远程主机名。如何定义要连接的远程主机进程?否则,byte-buddy应该在运行Java进程的同一主机上运行。

    下面的示例将运行代理和测试中的jar。

     java -javaagent:/path/to/agent.jar -cp jar-under-test.jar Foo.Main
    

    如何将代理附加器作为一个单独的进程运行,以将java代理附加到远程主机上运行的java进程?

  • 共有1个答案

    上官自明
    2023-03-14

    Java中的远程连接不仅可以来自同一主机,而且只能来自同一操作系统用户。这是一种安全机制,因为从远程位置接管任何Java进程都非常简单。

    Byte Buddy只是在其周围提供包装。您可以使用字节好友代理。jar作为您的代理,并将其附加到您自己的进程(ByteBuddyAgent.install())或远程进程。附加(pid,新文件(“byte buddy agent.jar”))。然后,可以通过安装程序类为整个Java进程提供一个插装实例。添加字节好友代理。命令行的jar对该进程具有相同的效果。

     类似资料:
    • 我在Google Cloud DataProc上创建了一个3节点(1个master,2个workers)的Apache Spark集群。当通过ssh与主服务器连接时,我可以向集群提交作业,但是我不能让它远程工作。我找不到任何关于如何做到这一点的文档,除了AWS上的一个类似问题,但这对我不起作用。 以下是我正在尝试的

    • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。

    • 问题内容: 我厌倦了插入 进入我的Python程序并通过控制台进行调试。我怎么办 连接远程调试器并插入来自用户的断点 接口? 问题答案: 使用Winpdb. 它是一个独立于平台的图形 GPL Python调试器,支持通过网络进行远程调试,多个 线程、名称空间修改、嵌入式调试、加密通信 比pdb快20倍。 特征: GPL许可证。Winpdb是免费软件。 兼容cpython2.3到2.6和python

    • 问题内容: 是否可以(直接使用命令或API)从远程主机启动容器? 假设我有两台具有不同体系结构的机器:-A是一台机器-B是一台机器 我想使用我的A机器在B机器上运行一个容器。起初,我认为可以使用以下命令: 但这个命令实际上拉图像,并试图在其中一些最终的机器运行它的原因很明显,你不能运行的图像所特有的一种机器。 机器A和B之间的通信正常。我可以运行诸如或的命令,它可以给我预期的结果: 我听说过并且还

    • 感谢您抽出时间阅读我的问题-我正在使用EclipseIDE。我希望Jsoup连接https url-https://www.icegate.gov.in/使用 但它在线程“main”javax中给出了错误,而当我对其他https(如linkedin)使用相同的代码时,它就工作了。。。我不知道如何解决这个问题。 我获得了该网站的证书,并安装在我的jre/lib/security文件夹中,但它对我也没

    • 在Ansible Playbook中,我在运行start service模块时出现了一个错误,因为我想在远程主机上启动数据库。我对Ansible是新手。 致命:[10.138.12.67]:失败!=>{“changed”:false,“msg”:“找不到请求的服务mysql:host”}