网络打印、不良标签打印的数据包分析
Packet analysis for network printing, bad label printing
我们这里有一台打印机,它应该在木头上打印标签,但是,一些标签的数据似乎中途被切断了(例如,当前作业被下一个作业更新),所以数据不完整,或者传输到打印机的数据有问题,打印的是半张标签。
我对网络打印和使用 "asynchronous" 打印机打印有点陌生。已经问过卖家了,怎么解决;他让我检查作业中的脚本,但是脚本只调用IP,没有别的。
这是图片以及wireshark捕获的link,乍一看似乎很正常,但我没有太多的数据包经验来注意是否有问题(碰撞等)。 ).它们似乎也不正常;当标签被切断(左半部分)时会发生这种情况。所以序列可能是 15, 14, 13 (cut off), 13, 13, 12, 10, ... 没有真正的规律。
Wireshark 文件:https://www.dropbox.com/s/8bchsnoxr68jgxu/ws1.pcapng?dl=0
Python 脚本:https://www.dropbox.com/s/532xqtv8ee0qgzz/REA.py?dl=0
如果您要进行更改,则无法进行测试是一个严重的问题。您的打印代码图片不够;你需要看得更远。
一般来说,post这里的代码比放在dropbox上更好。您的保管箱文件将在某个时间过期,然后您在此问题中放置的链接突然失效。以后遇到这个问题绊脚石的人会因为信息缺失而感到困惑。
这可能不是您问题的答案,但应该能让您有所了解。
经过这些准备工作:您提供的 pyhon 代码有许多例程。大多数代码只会将 XML-code 扔到您的打印机上。这些可以在您的 pcap 文件中找到。
你需要从 dropbox 上的 rea-module 了解的事情:
def STARTJOB(ip):
xml = '<REA-JET><REA-PI version="3.3"><Command name="STARTJOB" id="0"><Data /></Command></REA-PI></REA-JET>'
return ExecuteCommand(ip,xml)
def STOPJOB(ip):
xml = '<REA-JET><REA-PI version="3.3"><Command name="STOPJOB" id="0"><Data /></Command></REA-PI></REA-JET>'
return ExecuteCommand(ip,xml)
ExecuteCommand
将数据发送到打印机。所有内容均以明文形式发送。所以你可以在你的 pcap 文件中看到准确的调用顺序。
当我检查 pcap 时,我看到每个作业都已明确停止。在数据包的 hex-dumb 中,您可以在 Command name="STARTJOB"
之前每次看到带有 Command name="STOPJOB"
的数据包。顺序似乎是 setjob、startjob、stopjob。
我的问题是在标签完全打印之前发送了停止作业,从而中止了打印。但要确定,你必须做一些测试。
因此,可以选择在停止作业之前休眠,正如您所说,这会使每个标签打印的生产速度减慢一秒。另一种选择是检查打印是否准备就绪,只有在打印未完成时才休眠。
最后一个选项意味着您必须能够从打印机检索作业状态。这可以通过
来完成
def Feedback(data):
# Get feedback from the controller, so we can display it in the UI
# Two parameters are returned, the status code and the status message
import xml.etree.ElementTree as ET1
root = ET1.fromstring(data)
try:
code = root.find('REA-PI/Status/Code').text
except:
code = ''
try:
message = root.find('REA-PI/Status/Message').text
if message == None:
message = ''
except:
message = ''
return code, message
但我不知道 return 代码和消息的含义。意思在REA-PI/Status/Code
.
我们这里有一台打印机,它应该在木头上打印标签,但是,一些标签的数据似乎中途被切断了(例如,当前作业被下一个作业更新),所以数据不完整,或者传输到打印机的数据有问题,打印的是半张标签。
我对网络打印和使用 "asynchronous" 打印机打印有点陌生。已经问过卖家了,怎么解决;他让我检查作业中的脚本,但是脚本只调用IP,没有别的。
这是图片以及wireshark捕获的link,乍一看似乎很正常,但我没有太多的数据包经验来注意是否有问题(碰撞等)。 ).它们似乎也不正常;当标签被切断(左半部分)时会发生这种情况。所以序列可能是 15, 14, 13 (cut off), 13, 13, 12, 10, ... 没有真正的规律。
Wireshark 文件:https://www.dropbox.com/s/8bchsnoxr68jgxu/ws1.pcapng?dl=0
Python 脚本:https://www.dropbox.com/s/532xqtv8ee0qgzz/REA.py?dl=0
如果您要进行更改,则无法进行测试是一个严重的问题。您的打印代码图片不够;你需要看得更远。 一般来说,post这里的代码比放在dropbox上更好。您的保管箱文件将在某个时间过期,然后您在此问题中放置的链接突然失效。以后遇到这个问题绊脚石的人会因为信息缺失而感到困惑。
这可能不是您问题的答案,但应该能让您有所了解。
经过这些准备工作:您提供的 pyhon 代码有许多例程。大多数代码只会将 XML-code 扔到您的打印机上。这些可以在您的 pcap 文件中找到。
你需要从 dropbox 上的 rea-module 了解的事情:
def STARTJOB(ip):
xml = '<REA-JET><REA-PI version="3.3"><Command name="STARTJOB" id="0"><Data /></Command></REA-PI></REA-JET>'
return ExecuteCommand(ip,xml)
def STOPJOB(ip):
xml = '<REA-JET><REA-PI version="3.3"><Command name="STOPJOB" id="0"><Data /></Command></REA-PI></REA-JET>'
return ExecuteCommand(ip,xml)
ExecuteCommand
将数据发送到打印机。所有内容均以明文形式发送。所以你可以在你的 pcap 文件中看到准确的调用顺序。
当我检查 pcap 时,我看到每个作业都已明确停止。在数据包的 hex-dumb 中,您可以在 Command name="STARTJOB"
之前每次看到带有 Command name="STOPJOB"
的数据包。顺序似乎是 setjob、startjob、stopjob。
我的问题是在标签完全打印之前发送了停止作业,从而中止了打印。但要确定,你必须做一些测试。
因此,可以选择在停止作业之前休眠,正如您所说,这会使每个标签打印的生产速度减慢一秒。另一种选择是检查打印是否准备就绪,只有在打印未完成时才休眠。
最后一个选项意味着您必须能够从打印机检索作业状态。这可以通过
来完成def Feedback(data):
# Get feedback from the controller, so we can display it in the UI
# Two parameters are returned, the status code and the status message
import xml.etree.ElementTree as ET1
root = ET1.fromstring(data)
try:
code = root.find('REA-PI/Status/Code').text
except:
code = ''
try:
message = root.find('REA-PI/Status/Message').text
if message == None:
message = ''
except:
message = ''
return code, message
但我不知道 return 代码和消息的含义。意思在REA-PI/Status/Code
.