我正在处理一些使用RS232与外围设备通信的传统系统。我对COM接口的经验不是很熟悉。我有一些代码可以打开和使用COM端口,但它无法打开其他应用程序使用的端口。我需要对数据包进行黑盒子处理,以便我们可以使用相同的协议进行更新通信。
有没有办法将“中间人”传入的数据包发送到开放的COM端口并检测正在发送的数据包?我正在使用.NET,但我对任何类型的溶液
(我发现this在那里,但我不认为这对我有用。)
答案 0 :(得分:13)
我使用过com0com - 它非常适合设置虚拟COM端口 - 这根本没有帮助。
COM端口接口基本上是'文件读取'。当我尝试连接到已经有另一个实例读取的COM端口时,我的应用程序抛出一个异常。我不确定你是否可以尝试将其打开为“只读”而不是读写,但值得一试。
您应该能够编写一个可以将数据分叉到日志文件的虚拟COM端口。 Com0com是开源的,因此您可以将其作为起点。
另一种可能的解决方案是拿起rs232 splitter cable将串行信号分叉到另一个串口。
或另一种可能性是Serial Sniffer program(或open source sniffer)。
或者尝试来自同一个com0com网站的hub4com app!
答案 1 :(得分:10)
有没有办法去“中间人”
是的,有很多。通过“过滤器驱动程序”的概念在Windows中得到强有力的支持。这样的驱动程序可以插入到获取I / O请求的驱动程序之前,并查看经过的所有内容。通常用于更改I / O请求,但也非常适合简单地监视请求。男人在中间。
这种驱动程序的典型示例是值得尊敬的SysInternals' PortMon utility。显示应用程序向/从串行端口发送和接收的所有内容,包括配置和数据。有很多这样的应用程序,只有谷歌“串口过滤驱动程序”(源代码样本很重)和“串口监视器”。
对此一个脚注,您确实在64位版本的Windows上遇到问题。绝大多数这些应用程序(包括PortMon)仅适用于32位版本。 64位版本只允许安装经过认证的驱动程序,销售这些应用程序的资金很少,无法支付费用。当你购物时要小心。
答案 2 :(得分:4)
我一直走在同样的道路上。硬件分配器是最简单的解决方案。
hub4com设置将涉及“添加新硬件”向导。如果你有很多机器,地理位置分离的机器,或者技术不精通且缺乏必要权限的用户,安装可能会很尴尬。
如果这是遗留应用程序,它是否在ntvdm中运行?如果是这样,您可以在DosBox中运行它,并改变DosBox代码以写入文件,除了向/从串行端口发送/接收。 DosBox也是跨平台的。
答案 3 :(得分:0)
您还可以使用TCPcom将数据转换为以太网数据包并使用Wireshark进行监控 - 并将其广播到其他地方。然后,您可以使用另一个TCPcom实例将其转发到您喜欢的任何COM端口 - 包括虚拟COM端口。现在你已经基本上通过以太网劫持了数据。 https://sourceforge.net/projects/combytcp/?source=directory