【问题标题】:decoding serial port communication解码串口通信
【发布时间】:2012-06-15 15:46:04
【问题描述】:

我希望在尝试编写一个允许我从我拥有的串行磁卡读卡器读取数据的软件方面得到一些帮助。

我们有这款读卡器,它是一种非常古老的设备,用于在我们的场地中获取会员的会员卡详细信息。读卡器有一个软件可以下载卡的详细信息(存储在读卡器上),然后该软件将详细信息放在 C 驱动器上的文本文件中。我想写一些软件来做同样的事情。

我可能找错了树或希望太多,但任何帮助都会很棒。

到目前为止,我已将读卡器连接到我机器的串行端口并运行旧版软件并使用 com 端口监视器来捕获通信。这就是我有点卡住的地方,想知道是否有人可以告诉我我捕获的内容是否有用,并希望能指出我正确的方向。

当读卡器上没有存储卡信息时,我运行下载序列并捕获它。

[12/06/2012 18:28:55] - Open port COM4

[12/06/2012 18:29:02] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:29:04] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:29:04] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:29:05] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:29:06] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:29:08] - Written data
35 00 07 00 0c 06 0c 12 1c 36 00 00 be              5........6..¾   

[12/06/2012 18:29:10] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:29:11] - Close port COM4

然后我刷了一张卡,读卡器将其存储在内存中并再次运行下载,这次我得到了这个

[12/06/2012 18:31:23] - Open port COM4

[12/06/2012 18:31:48] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:31:50] - Read data
31 00 06 00 0c 06 0c 00 00 00 00 55                 1..........U    

[12/06/2012 18:31:51] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:31:53] - Read data
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 51                       .C..c....Q      

[12/06/2012 18:31:55] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:31:57] - Written data
35 00 07 00 0c 06 0c 12 1f 16 00 00 a1              5...........¡   

[12/06/2012 18:32:01] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:32:01] - Close port COM4

最后我刷了 3 张卡,然后再次运行下载并捕获了这个

[12/06/2012 18:30:21] - Open port COM4

[12/06/2012 18:30:22] - Written data
31 00 01 00 00 00 32                                1.....2         

[12/06/2012 18:30:24] - Read data
31 00 06 00 0c 06 0c 00 03 00 00 58                 1..........X    

[12/06/2012 18:30:24] - Written data
32 00 04 00 03 00 01 00 00 3a                       2........:      

[12/06/2012 18:30:26] - Read data
32 00 1c 00 03 00 01 00 12 1e 58 28 54 08 33 00     2.........X(T.3.
12 1e 58 28 53 96 95 00 12 1e 58 28 54 12 32 00     ..X(S–•...X(T.2.
05 07                                               ..              

[12/06/2012 18:30:27] - Written data
33 00 01 00 00 00 34                                3.....4         

[12/06/2012 18:30:29] - Read data
33 00 14 00 06 03 00 01 0c 00 00 0d 00 00 42 00     3.............B.
00 43 00 00 63 00 00 00 01 52                       .C..c....R      

[12/06/2012 18:30:30] - Written data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Read data
34 00 01 00 00 00 35                                4.....5         

[12/06/2012 18:30:41] - Written data
35 00 07 00 0c 06 0c 12 1e 15 00 00 9f              5...........Ÿ   

[12/06/2012 18:30:43] - Read data
35 00 01 00 00 00 36                                5.....6         

[12/06/2012 18:30:43] - Close port COM4

我所知道的是,旧版软件会检查设备是否连接到所选的 com 端口,然后下载数据,然后从读卡器中清除数据

如果它有帮助..如果我没有连接读卡器并尝试下载,我会收到此错误

命令 0x31 未发送

任何人都可以对此有所了解吗?

提前谢谢你。

【问题讨论】:

  • 如果您能告诉我们您正在使用的硬件型号以及卡的种类,那将会非常更有帮助。如果您努力提前找到硬件手册,那就更好了。
  • 所有我都试过了,这是由一家不再存在的公司制造的传统定制硬件,并且硬件没有模型,因为它是一家相当定制的小公司。相信我,我已经费了很大的力气,这是我的解决方案,我在问是否有人可以提供建议。
  • 你能告诉我们卡的类型吗?射频识别?磁条?智能卡?你能注释日志,注意你在哪里刷了每张卡吗?卡片上是否有我们可以与数据对齐的任何类型的 ID 号?期望什么样的数据?旧软件是用什么写的?如果它是 VB6 之类的东西(或者如果你真的很幸运,.NET),你可能能够挖掘并更好地了解如何使用这些数据。另外,在同一张卡上刷几次就能得到数据吗?
  • 它是一个磁条阅读器。上面的数据不是刷卡时的数据,不是下载数据时的数据。在读卡器上进行刷卡,读卡器在内部存储刷卡,然后您使用软件从读卡器下载刷卡。我相信的应用程序是用 VB3 编写的,但我不能 100% 确定。最终在文本文件中结束的数据采用以下格式 123412345617:50006/12/12 {cardnumber}{time}{date}
  • 您是否考虑购买受支持并具有 SDK 和/或文档化协议的新阅读器?如果供应商停业并且无法支持该设备,那么继续使用它会给您的企业带来风险。如果它在关键时刻出现故障,那么您将无法轻松更换它。

标签: c# serial-port hex


【解决方案1】:

这是一个非常典型的串口协议。字节顺序是最小字节序。前两个字节是块号,即响应与请求的匹配方式以及如何检测数据包丢失。接下来的两个字节是消息的长度,以字节为单位。消息中的字节如下。最后两个字节是校验和,是在整个消息中添加字节的结果。 Big-endian 出于某种奇怪的原因,afaict。

这只是协议帧规范,对于一个人来说并不完美,因为它没有显示数据被加扰时会发生什么。 真正 重要的是消息中的数据字节。如果不联系制造商并获取规范,就无法找出这些字节的含义。

【讨论】:

    【解决方案2】:

    对这类协议非常熟悉,我能想到的唯一处理方法是:

    1. 联系制造商,为您提供他们的软件实用程序用于与卡对话的 API(消息格式)
    2. 对 API 协议进行逆向工程。这可能需要付出巨大的努力来弄清楚所有数据字节的含义,这些数据字节的含义会随着卡提供的功能数量呈指数增长。一个好的开始是刷一张卡并记录数据并重新启动硬件,刷第二张卡,记录并重新启动,第三张卡也是如此。然后在二进制消息之间进行二进制差异,以找出从一张卡更改为另一张卡的字节。

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多