19

我正在处理一些使用 RS232 与外围设备通信的遗留系统。我对 COM 接口不是很有经验。我有一些可以打开和使用 COM 端口的代码,但它无法打开其他应用程序使用的端口。我需要对数据包进行黑盒处理,以便我们可以使用相同的协议进行更新的通信。

有没有办法将传入数据包“中间人”到打开的 COM 端口并检测正在发送的数据包?我正在使用 .NET,但我愿意接受任何类型的解决方案。

(我在那里发现了这个,但我认为这对我不起作用。)

4

4 回答 4

13

我用过 com0com——它非常适合设置虚拟 com 端口——这对你一点帮助都没有。

COM 端口接口基本上是“文件读取”。当我尝试连接到已经有另一个实例从中读取的 COM 端口时,我的应用程序会引发异常。我不确定您是否可以尝试将其打开为“只读”而不是读写,但值得一试。

您应该能够编写一个可以将您的数据分叉到日志文件的虚拟 com 端口。Com0com 是开源的,因此您可以将其作为起点。

另一种可能的解决方案是使用rs232 分离器电缆将串行信号分叉到另一个串行端口。

或者另一种可能性是串行嗅探器程序 (或开源嗅探器)。

或者尝试来自同一个 com0com 网站的hub4com 应用程序!

于 2009-05-27T14:14:45.833 回答
11

有没有办法“中间人”

是的,有很多。通过“过滤器驱动程序”的概念在 Windows 中得到强烈支持。这样的驱动程序可以插入到获取 I/O 请求并查看经过的所有内容的驱动程序之前。通常用于更改 I/O 请求,但也非常适合简单地监视请求。中间的男人。

这种驱动程序的典型示例是古老的 SysInternals 的 PortMon 实用程序。向您显示应用程序向/从串行端口发送和接收的所有内容,包括配置和数据。有很多这样的应用程序,只有谷歌“串口过滤驱动程序”(大量源代码示例)和“串口监视器”。

一个脚注,你在 64 位版本的 Windows 上确实会遇到问题。这些应用程序中的绝大多数,包括 PortMon,只能在 32 位版本上运行。64 位版本只允许安装经过认证的驱动程序,出售这些应用程序几乎没有钱来证明费用是合理的。购物时请注意这一点。

于 2015-01-19T15:49:02.527 回答
4

我一直走在同样的道路上。硬件分离器是最简单的解决方案。

hub4com 设置将涉及“添加新硬件”向导。如果您有很多机器、地理位置分散的机器,或者技术不熟练且缺乏必要权限的用户,安装可能会很尴尬。

如果这是一个遗留应用程序,它是否在 ntvdm 中运行?如果是这样,您可以改为在DosBox中运行它,并更改 DosBox 代码以写入文件,以及向/从串行端口发送/接收。DosBox 也是跨平台的。

于 2009-05-27T15:52:03.047 回答
0

您还可以使用TCPcom将数据转换为以太网数据包,并使用 Wireshark 对其进行监控 - 并将其广播到其他地方。然后,您使用另一个 TCPcom 实例将其转发到您喜欢的任何 com 端口 - 包括虚拟 com 端口。现在您基本上已经通过以太网劫持了数据。 https://sourceforge.net/projects/combytcp/?source=directory

于 2016-03-30T13:39:56.540 回答