互联网打印机协议IPP分析

您所在的位置:网站首页 打印机RAW协议什么意思 互联网打印机协议IPP分析

互联网打印机协议IPP分析

2024-06-24 03:31:01| 来源: 网络整理| 查看: 265

wireshark抓取数据包分析,并解析出打印文件名、文件、IP端口、用户名;

一、协议说明

互联网打印协议(IPP;InternetPrintingProtocol)是一个在互联网上打印的标准网络协议,它容许用户可以透过互联网作遥距打印及管理打印工作等工作。用户可以透过相关界面来控制打印品所使用的纸张种类、分辨率等各种参数;

IPP采用的超文本传输协议HTTP的POST方法在客户端和打印服务器之间进行会话。在IPP协议中涉及的对象模型来描述,共有3种对象:

打印机对象,该对象封装了打印机设备,所有实际的打印服务都由该对象完成。作业对象,该对象封装了一个或多个文件组成的打印作业。预定对象封装了通知机制,在作业和打印机对象的状态发生改变时,将出发通知。

对于客户端而言,可以通过IPP协议发送2种类型的报文;查询打印机状态的报文和提交打印机作业的报文,同时,客户端也可以接收来自打印服务器的通知;

1.1 通讯方式

TCP协议,HTTP协议;

传输层是HTTP请求和响应组成,操作层是一个HTTP请求或响应中的消息主体;

服务器端口:631

客户端端口:任意

Content-Type:application/ipp

1.2 参考文档

[RFC2910] Internet Printing Protocol/1.1: Encoding and Transport

链接:http://rfc.ac.cn/html/rfc2910.html

[RFC8011] Internet Printing Protocol/1.1: Model and Semantics

链接:http://rfc.ac.cn/html/rfc2911.html

二、TCP数据流分析

客户端与服务器端都是依附HTTP协议传输,操作层是以HTTP请求和响应的消息体的固有格式(详细见3消息结构)交互;

(1)单个文档打印

print-job:客户机要提交一个仅包含单个文档的打印作业。文档数据将随请求一起发送。

(2)多个文档打印

Create-job:客户机要提交一个包含多个文档的打印作业。文档是使用 send-document 和 send-uri 操作发送的。

Send-document:客户机要将文档添加到使用 print-job 操作创建的打印作业中。文档数据将随请求一起发送。

print-job:客户机要提交一个仅包含单个文档的打印作业。文档数据将随请求一起发送。

三、消息结构 3.1 操作请求和响应编码

------------------------------------------------------

|            版本号                      |  要求2个字节

------------------------------------------------------

|        操作ID(请求)  或           |

|        状态代码(响应)               |  要求2个字节

------------------------------------------------------

|         请求ID                      |  要求4个字节

------------------------------------------------------

|         属性组                       |  n字节(0或更多)

------------------------------------------------------

|         属性结束标签                 |  1字节

------------------------------------------------------

|         数据                         |  q字节(可选)

------------------------------------------------------

第四个字段是“属性组”字段,它允许出现0或者多次。每个“属性组”字段表示单组属性,如一个操作属性组或者一个作业属性组(见文档模型)。该IPP模型文件规定所需的属性组和他们的顺序为每个操作请求和响应。

“结束标签”字段总是存在的,即使当“数据”不存在。模型文档指定了每个操作请求和响应的“数据”字段是否存在。

3.2 属性组

------------------------------------------------------

|          属性组开始标签              |  1个字节

------------------------------------------------------

|             属性                     |   p字节(0或更多)

------------------------------------------------------

“属性组开始标签”字段标志着一个属性组的开始,它的值标识属性组的类型。如一个操作属性组与作业属性组。“属性组开始标签”也标记了前一个属性组的结尾除非它是在请求或响应的第一个属性组中。“属性开始标签”字段作为一个“属性组”的终止,因为“属性组”字段不能嵌套在另一个“属性组”字段。

一个属性组字段包含零个或多个“属性”字段。

注意:“属性组开始标签”字段和“属性组结束标签”字段被称为“分隔符标签”。

3.3 属性

“属性”字段编码如下:

------------------------------------------------------

|            单值属性                  |  q字节

------------------------------------------------------

|             附加值                   |  r字节(0或更多)

------------------------------------------------------

当一个属性是单值的(如“复制”的值10) 或者是多值的但只取一个值(如“多方支持”只用值‘单方’),这时它只用“单值属性”字段编码。当一个属性是多值的且取n个值(例如“多方支持”取值‘单方’和‘双方长边界’),它编码有一个“属性单值”字段 ,后跟n-1“附加值”字段。

3.4 单值属性(key value)

------------------------------------------------------

|            值标签                    |  1个字节

------------------------------------------------------

|          key名称长度(单位u)     |  2个字节

------------------------------------------------------

|             名称                     |  u字节

------------------------------------------------------

|          value值长度(单位v)        |  2个字节

------------------------------------------------------

|             值                       |  v字节

------------------------------------------------------

“单值属性”由五个字域编码:

“值标签”字段指定属性的语法,比如用0x44表示属性语法“keyword”。

“名称长度”字段以字节为单位指定“名称”字段的长度,例如上图中的u或15表示名称为“多方支持”。

“名称”字段包含文本名属性,如“双边支持”。

“值长度”字段以字节为单位指定“值”字段的长度,如上图中的v或9表示值“单方”。

“值”字段包含值的属性,如文本值“单边”。

3.5 附加值

------------------------------------------------------

|            值标签                    |  1个字节

------------------------------------------------------

|        名称长度(单位0x0000)        |  2个字节

------------------------------------------------------

|         值长度(单位w)              |  2个字节

------------------------------------------------------

|             值                        |  w字节

------------------------------------------------------

附加值使用4个字域编码:

“值标签”字段规定属性语法,比如0x44表示属性语法“keyword”。

“名称长度”字段可取0值以表示这是一个“附加值”。“名称长度”字段的值把“附加值”字段(“名称长度”是0)和“单值属性”字段(“名称长度”不是0)区分了开来。

 “值长度”字段以字节为单位规定了“值”字段的长度,如上图中的w或19表示值“双方长边界”。

“值”字段包含值的属性,如文本值“双方长边界”。

四、结构体参数

//属性值;

struct _ipp_attr_value{

    char type;//属性类型

    short len;//值长度

    std::string value;//值内容

};

//一个属性包括一个属性名name,零个或者多个属性值;

typedef struct _ipp_attr{

    std::string name;//属性名称

    std::vector values;//一个或者多个属性值

}IPP_ATTR;

//一个属性组包括一个组TAG,零个或者多个属性;

struct _ipp_attr_seq{

    char seq;//属性组类型

    std::vector attr;//一个或者多个属性

};

typedef struct _ipp{

    int data_left;//移动剩下的数据长度

    short version;//版本号

    union{

        short int operation;//操作码

        short int response;//响应码

    };

    int request_id;//请求ID

    //零个或者多个属性组

    std::vector seqs;// 一个或者多个属性组

}IPP;

IPP *m_ipp;//IPP结构

short int m_bufptr;//记录buf移动位置

五、宏定义 5.1 Request operations ID

#define IPP_PRINT_JOB              0x0002 此标识开始打印数据

#define IPP_PRINT_URI              0x0003

#define IPP_VALIDATE_JOB         0x0004

#define IPP_CREATE_JOB           0x0005

#define IPP_SEND_DOC             0x0006

#define IPP_SEND_URI              0x0007

#define IPP_CANCEL_JOB           0x0008

#define IPP_GET_JOB_ATTR         0x0009

#define IPP_GET_JOBS              0x000A

#define IPP_GET_PRINTER_ATTR    0x000B

5.2 Response status Code

#define IPP_SUCCESS               0x0000

#define IPP_SUCCESS_IGN          0x0001

#define IPP_SUCCESS_CONFLICT   0x0002

5.3 属性组Tag

#define IPP_TAG_OPERATIONS      0x01

#define IPP_TAG_JOBS              0x02

#define IPP_TAG_END              0x03

#define IPP_TAG_PRINTER          0x04

#define IPP_TAG_UNSUPPORTED  0x05

5.4 属性类型

/* Integer tags */

#define IPP_TAG_INTEGERS        0x20

#define IPP_TAG_INT                0x21

#define IPP_TAG_BOOL             0x22

#define IPP_TAG_ENUM            0x23

// #define IPP_TAG_RESERVED    0x24-0x2F

/* Octet-string tags */

#define IPP_TAG_OCTET_STRING   0x30

#define IPP_TAG_DATETIME        0x31

#define IPP_TAG_RESOLUTION     0x32

#define IPP_TAG_RANGE_INT       0x33

// #define IPP_TAG_RESERVED     0x34 for collection (in future)

#define IPP_TAG_TEXT_W_LANG  0x35

#define IPP_TAG_NAME_W_LANG 0x36

/* Character-string tags */

#define IPP_TAG_CHAR_STRING    0x40

#define IPP_TAG_TEXT_WO_LANG 0x41

#define IPP_TAG_NAME_WO_LANG       0x42

// #define IPP_TAG_RESERVED    0x43

#define IPP_TAG_KEYWORD      0x44

#define IPP_TAG_URI                0x45

#define IPP_TAG_URI_SCHEME     0x46

#define IPP_TAG_CHARSET         0x47

#define IPP_TAG_NATURAL_LANG 0x48

#define IPP_TAG_MIME_MEDIA   0x49

5.5 错误状态码(响应)

// IPP response codes - Client errors

#define IPP_ERR_BAD_REQUEST          0x0400

#define IPP_ERR_FORBIDDEN             0x0401

#define IPP_ERR_NOT_AUTHENTICATED     0x0402

#define IPP_ERR_NOT_AUTHORIZED        0x0403

#define IPP_ERR_NOT_POSSIBLE          0x0404

#define IPP_ERR_TIMEOUT                0x0405

#define IPP_ERR_NOT_FOUND            0x0406

#define IPP_ERR_GONE                    0x0407

#define IPP_ERR_REQUEST_TOO_LARGE    0x0408

#define IPP_ERR_VALUE_TOO_LONG      0x0409

#define IPP_ERR_FORMAT_NOT_SUPPORTED     0x040A

#define IPP_ERR_ATTR_NOT_SUPPORTED         0x040B

#define IPP_ERR_VAL_NOT_SUPPORTED             0x040B

#define IPP_ERR_URISCHEME_UNSUPPORTED   0x040C

#define IPP_ERR_CHARSET_NOT_SUPPORTED   0x040D

#define IPP_ERR_CONFLICTING_ATTR             0x040E

// IPP response codes - Server errors

#define IPP_ERR_INTERNAL_ERROR              0x0500

#define IPP_ERR_OPERATION_UNSUPPORTED    0x0501

#define IPP_ERR_SERVICE_UNAVAILABLE        0x0502

#define IPP_ERR_VERSION_UNSUPPORTED      0x0503

#define IPP_ERR_DEVICE_ERROR                0x0504

#define IPP_ERR_TEMP_ERROR                   0x0505

#define IPP_ERR_NOT_ACCEPTING_JOBS         0x0506

#define IPP_ERR_BUSY                            0x0507

#define IPP_ERR_JOB_CANCELLED               0x0508

// Printer state enum

#define IPP_PRINTER_IDLE                 0x03

#define IPP_PRINTER_PROCESSING        0x04

#define IPP_PRINTER_STOPPED           0x05



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭