ipp打印机是指采用ipp协议的打印机。IPP代表“互联网打印协议”,是一个在互联网上打印的标准网络协议。IPP协议允许用户管理与Internet连接的打印机,并将打印机作业发送到在线主机打印机;用户可以透过相关界面来控制打印品所使用的纸张种类、分辨率等各种参数。
本教程操作环境:windows7系统、Dell G3电脑。
ipp打印机是指采用ipp协议的打印机。
IPP代表“互联网打印协议”,顾名思义,该协议允许用户管理与Internet连接的打印机,并将打印机作业发送到在线主机打印机。IPP与许多其他打印机管理协议之间的区别在于IPP是一种安全协议,它支持高级功能,例如访问控制列表,身份验证和加密通信,然而,这并不意味着设备所有者正在使用这些功能。
wireshark抓取数据包分析,并解析出打印文件名、文件、IP端口、用户名;
一、协议说明
互联网打印协议(IPP;InternetPrintingProtocol)是一个在互联网上打印的标准网络协议,它容许用户可以透过互联网作遥距打印及管理打印工作等工作。用户可以透过相关界面来控制打印品所使用的纸张种类、分辨率等各种参数;
IPP采用的超文本传输协议HTTP的POST方法在客户端和打印服务器之间进行会话。在IPP协议中涉及的对象模型来描述,共有3种对象:
打印机对象,该对象封装了打印机设备,所有实际的打印服务都由该对象完成。
作业对象,该对象封装了一个或多个文件组成的打印作业。
预定对象封装了通知机制,在作业和打印机对象的状态发生改变时,将出发通知。
对于客户端而言,可以通过IPP协议发送2种类型的报文;查询打印机状态的报文和提交打印机作业的报文,同时,客户端也可以接收来自打印服务器的通知;
通讯方式
TCP协议,HTTP协议;
传输层是HTTP请求和响应组成,操作层是一个HTTP请求或响应中的消息主体;
服务器端口:631
客户端端口:任意
Content-Type:application/ipp
二、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<_ipp_attr_value *> values;//一个或者多个属性值 }IPP_ATTR; //一个属性组包括一个组TAG,零个或者多个属性; struct _ipp_attr_seq{ char seq;//属性组类型 std::vector<IPP_ATTR *> attr;//一个或者多个属性 }; typedef struct _ipp{ int data_left;//移动剩下的数据长度 short version;//版本号 union{ short int operation;//操作码 short int response;//响应码 }; int request_id;//请求ID //零个或者多个属性组 std::vector<_ipp_attr_seq *> seqs;// 一个或者多个属性组 }IPP; IPP *m_ipp;//IPP结构 short int m_bufptr;//记录buf移动位置
扩展知识:每天有80000台打印机通过IPP在线曝光
Shadowserver专家表示,他们专门扫描了Internet上具有IPP功能的打印机,这些打印机在没有受到防火墙保护的情况下仍处于暴露状态,并允许攻击者通过“获取打印机属性”功能查询本地详细信息。
使用搜索引擎BinaryEdge进行的正常扫描显示,平均每天通过IPP端口发现大约80,000台打印机,而这些打印机每天都会在网上曝光。 IPP端口曝光而没有任何其他安全保护(例如防火墙或身份验证机制)会导致很多问题。
例如,Shadowserver的专家表示此端口可用于收集情报:因为支持IPP的打印机中有很大一部分(例如打印机名称,位置,型号,固件版本,组织名称甚至WiFi网络名称)返回了有关其自身的其他信息,攻击者可以收集此信息,然后通过该信息检查公司网络,以便于将来的攻击。
此外,其中支持IPP的打印机的四分之一(约21,000台)也透露了其设计和制造的细节,公开这些信息显然使攻击者更容易找到特定漏洞的设备群体。
糟糕的是,IPP黑客工具也可以在线获得。诸如PRET(打印机操作工具包)支持IPP黑客攻击,并且过去曾被用于劫持和强迫打印机打印各种宣传消息,甚至可能完全接管易受攻击的设备。
Shadowserver 基金会表示,计划将来在其网站上发布每日IPP暴露报告。“我们希望在我们的新开放空间中共享IPP设备数据报告,这将减少启用IPP的裸露打印机的数量,并提高人们对将这种设备暴露给未经身份验证的扫描仪/攻击者的危险的认识。”订阅组织安全警报的公司或国家CERT团队将在国家/地区的网络和IP地址空间中在线公开任何IPP服务时收到自动通知。
Shadowserver基金会针对处理暴露于互联网的设备提供的前瞻性建议与去年的学术研究结果一致,该研究发现DDoS删除通常无效,执法部门应将重点放在修补系统上,以限制攻击者。
同时建议用户阅读打印机的手册,以配置IPP访问控制和IPP身份验证功能,在打印机尚未被利用的情况下做好保护,管理面板中的大多数打印机都有IPP配置部分,用户可以从中启用身份验证,加密并通过访问列表限制对设备的访问。
更多相关知识,请访问常见问题栏目!
以上是ipp打印机是什么的详细内容。更多信息请关注PHP中文网其他相关文章!