2009-05-27 48 views
18

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

有没有办法让“中间人”传入数据包到一个开放的COM端口并检测哪些数据包正在发送?我正在使用.NET,但我可以接受任何类型的解决方案。

(我发现this在那里,但我不认为这会为我工作。)

+1

我认为hub4com应用程序(来自com0com)实际上可能会做你所需要的。 – 2009-05-27 14:18:47

回答

13

我用com0com - 这是伟大的设置虚拟COM端口 - 这并不能帮助你所有。

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

您应该可以编写一个虚拟COM端口,将您的数据分离到日志文件中。 Com0com是开源的,所以你可以用它作为一个起点。

另一种可能的解决方案可能是拿起一个rs232 splitter cable将串行信号分叉到另一个串行端口。

或者还有另一种可能性是Serial Sniffer program(或open source sniffer)。

或者尝试使用来自同一com0com网站的hub4com app

+1

你建议的嗅探器基本上是我已经写过的。我认为虚拟化可能是最热门的方式,但我喜欢分裂线路的想法。我能够捕获来自设备的数据包吗? – Daniel 2009-05-27 14:35:55

+0

你知道在哪里获得hub4com的代码该网站有exe文件,但我看不到代码。 – baash05 2009-06-17 05:24:06

+0

http://com0com.cvs.sourceforge.net/viewvc/com0com/hub4com/ 了那里通过: http://sourceforge.net/scm/?type=cvs&group_id=129551 – Kieveli 2009-06-17 14:37:19

4

我一直在走这条路。硬件分离器是最简单的解决方案。

hub4com安装程序将涉及“添加新硬件”向导。如果你有很多机器,地理上分离的机器或者技术上不熟练并且缺乏必要权限的用户,安装可能会很难。

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

+0

目前我所知道的是它在Windows上运行。其余的完全是黑盒子。不幸的是该系统在波兰,而我不是。我的接触是合理的计算机识字。如果拆分电缆将使我能够监听传入和传出的流量,那听起来就像是要走的路。 – Daniel 2009-05-27 16:29:58

+0

然后,分流器应该走的路。在我的情况下,我放弃了该解决方案,因为我们有另一个项目,供应商也希望使用分离器,而我不想考虑将其拆分两次。 – 2009-05-27 16:48:33

10

有什么办法,以 “中间人”

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

这种驱动程序的典型例子是可敬的SysInternals' PortMon utility。向您显示应用程序从串行端口发送和接收的所有内容,包括配置和数据。有很多这样的应用程序,只有谷歌的“串口过滤器驱动程序”(在源代码样本上很重要)和“串行端口监视器”。

与此有关的一个脚注,您确实倾向于在64位版本的Windows上遇到问题。绝大多数这些应用程序(包括PortMon)仅适用于32位版本。64位版本只允许安装经过认证的驱动程序,销售这些应用程序的资金非常少,无法证明费用合理。购物时请注意这一点。

0

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