【问题标题】:Run code from input like if it was written in the source code从输入运行代码,就像它是在源代码中编写的一样
【发布时间】:2013-01-26 01:59:28
【问题描述】:

我目前正在用 Java 编写 TCP/IP 客户端。客户端应该能够做的唯一一件事就是运行服务器发送给它的代码。 我见过this question,但我的问题是代码会像另一个应用程序一样运行,但是如果客户端代码包含一个字符串并且服务器发送一条消息说,读取字符串并发回内容,那么客户端将无法这样做,因为该代码将在另一个不存在该字符串的程序中执行:-(

那么有没有一种方法可以让我从输入中运行代码,就像它是写在程序的源代码中一样?

非常感谢所有帮助:-)

例子:

客户端包含一个字符串“string0001”。 客户端应该运行服务器发送的代码。 服务器发送一个客户端应该能够执行的java代码块。 代码说:检查字符串的内容并将其发送回这个ip。 客户端现在应该能够读取字符串并将“string0001”发送回服务器 ip。

使用链接提供的解决方案,服务器发送的代码将像另一个程序一样执行,并且在该程序中服务器请求客户端读取的字符串不存在。

客户端现在可以运行代码,就像它是在客户端源中编写的一样,字符串存在。

希望有所帮助:-)

【问题讨论】:

  • 你能不能把这个分成几个步骤,一个一个地,详细说明客户端和服务器之间的数据流。目前这很难遵循。我敢肯定这是一个好问题,但你冒着被否决票的危险。
  • 请举个具体的例子。客户端代码中的字符串示例是什么?
  • 这听起来像是一场安全噩梦......
  • 您确定需要运行任意代码,而不是在客户端拥有服务器可以调用的函数吗?
  • 我敢肯定,这不是一场安全噩梦,因为服务器和客户端之间的连接是加密的,并且服务器已经过验证 :-) 我添加了一个示例 :-)

标签: java


【解决方案1】:

第一个问题是发送的源代码必须是完整的。 Java 是一种面向对象的语言,因此要执行的代码可能会引用尚未发送的类。

这导致了第二个问题......它如何知道它何时收到了所有代码,以及代码需要存放在哪些包和文件中?

如果代码是一个没有方法或类的非常简单的例程,您可以创建一个带有方法的类并将传递的代码插入其中,然后将其保存在内存中。

然后,您可以使用与回答 here 的问题类似的例程编译此代码。

【讨论】:

  • 但是当代码被编译时,它将无法从原始代码中读取字符串:-(或者我误解了什么?无论如何谢谢:-)
  • 那么您将在内存中的字符串中保存原始代码,因此如果您出于任何原因需要读取它,您将拥有它。
  • 一个更好的问题可能是,在新应用程序中执行的代码如何知道服务器 IP 是什么?如果您能够以某种方式将代码发送到新创建的应用程序中,并且代码显示在此端口上发送到此服务器,则该端口已被其他应用程序绑定。非常感谢您的帮助:-)
猜你喜欢
  • 1970-01-01
  • 2021-08-29
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多