SenternalTech/tsp143-bridge
GitHub: SenternalTech/tsp143-bridge
用 Raspberry Pi 将 Star TSP143IIIU USB 收据打印机桥接为 Wi-Fi 网络打印机,兼容 Shopify POS 的 StarIO 协议,并附带 Star 专有协议的完整逆向工程文档。
Stars: 0 | Forks: 0
# TSP143IIIU Wi-Fi 打印桥接
将约 15 美元的 Raspberry Pi Zero 2 W 变成 Star
Micronics **TSP143IIIU**(仅支持 USB)收据打印机的 Wi-Fi 打印服务器,使 Shopify POS 应用
可以无线打印——包括钱箱弹出和真实的打印机
状态——无需 CUPS,无需 Star 驱动程序,也无需付费软件。
该桥接程序能足够逼真地模拟 Star LAN 打印机 (TSP143IIILAN),使得
Shopify 的 StarIO SDK 可以发现它、向其打印、弹出钱箱,
并在没有错误或重复打印的情况下读取实时打印机状态。
本仓库还提供了**我们所知的最完整的关于
Star Discovery Protocol、StarPRNT ASB 帧以及 StarPRNT
TCP/9101 状态轮询线格式的公开逆向工程资料**,这些均是从真实的 TSP143IIILAN 中逐字节
捕获的。请参阅下面的[协议研究](#protocol-research)。
## 目录
- [工作原理](#how-it-works) — 问题、解决方案、架构、数据流
- [Star ASB 协议](#star-asb-protocol) — ASB 是什么,USB 与 LAN 帧
差异,ETB 计数器,端口 9100 和 9101
- [价格对比](#price-comparison)
- [系统要求](#requirements)
- [安装说明](#installation)
- [Shopify POS 设置](#shopify-pos-setup)
- [文件参考](#file-reference)
- [诊断工具](#diagnostics)
- [运行操作](#operation)
- [故障排除](#troubleshooting)
- [适配其他打印机](#adapting-to-other-printers)
- [协议研究](#protocol-research) — 来自真实
Star LAN 打印机的 pcaps + 分析文档
- [逆向工程搜索索引](#search-index) — 本仓库
有意显露的关键词
- [开源许可](#license)
## 工作原理
### 问题所在
TSP143IIIU 仅支持 USB。iPad 无法直接连接到它(Star
打印机支架仅提供电源,不传输数据)。打印机需要以某种方式连接到
网络,而 Shopify POS 明确要求使用 StarIO 协议——
AirPrint、IPP 和通用网络打印均无效。
### 解决方案
此桥接程序位于 iPad 和 USB 打印机之间,在
网络端使用 TCP 运行 StarIO 协议,在打印机端使用原始 USB。它将自身呈现
为原生 Star LAN 打印机,因此 Shopify POS 会自动发现并使用它。
### 架构
该桥接程序暴露两个 TCP 端口和一个 UDP 发现响应器,与
真实的 Star LAN 打印机完全一样:
| 端口 | 协议 | 用途 |
|------|----------|---------|
| **9100** | StarIO 打印 (TCP) | 双向数据通道。Shopify 发送 StarPRNT 光栅打印数据;打印机返回报告盖子、纸张、错误和作业完成状态的 ASB (Automatic Status Back) 帧。 |
| **9101** | StarIO 状态 (TCP) | 短连接状态轮询通道。Shopify 连接,发送一个 51 字节的查询(`0x32` + 50 个 NUL),接收两个 11 字节的 ASB 帧(共 22 字节),然后断开连接。在打印期间每秒会轮询多次。 |
| **22222** | Star Discovery Protocol (UDP) | 响应 28 字节结构化的 `STR_BCAST` 查询,以便 Shopify 自动发现打印机。回复是一个固定布局的 302 字节 StarPRNT 身份数据包(型号、IP、MAC、子网掩码、网关、固件版本)。 |
单进程 `select()` 事件循环通过非阻塞 I/O 复用所有 TCP 连接和
USB 设备(`/dev/usb/lp0`)。一个独立的轻量级
进程(`star_discovery.py`)处理 UDP 发现。
### 数据流
```
Shopify POS (iPad) Bridge USB Printer
────────────────── ────── ───────────
1. UDP broadcast 28-byte STR_BCAST ───> star_discovery.py
<── 302-byte discovery response ───── (model, IP, port, MAC, mask, gw)
2. TCP connect to 9101 ──────────────────>
Send 51-byte status query ───────────>
<── 2x 11-byte ASB frames (22 bytes)── (cached from last USB read)
<── TCP FIN ──────────────────────────
3. TCP connect to 9100 ──────────────────>
Send ESC RS E 0 (clear ETB counter) ─> forward ──────────────────> /dev/usb/lp0
Send ETB marker ─────────────────────> forward ──────────────────>
<── ASB (9 bytes) ──
<── ASB (11 bytes, LAN format) ─────── transform & forward
4. Send raster print data (4-50 KB) ───> forward ──────────────────>
(Shopify polls 9101 every ~220ms (ASB cached, served on 9101)
to watch ETB counter change)
5. Printer finishes, sends final ASB ──────────── <── ASB ──────────
<── ASB (job complete) ──────────────── forward
TCP FIN (clean disconnect = success)
```
## Star ASB 协议
### 什么是 ASB?
ASB (Automatic Status Back) 是 Star 的双向状态协议。打印机发送报告其内部状态的固定长度状态帧:
| 字节 | 内容 |
|------|----------|
| 0 | 头部 — 在位 1-3 和 5-6 中编码帧长度。位 0 始终为 1(帧标记)。 |
| 1 | 版本 — 在位 1-3 和 5-6 中的协议版本。**在 LAN 打印机上,位 7 被设置为 (`0x80`)**(即 `0x86`,而 USB 则为 `0x06`)。 |
| 2 | 打印机状态 1 — 已执行 ETB (位 1),盖子打开 (位 5),脱机 (位 3)。 |
| 3 | 打印机状态 2 — 机械错误 (位 2),切刀错误 (位 3),打印头过热 (位 6)。 |
| 4 | 打印机状态 3 — 打印头抬起 (位 1),卡纸 (位 2),命令错误 (位 5)。 |
| 5 | 传感器信息 — 纸张即将用完 (位 1-2),缺纸 (位 3)。 |
| 6 | 传感器信息 2 — 出纸传感器 (位 1),票据检测器 (位 2-3)。 |
| 7 | ETB 计数器 — 分布在位 1、2、3、5、6 的 5 位计数器(非连续)。 |
| 8 | 保留(零)。 |
| 9-10 | LAN 打印机上的附加字节(零填充)。 |
有关已针对真实硬件验证的字节级解码版本,请参见
[`research/notes-asb-states.md`](research/notes-asb-states.md)。
### USB 与 LAN 帧差异
USB 打印机 (TSP143IIIU) 发送字节 1 为 `0x06` 的 **9 字节**帧。
LAN 打印机 (TSP100IIILAN / TSP143IIILAN) 发送字节 1 为 `0x86` 的 **11 字节**帧。桥接程序通过以下方式将 USB 帧转换为 LAN 格式:
1. 设置字节 1 的位 7(LAN 接口标志)
2. 用零填充至 11 字节
这是必要的,因为 StarIO 客户端会解析版本字节以确定
打印机类型和预期的帧大小。
### ETB 计数器 — 避免重复打印的关键
ETB(End-of-Transmission-Block,`0x17`)计数器是 ASB 帧中最关键的
字段。其工作原理如下:
1. Shopify 发送 `ESC RS E 0` 以**将计数器重置为零**
2. Shopify 发送包含**ETB 标记**在块边界的打印数据
3. 打印机每次处理 ETB 时递增其内部计数器
4. Shopify **轮询端口 9101** 并从 ASB 中读取计数器
5. 当计数器停止变化时,Shopify 知道作业已完成
6. 打印机物理上完成(切纸)后,它会发送一个最终的
主动 ASB,计数器再次递增
该计数器宽 5 位(范围 0–31),并且在达到 31 后**环绕至 0**,没有单独的
环绕标志。这 5 位以非连续位置分散在字节 7 中——
有关精确的位位置映射,请参见
[`research/notes-asb-states.md`](research/notes-asb-states.md)(该映射在 [`research/etb-sweep/`](research/etb-sweep/) 中对 32 个连续的
ETB 进行了逐字节验证)。
**关键设计教训:** 该桥接程序的早期版本在数据流中看到 ETB 标记时会立即生成
“合成的”ASB 响应,
而无需等待真实的打印机。这造成了两个独立的
计数器——桥接程序的软件计数器(在 9100 和 9101 上提供服务)和
真实打印机的硬件计数器(Shopify 永远看不到)。这两个计数器
不可避免地会失去同步,导致 Shopify 认为每个作业都失败了并
重试——从而导致 3 倍的重复打印。
**正确的方法:** 将所有数据未修改地转发到 USB 打印机。
让打印机处理 ETB 并维护自己的计数器。将
打印机真实的 ASB 帧转发回客户端。打印机是状态的
唯一真实来源。这更简单且 100% 正确。
### 端口 9101 状态轮询
Shopify 的 StarIO SDK 使用端口 9101 作为快速轮询状态通道,并采用
特定的协议:
1. TCP 连接
2. 发送 51 字节:`0x32` 后跟 50 个零字节
3. 接收 22 字节:两个连续的 11 字节 ASB 帧
4. 服务器关闭连接 (FIN)
在活跃打印期间,此循环每秒重复多次。在
打印作业之间,Shopify 在决定发送数据之前会进行 2-3 次探测并断开连接——
这是在真实 LAN 打印机和此桥接程序上观察到的正常行为。
此 **51 字节查询格式**和 **22 字节双帧响应结构**已逐字节记录在
[`research/notes-9101-lifecycle.md`](research/notes-9101-lifecycle.md) 中。
真实 Shopify 捕获的 51 字节查询已提交至
[`research/shopify-replay/sample-9101-query.bin`](research/shopify-replay/sample-9101-query.bin)
用于基于固件的测试。
桥接程序在 9101 上提供来自 USB 打印机的最近缓存的 ASB。
由于缓存会在真实打印机发送状态时更新,因此 9101 的
响应始终反映真实的 ETB 计数器和打印机状态。
真实的打印机还有一个确定性的 **5 秒空闲超时**:如果
客户端打开 9101 但不发送任何内容,打印机将在正好 5 秒后对连接执行 FIN。桥接程序的“accept+FIN”策略(提交 `756714b`)旨在匹配此行为;请参见
[`research/9101-lifecycle/`](research/9101-lifecycle/)。
### 端口 9100 打印通道
来自客户端的所有数据在经过最少量的过滤后传递到 USB:
- **ESC RS a 1**(启用 ASB)和 **ESC RS a 0**(禁用 ASB)被剥离,
因为桥接程序在启动时管理 USB 端的 ASB 并保持其始终开启。
- **其他所有内容**——包括 ETB 标记、ESC RS E 0(清除计数器)、
ESC @(重置)、光栅数据、钱箱命令——均未修改地传递
到 USB 打印机。
来自 USB 打印机的 ASB 帧被转换为 LAN 格式并转发
回 TCP 客户端。
## 价格对比
| 型号 | 全新 | 二手 / 翻新 |
|---|---|---|
| TSP143IIIU (USB) | $280 - $355 | ~$180 |
| TSP143IIILAN (以太网) | $324 - $454 | $145 - $224 |
| TSP143IIIW (Wi-Fi) | ~$389 | -- |
| TSP143IIIBi (蓝牙) | $375 - $519 | ~$290 |
| **Raspberry Pi Zero 2 W** | **$15** | -- |
如果您已经拥有 TSP143IIIU,增加一个 15 美元的 Pi 大约比
购买一台有网络功能的 Star 打印机**便宜 20 倍**。
*(价格取样于 2026 年 4 月,来自 POSSupply、Barcode Factory、eBay。)*
## 系统要求
- Raspberry Pi Zero 2 W(或任何带有 Wi-Fi 的 Pi),与 iPad 在同一网络中
- Star Micronics TSP143IIIU 通过 USB 连接,暴露为 `/dev/usb/lp0`
- Python 3.9+(Raspberry Pi OS Lite 自带)
- 不需要 CUPS,不需要 Star CUPS 驱动程序,除了 stdlib 之外无需任何 Python 依赖
## 安装说明
1. 刷入 Raspberry Pi OS Lite,配置 Wi-Fi,通过 SSH 登录。
2. 将 TSP143IIIU 插入 Pi 的 USB 端口并开机。
3. 克隆并安装:
```
git clone tsp143-bridge
cd tsp143-bridge
sudo ./install.sh
```
安装程序将:
- 如果缺少 Python 3 则进行安装
- 创建一个拥有 `/dev/usb/lp0` 访问权限的 `tsp-bridge` 服务用户
- 将运行时文件复制到 `/opt/tsp143-bridge/`
- 安装并启用 `tsp143-bridge` systemd 服务
- 打印出 Pi 的 IP 地址以供参考
## Shopify POS 设置
1. 在 iPad 上, **Shopify POS > 设置 > 硬件 > 打印机**。
2. 打印机应自动显示为 Star TSP143III。
3. 对于钱箱:**设置 > 硬件 > 钱箱** > 选择该打印机。
## 文件参考
| 文件 | 用途 |
|------|---------|
| `print_server_bidir.py` | 主桥接程序 — 从 TCP 9100/9101 到 USB 的双向中继,带有 ASB 转发。注释详尽,方便任何人将其适配到其他 Star 打印机。 |
| `star_discovery.py` | UDP 22222 发现响应器 — 使桥接程序在网络中显示为 Star LAN 打印机。发送真实的 302 字节 StarPRNT 身份回复。通过 `SIOCGIFNETMASK` ioctl + `/proc/net/route` 读取实时的网络掩码和网关。 |
| `stario_proto.py` | ASB 帧解析器和状态解码器 — 处理 9 字节 USB 和 11 字节 LAN 帧格式;解码 5 位非连续的 ETB 计数器。在桥接程序和诊断工具之间共享。 |
| `stario_client.py` | 独立的 StarIO 诊断客户端 — 连接到桥接程序或真实的 Star 打印机以检查 ASB 帧、发送测试打印并调试协议问题。 |
| `run.sh` | 启动脚本 — 启动桥接程序和发现响应器,如果其中一个退出,则同时终止两者。 |
| `install.sh` | 安装程序 — 设置 systemd 服务、用户、权限。 |
| `tsp143-bridge.service` | systemd 单元文件。 |
| `asb.pdf` | Star 官方的 ASB 规范手册(参考)。 |
| `research/` | 来自真实 Star LAN 打印机的数据包捕获和协议说明。请参见[协议研究](#protocol-research)。 |
## 诊断工具
`stario_client.py` 使用与 Shopify 相同的 StarIO 协议。将其指向
桥接程序或真实的 Star LAN 打印机:
```
# 发送一个测试打印任务并观察解码的 ASB 响应:
python3 stario_client.py --probe
# 被动观察 ASB 30秒(打开/关闭盖子、拉纸等):
python3 stario_client.py --watch 30
```
有关更复杂的探测(完整 pcap 捕获、场景演练、
Shopify 收据重播),请参见 [`research/probe.py`](research/probe.py) 和
[`research/capture.sh`](research/capture.sh)。
## 运行操作
```
# Live logs
journalctl -u tsp143-bridge -f
# 重启
sudo systemctl restart tsp143-bridge
# 状态
systemctl status tsp143-bridge
```
CLI 参数(编辑 `/opt/tsp143-bridge/run.sh` 进行自定义):
- `print_server_bidir.py -p 9100 -s 9101 -d /dev/usb/lp0 -v`
- `star_discovery.py -m TSP143III -p 9100 -v`
## 故障排除
| 症状 | 原因与解决方法 |
|---------|-------------|
| 打印机未在 Shopify 中被发现 | iPad 和 Pi 必须在同一子网上,且没有客户端隔离。检查 `journalctl -u tsp143-bridge -f` 中是否有 `Discovery request from ...` 行。如果桥接程序日志显示有查询但 Shopify 未列出打印机,则 iPad 的 WiFi 可能位于单独的 VLAN 中 — 另请参见 [`research/notes-discovery-tsp143iiilan.md`](research/notes-discovery-tsp143iiilan.md) 获取完整的拓扑陷阱列表。 |
| 无法打印 | 确认存在 `/dev/usb/lp0`(`ls -l /dev/usb/lp0`)。检查 `tsp-bridge` 用户是否在 `lp` 组中。尝试以 root 身份运行 `echo hello > /dev/usb/lp0`。 |
| 重复打印 | 桥接程序必须将所有数据未修改地转发到 USB,并将所有真实 ASB 转发回去。任何带有陈旧 ETB 计数器的合成/缓存 ASB 都会导致重试。 |
| 钱箱无法打开 | 检查 RJ12 线缆是否插在打印机的 DK 端口上。钱箱弹出命令(`ESC p 0`)随打印数据内联传输——不需要桥接程序进行特殊处理。 |
| 服务无法启动 | `journalctl -u tsp143-bridge -e` — 通常是因为另一个进程占用了 `/dev/usb/lp0`(停止 CUPS:`sudo systemctl stop cups`)。 |
## 适配其他打印机
核心架构(带有 ASB 转发的 TCP 到 USB 桥接)应适用于
支持 StarLine ASB 协议的任何 Star Micronics 打印机。
需要调整的关键点:
1. **帧大小:** 检查打印机的 ASB 帧长度(字节 0 编码了它)。
`usb_asb_to_lan_format()` 函数会填充至 11 字节——如果您的
目标 LAN 型号使用不同的大小,请进行调整。
2. **版本字节:** LAN 打印机设置字节 1 的位 7。检查您的
目标型号发送的内容并与之匹配。
3. **发现响应:** `star_discovery.py` 中的 302 字节发现数据包模板
是从 TSP100IIILAN 捕获的。机箱
实际上在完整型号字段中将自己宣称为 `TSP143IIILAN (STR_T-001)`——相同的硬件,两个不同的型号字符串,
取决于偏移量。对于其他 Star LAN 型号,请使用 [`research/probe.py discovery`](research/probe.py) 捕获真实的
响应,并将其与现有模板进行比较。
4. **端口 9101 行为:** 51 字节查询 / 22 字节响应模式
是从 TSP100IIILAN 捕获的。其他 Star LAN 型号可能使用相同的
协议,但如果您有真实硬件,请通过数据包捕获进行验证。
5. **切勿生成合成的 ASB。** 让真实的打印机处理所有状态。
这是构建此桥接程序中最重要的教训。
## 协议研究
[`research/`](research/) 目录是本项目权威的协议级
参考资料。本 README 中关于线格式的每个声明均已针对来自**真实 Star Micronics TSP143IIILAN**(机箱标为 TSP100IIILAN,MAC `00:11:62:13:de:ef`,固件 V2.2)的捕获进行了验证。
据我们所知,其中大部分内容**在其他任何地方都没有公开记录**:Star Micronics 的 StarPRNT SDK 提供的是编译好的二进制框架;
官方手册在较高层面上描述了 ASB,但没有指定发现线格式、ETB 计数器编码、9101 查询/响应结构或 USB 与 LAN 帧布局之间的区别。我们是通过捕获真实流量并重播来得出结论的。
### 交叉分析文档
这三份文档是综合性的参考资料——如果您正在进行逆向工程,请首先阅读这些:
- **[`research/notes-discovery-tsp143iiilan.md`](research/notes-discovery-tsp143iiilan.md)**
— UDP/22222 上的 Star Discovery Protocol:Shopify 实际发送的 28 字节结构化查询格式、302 字节响应布局、我们排除的所有
死胡同(mDNS、SNMP、松散的 `STR_BCAST`),以及决定发现是否有效的
拓扑限制。
- **[`research/notes-asb-states.md`](research/notes-asb-states.md)** —
LAN 上的 StarPRNT ASB 帧结构,逐字节解析。完全解码了带有编码/解码公式的 5 位非连续 ETB 计数器编码。
区分了 USB 和 LAN 形式。
- **[`research/notes-9101-lifecycle.md`](research/notes-9101-lifecycle.md)**
— TCP/9101 状态端口行为,包括 51 字节 StarPRNT 查询
格式和 22 字节双帧响应结构。记录了从 Android 手机捕获的
真实 Shopify 轮询节奏。
### 捕获的场景
每个场景目录包含一个匿名化的 `capture.pcap`,一个
`capture.pcap.txt` 文本转储,一个带有注释观察结果的 `notes.md`,
以及一个包含捕获环境和替换映射的 `meta.txt`。
| 场景 | 捕获的内容 |
|----------|------------------|
| [`research/discovery/`](research/discovery/) | Star Discovery Protocol 查询+响应。包括 302 字节的原始响应二进制文件。 |
| [`research/print-simple/`](research/print-simple/) | 启用 ASB 的最小化 ESC/POS 打印作业。 |
| [`research/9101-lifecycle/`](research/9101-lifecycle/) | TCP/9101 空闲测试。证明了 5.0 秒的空闲超时。 |
| [`research/shopify-replay/`](research/shopify-replay/) | 从 Android 手机捕获的真实 Shopify POS 打印。包括一个 49 KB 的收据固定数据(`sample-shopify-receipt.bin`)和 51 字节的 9101 查询(`sample-9101-query.bin`),可直接用于重播。 |
| [`research/etb-sweep/`](research/etb-sweep/) | 32 个连续的 ETB 已检查块。通过 `0→31→0` 环绕演练 ETB 计数器。 |
| [`research/asb-states/`](research/asb-states/) | 循环物理状态(盖子打开/关闭,缺纸/已装纸)下的 ASB 字节布局。 |
| [`research/portscan/`](research/portscan/) | nmap 完整 TCP + UDP top-50 指纹。揭示了 TCP/23 上一个未公开的 Telnet 诊断实用程序。 |
### 可重用的工具和固件
- [`research/probe.py`](research/probe.py) — 纯 stdlib 的主动探测器。
模式:`discovery`(发送正确的 28 字节结构化查询),
`simple`、`drawer`、`etb-sweep`、`hold-9101`、`watch-asb`、
`replay-shopify`、`raster`。每种模式都会写入原始套接字流量和
解码后的 ASB 帧。
- [`research/anonymize.py`](research/anonymize.py) — 纯 stdlib 的 pcap
重写器。用 RFC 5737 文档值替换打印机/主机的 MAC 和 IP,并重新计算 IPv4/UDP/TCP 校验和。
- [`research/capture.sh`](research/capture.sh) — 场景驱动器,可端到端地
演练命名场景(tcpdump + 主动探测 + 匿名化
+ 编写伴随的文本文件)。
- [`research/shopify-replay/sample-shopify-receipt.bin`](research/shopify-replay/sample-shopify-receipt.bin)
— 49 KB 二进制文件,即 Shopify 发送的用于
打印一张收据的原始 TCP/9100 负载。可用作针对任何 Star 打印机或
桥接程序的重放固件。
- [`research/shopify-replay/sample-9101-query.bin`](research/shopify-replay/sample-9101-query.bin)
— 51 字节,即 Shopify 发送的原始 StarPRNT 状态查询。
## 搜索索引
如果您是搜索以下任一术语找到本仓库的,相关
内容就在这里:
- **Star Discovery Protocol** / **SDP** / **STR_BCAST 格式** /
**UDP 22222 查询数据包**:请参见
[`research/notes-discovery-tsp143iiilan.md`](research/notes-discovery-tsp143iiilan.md)。
精确的 28 字节结构化查询(16 字节的 `STR_BCAST` 魔术值 +
`RQ1.0.0` 请求版本 + `0x001C` 长度 + 16 位请求 ID)已
逐字节记录。包含所有偏移量的 302 字节响应布局也在此处。
- **StarPRNT SDK 打印机发现** / **searchPrinter** /
**SMPort.searchPrinter("TCP:")**:SDK 调用的是封闭的 Star
框架;本仓库记录了其线路层结果,因此您不需要该 SDK。
- **TSP100IIILAN** / **TSP143IIILAN** / **TSP143III 固件 V2.2**
协议行为 — 请参见 [`research/`](research/)。
- **Shopify POS Star 打印机协议逆向工程** /
**Shopify POS 端口 9100 9101 捕获** /
**Shopify 是如何发现 Star 打印机的**:请参见
[`research/shopify-replay/notes.md`](research/shopify-replay/notes.md)
以获取 Android Shopify POS 应用
打印收据的端到端真实捕获,包括发现、状态轮询和
打印 TCP 流。
- **StarPRNT ASB 字节格式** / **Automatic Status Back 帧布局** /
**ASB 版本字节 0x06 与 0x86** / **USB ASB 与 LAN ASB**:请参见
[`research/notes-asb-states.md`](research/notes-asb-states.md)。
- **StarPRNT ETB 计数器** / **ETB 已检查块协议** /
**5 位 ETB 计数器编码** / **字节 7 ETB 位**:同一文档;
给出了精确的非连续位位置映射,并附有经过 32 个连续 ETB 验证的编码/解码公式。
- **Star 打印机端口 9101 协议** / **StarPRNT 状态查询 51 字节** /
**0x32 状态查询**:请参见
[`research/notes-9101-lifecycle.md`](research/notes-9101-lifecycle.md)。
- **TSP100III Telnet 实用程序** / **Star 打印机 Telnet 端口 23**:
TSP100IIILAN 固件在 TCP/23 上暴露了一个未公开的 Telnet 诊断
服务,其横幅会显示型号和 MAC;请参见
[`research/portscan/notes.md`](research/portscan/notes.md)。
- **Star 打印机 "NIC Reset Control" / `c_22222` 设置 / `PORT22222_MOUNT`
条件** — 包含在
[`research/notes-discovery-tsp143iiilan.md`](research/notes-discovery-tsp143iiilan.md) 的
“已知的死胡同”下 — 该管理页面开关并不能启用
发现;它控制的是单独的 TCP/22222 重置功能,并且
在某些固件版本中已在编译时被条件移除。
- **Shopify Star 打印机重复打印修复** / **合成 ASB ETB
失步** — 请参见上方“ETB 计数器 — 避免重复打印的关键”了解架构原因和解决方法。
## 开源许可
MIT — 请参见 [LICENSE](LICENSE)。© 2026 Senternal LLC,
[senternaltech.com](https://senternaltech.com)。
标签:ASB协议, cash drawer, POS机, POS系统, ShopifyPOS, StarPRNT协议, Star打印机, TCP9101, USB转WiFi, WiFi打印服务器, 云资产清单, 协议分析, 嵌入式系统, 打印机驱动, 权限提升, 树莓派Zero, 热敏打印机, 物联网, 硬件黑客, 网络抓包, 网络桥接, 网络模拟, 设备模拟, 跨平台兼容, 逆向工程, 防御绕过, 零售系统