0

是否可以使用 Indy 模拟传入消息(如果它很重要:我使用的是 Indy 10 和 Delphi 2009)?我希望能够在本地创建这些消息,并且我希望 Indy 相信它们来自网络中的特定客户端。所有内部 Indy 处理(选择接收消息的线程等)应该与消息通过网络到达时完全相同。

有什么想法吗?提前感谢您的任何提示。

4

4 回答 4

5

您想要做的与 Indy 无关,因为您需要在低得多的级别上执行此操作。让 Indy 相信消息来自特定客户端的最简单方法是将适当准备的数据包注入网络堆栈。在 Google 或 Wikipedia 上阅读 TCP 数据包注入。EtterCap就是这样一种工具,它允许将数据包注入已建立的连接。但是,这肯定会进入灰色地带,因为某些工具在某些国家/地区是非法的。

无论如何,所有这一切都是恕我直言太复杂了。我不知道您到底想做什么,但是专门准备的客户端或服务器是在开发服务器或客户端应用程序时模拟某些行为的更好工具。你可以在本地运行它们,或者如果你需要不同的 IP 地址或子网,你可以用虚拟机做很多事情。

于 2009-04-29T09:03:16.347 回答
0

Indy 没有为此提供任何内置机制,但我不由自主地建议构建一个小型测试应用程序(或套件),该应用程序在您的开发机器上本地运行并连接到您的 Indy 服务器应用程序以重播消息.

如果 TCP 连接是在本地或从远程主机建立的,那么它应该与您的 Indy 服务器应用程序无关,因为创建服务器线程和处理命令的机制与这两种情况相同。

我的最后一次工作涉及使用 Indy,我们所有的测试都是使用类似的 Resender 类型的应用程序完成的,该应用程序将加载本地消息文件并将这些文件发送到 Indy 服务器应用程序。

HTH,祝你好运!

于 2009-04-29T08:40:33.933 回答
0

您可以做的一件事是创建虚拟机来运行您的测试客户端,这样它们就不会被视为“本地机器”,并且使用 VMS 创建一个复杂的网络相当简单——只要您有足够的内存和磁盘空间。使用 VM 进行测试的另一个优点是,您可以在专注于部署的时候完全消除开发环境。令人惊讶的是,一个人可以节省多少时间。

VirtualPC可从 Microsoft 免费下载,并且运行良好。 VMWare有另一种选择,但入门成本要高一些。出于开发目的,我更喜欢桌面版本,但服务器版本也很好用。您仍然需要获得许可证才能安装虚拟操作系统。 MSDN会员资格可能是最便宜的方式,它允许您为其他风格的操作系统构建测试环境。

于 2009-04-29T16:00:34.720 回答
0

Indy 具有跨平台支持的抽象堆栈机制(IDStack.pas)我认为你可以破解 Windows 的堆栈(IdStackWindows.pas)。这是一个类。你甚至可以考虑派生它并覆盖一些函数来进行破解。

于 2009-07-06T20:59:57.920 回答