我想要监控和分析的是从基于 Windows 的 POS 应用程序发送到收据打印机的数据。我无法控制 POS 应用程序(品牌可能有所不同,并且没有源代码),因此最好的方法是通过在 POS 和打印机之间连接硬件设备来拦截打印数据。
我读过一些资料,似乎大多数收据打印机都接受 ESC/POS 命令集。这是否意味着 POS 实际上发送 ESC/POS 命令,例如“PrintNormal xyz”?
但我还读到“发送到 ESC/POS 打印机的数据是嵌入 ESC/POS 命令的光栅数据”(请参阅拦截发送到 Windows 打印机的数据(使用 RedMon)),这是否可读?现在我不确定在不知道数据格式的情况下如何进行。
有人可以确认吗?
谢谢。
免责声明:所提出问题的合法性以及该答案和任何其他答案均受问题中未披露的许可条款的约束。使用时需自行承担风险和责任。别怪我。
我正在回答有关赏金文本的问题:
这个问题广泛适用于大量受众。需要详细的规范答案来解决所有问题。
由于我不确定拦截特定打印机协议的受众有多大,我将其解释为这意味着赏金寻求通过硬件窃听仅基于(尚未指定)总线对主从协议进行逆向工程的答案。
硬件:首先,识别总线。我最好的猜测是您正在处理 USB 或并行,但也可能是 9 针串行或专有的东西。无论如何,获取硬件级通信协议的文档,并构建一个简单的硬件设备来读取数据并将其镜像到其他地方。这可以是一种点击记录设置,它只是作为观察者默默地记录数据(许多示波器中都提供这一功能),也可以是 MITM 数据包级接收-记录-发送循环,它在一端模拟从站另一边是主人。我更喜欢后者,因为你对截获数据的完整性有更大的保证,并且能够将测试作业传输到从设备以测试你对协议的理解;以更复杂/昂贵的拦截器设计为代价。
由于最初的问题似乎是针对更高级别的协议,因此我将略过这部分。如果您需要更多建议,请评论。
软件:假设您现在有一个硬件级水龙头,您现在可以执行打印作业并检查记录的通信。我不希望在混淆数据格式上投入太多精力。在此状态下,您应该能够自行判断数据/通信是什么格式,以及其中使用了哪些具体命令。如果您看到的数据与预期格式不符,则您需要进行更多研究。
层协议:
现在我不确定在不知道数据格式的情况下如何进行。
我经常交替使用术语“格式”和“协议”。无论如何,POS 软件用于控制打印机的协议/格式几乎肯定是建立在一个更简单的协议之上,该协议对传输数据的目的一无所知。在这种情况下,我采用网络中固有的“层”术语。第1层是指电线电压的最基本含义。这包括以太网、USB、串行等。这是您的拦截器首先需要具备的协议。第 2 层是更特定用途的协议,例如 IP、块存储、打印机协议等。可以有更多层,但对于这个问题的范围,我将坚持使用第 2 层。检查 L1 有效负载的内容后,您可以开始对 L2 格式和感兴趣的命令进行逆向工程。
在另一个示例中,将 USB 视为 L1。现在,您可以将拇指驱动器、打印机或任意数量的其他设备插入同一个 USB 端口。这些设备都使用 L1=USB 协议,但可能都具有非常不同的 L2 协议。无论如何,为 L1=USB 构建的拦截器都可以同样出色地记录和/或镜像有效负载。更复杂的拦截器可能会尝试使用软件分析 L2 有效负载,或者您可以在捕获完成后使用软件工具(例如以太网或 USB 情况下的wireshark)来分析 L2 有效负载。
打印机特定:我希望收据打印机能够支持大多数指定的协议(ESC/POS 或其他协议),但 POS 软件设计者也只能选择少数命令。
我读过一些资料,似乎大多数收据打印机都接受 ESC/POS 命令集。这是否意味着 POS 实际上发送 ESC/POS 命令,例如“PrintNormal xyz”?
不会。大多数打印机接受该协议这一事实是 POS 作者选择该协议的一个很好的理由,但这并不意味着他们就这么做了。确定的最佳方法是检查源代码或截获的数据。如果您愿意,您当然可以检查编译后的代码。
光栅化:这纯粹是猜测。我可以看到专门使用栅格子集的情况,因为它限制了软件作者必须投入的理解协议的努力,同时允许在字体、缩进、文本大小等方面更好地控制最终产品。另外,考虑作者可能会将打印代码移植到许多不同的此类协议,以支持各种打印机。如果每个提议的打印机协议都支持光栅,那么他们可以制作一次事务到光栅代码,并找到一种简单的方法将该光栅发送到每个提议的协议的打印机。
结论:不,我无法确认您的系统使用的具体协议。但是,如果您能够像您的问题所暗示的那样拦截硬件通信,那么您应该接近自己这样做。
| 归档时间: |
|
| 查看次数: |
5058 次 |
| 最近记录: |