ipp 프린터는 ipp 프로토콜을 사용하는 프린터를 말합니다. IPP는 "인터넷 인쇄 프로토콜"을 의미하며 인터넷에서 인쇄하기 위한 표준 네트워크 프로토콜입니다. IPP 프로토콜을 사용하면 사용자는 인터넷에 연결된 프린터를 관리하고 프린터 작업을 온라인 호스트 프린터로 보낼 수 있습니다. 사용자는 관련 인터페이스를 통해 인쇄 제품에 사용되는 용지 종류 및 해상도와 같은 다양한 매개 변수를 제어할 수 있습니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Dell G3 컴퓨터.
ipp 프린터는 ipp 프로토콜을 사용하는 프린터를 말합니다.
IPP는 "인터넷 인쇄 프로토콜"을 의미하며 이름에서 알 수 있듯이 이 프로토콜을 사용하면 사용자는 인터넷에 연결된 프린터를 관리하고 프린터 작업을 온라인 호스트 프린터로 보낼 수 있습니다. IPP와 다른 많은 프린터 관리 프로토콜의 차이점은 IPP가 액세스 제어 목록, 인증, 암호화된 통신과 같은 고급 기능을 지원하는 보안 프로토콜이지만 이것이 장치 소유자가 이러한 기능을 사용하고 있다는 의미는 아닙니다.
Wireshark는 데이터 패킷 분석을 캡처하고 인쇄 파일 이름, 파일, IP 포트, 사용자 이름을 구문 분석합니다.
1. 프로토콜 설명
인터넷 인쇄 프로토콜(IPP; InternetPrintingProtocol)은 사용자가 인터넷을 통해 원격으로 인쇄하고 인쇄 작업을 관리할 수 있도록 하는 인터넷 인쇄용 표준 네트워크 프로토콜입니다. 사용자는 관련 인터페이스를 통해 인쇄 제품에 사용되는 용지 유형 및 해상도와 같은 다양한 매개변수를 제어할 수 있습니다.
IPP는 Hypertext Transfer Protocol HTTP POST 방법을 사용하여 클라이언트와 인쇄 서버 간의 대화를 수행합니다. IPP 프로토콜에 포함된 개체 모델에 따라 설명되는 개체에는 세 가지 유형이 있습니다.
프린터 장치를 캡슐화하는 프린터 개체이며 모든 실제 인쇄 서비스는 이 개체에 의해 완료됩니다.
Job 개체는 하나 이상의 파일로 구성된 인쇄 작업을 캡슐화합니다.
예약된 개체는 작업 및 프린터 개체의 상태가 변경될 때 알림을 트리거하는 알림 메커니즘을 캡슐화합니다.
클라이언트의 경우 IPP 프로토콜을 통해 프린터 상태를 쿼리하는 메시지와 프린터 작업 제출을 위한 메시지 등 두 가지 유형의 메시지를 보낼 수 있습니다.
통신 방법
TCP 프로토콜, HTTP 프로토콜
전송 계층은 HTTP 요청과 응답으로 구성되며 작업 계층은 HTTP 요청 또는 응답의 메시지 본문입니다. : 631
클라이언트 포트: any
Content-Type: application/ipp
클라이언트와 서버 모두 HTTP 프로토콜 전송에 의존하며, 작업 레이어는 HTTP 요청 및 응답 메시지 본문의 고유 형식으로 상호 작용합니다(자세한 내용은 3
메시지 구조참조). (1) 단일 문서 인쇄print-job: 클라이언트가 제출을 원합니다. 단일 문서만 포함하는 인쇄 작업입니다. 요청과 함께 문서 데이터가 전송됩니다.
(2) 다중 문서 인쇄
Create-job: 클라이언트가 여러 문서가 포함된 인쇄 작업을 제출하려고 합니다. 문서는 send-document 및 send-uri 작업을 사용하여 전송됩니다.
문서 보내기: 클라이언트는 인쇄 작업 작업을 사용하여 생성된 인쇄 작업에 문서를 추가하려고 합니다. 요청과 함께 문서 데이터가 전송됩니다.
print-job: 클라이언트는 단일 문서만 포함된 인쇄 작업을 제출하려고 합니다. 요청과 함께 문서 데이터가 전송됩니다.
3. 메시지 구조
3.1 작업 요청 및 응답 인코딩
---------------------------- --- -------------
| 버전 번호 2바이트 필요
---------- --- ----------------
| (요청) 또는 |
| 상태 코드(응답) 2바이트 필요
------------------------------- - ----------
| 요청 ID 4바이트 필요
--------------- ----------- --------------------------
| 속성 그룹 (0 이상)
-------------------------------------- ------------ ------------
| 속성 종료 태그 1바이트
--------------- ----------- ---------------
| 데이터 ------- ------------------------------
넷째 첫 번째 필드는 0개 이상의 발생을 허용하는 "속성 그룹" 필드. 각 "속성 그룹" 필드는 작업 속성 그룹 또는 작업 속성 그룹과 같은 단일 속성 집합을 나타냅니다(문서 모델 참조). IPP 모델 파일은 각 작업 요청 및 응답에 필요한 속성 집합과 해당 순서를 지정합니다.
"데이터"가 존재하지 않는 경우에도 "종료 태그" 필드는 항상 존재합니다. 모델 문서는 각 작업 요청 및 응답에 대해 "데이터" 필드가 있는지 여부를 지정합니다.
3.2 속성 그룹---------------------------- ---------------
| 속성 그룹 시작 태그 1바이트
---------- - -------------------
|
속성----------- --------------------------------------- ----"속성 그룹 시작 태그" 필드는 속성 그룹의 시작을 표시하며 해당 값은
속성 그룹의 유형을 식별합니다.
작업 속성 그룹 및 작업 속성 그룹 등이 있습니다. "속성 그룹 시작 태그"는 또한 요청 또는 응답의 첫 번째 속성 그룹이 아닌 한 이전 속성 그룹의 끝을 표시합니다. "속성 시작 태그" 필드는 "속성 그룹" 필드가 다른 "속성 그룹" 필드 내에 중첩될 수 없기 때문에 "속성 그룹"의 종료 역할을 합니다. 속성 그룹 필드에는 0개 이상의 "속성" 필드가 포함되어 있습니다. 참고: "속성 그룹 시작 태그" 필드와 "속성 그룹 종료 태그" 필드를 "구분 기호 태그"라고 합니다. 3.3 속성 "속성" 필드는 다음과 같이 인코딩됩니다. ------------------------------- --- ---------- | 단일 값 속성 | -------------- | 섹션(0 이상) --------- --------------------------- ---------- --- 속성이 단일 값(예: "복사"의 값 10)이거나 다중 값이지만 하나의 값만 취하는 경우(예: "다중 지원"은 '일방적' 값만 취함) 경우에는 '단일 값 속성' 필드로만 인코딩됩니다. 속성이 다중 값이고 n 값을 취하는 경우(예: "다자간 지원"이 '일방적' 및 '양면 긴 경계' 값을 취함) "속성 단일 값" 필드로 인코딩됩니다. , 그 뒤에 n-1개의 "추가 값" 필드가 옵니다. ------------------------- ------------ ----- | 값 태그 1바이트 ---------- ---------- --------------------- | (유닛 ) | 2자 페스티벌------------------------- ----------- ------- | ------------ | 길이(단위 v) | 2바이트 --------- ----------------- ------- |값 v바이트 ------ ------------- ------------ "단일 값 속성"은 5개 필드로 인코딩됩니다. : "값 레이블" 필드는 속성의 구문을 지정합니다. 예를 들어 ” 속성 구문을 나타냅니다. "이름 길이" 필드는 "이름" 필드의 길이를 바이트 단위로 지정합니다. 예를 들어 위 그림에서 u 또는 15는 이름이 "Multi-Party Support"임을 의미합니다. "값" 필드에는 텍스트 값 "한쪽"과 같은 값의 속성이 포함됩니다. 3.5부가가치 -------------------------- ------ --------------- | 값 태그 1바이트 ------ ------- --------------------- | 이름 길이(단위 0x0000) | 2 바이트 ---------------------- ----------- ----------- | 값 길이(단위 w) 2바이트 ------------- ------------- --------------------- | 값 | wbytes ------ ---------------------- --------------- 추가된 값은 4개 필드를 사용하여 인코딩됩니다. "값 레이블" 필드는 속성 구문을 지정합니다. 예를 들어 0x44는 속성 구문 "을 나타냅니다. 예어". "이름 길이" 필드는 "추가된 값"임을 나타내기 위해 0 값을 사용할 수 있습니다. "이름 길이" 필드의 값은 "추가 값" 필드("이름 길이"는 0)와 "단일 값 속성" 필드("이름 길이"는 0가 아님)를 구별합니다. . "값 길이" 필드는 "값" 필드의 길이를 바이트 단위로 지정합니다. 위 그림에서 볼 수 있듯이 w 또는 19는 "양쪽의 긴 경계" 값을 나타냅니다. "값" 필드에는 "양쪽 긴 경계"라는 텍스트 값과 같은 값의 속성이 포함됩니다. 4. 구조 매개변수 확장된 지식: 매일 80,000개의 프린터가 IPP를 통해 온라인에 노출됩니다 Shadowserver 전문가들은 IPP 기능이 있는 프린터를 특별히 인터넷에서 검색했다고 합니다. 방화벽 보호 없이 노출된 상태로 유지되며 공격자가 "프린터 속성 가져오기" 기능을 통해 로컬 세부 정보를 쿼리할 수 있도록 허용합니다. 검색 엔진 BinaryEdge를 사용한 일반 스캔을 보면 평균적으로 약 80,000개의 프린터가 IPP 포트를 통해 검색되고 이러한 프린터가 매일 온라인에 노출되는 것으로 나타났습니다. 다른 보안 보호(예: 방화벽 또는 인증 메커니즘) 없이 IPP 포트를 노출하면 많은 문제가 발생할 수 있습니다. 예를 들어 Shadowserver의 전문가들은 이 포트를 사용하여 인텔리전스를 수집할 수 있다고 말합니다. 왜냐하면 IPP 지원 프린터(프린터 이름, 위치, 모델, 펌웨어 버전, 조직 이름, 심지어 WiFi 네트워크 이름 등)의 상당 부분이 반환되기 때문입니다. 자신에 대한 정보 추가 정보를 통해 공격자는 이 정보를 수집한 다음 이 정보를 사용하여 향후 공격을 용이하게 하기 위해 회사 네트워크를 검사할 수 있습니다. 또한 IPP 지원 프린터 중 4분의 1(약 21,000대)의 설계 및 제조 세부 정보도 공개되어 공격자가 특정 취약한 장치 그룹을 더 쉽게 찾을 수 있게 되었습니다. 안 좋은 점은 IPP 해킹 도구를 온라인에서도 사용할 수 있다는 것입니다. PRET(Printer Operations Toolkit)와 같은 프로그램은 IPP 해킹을 지원하며 과거에는 프린터를 납치하여 다양한 홍보 메시지를 인쇄하도록 강요하고 취약한 장치를 완전히 장악하는 데 사용되었습니다. Shadowserver Foundation은 앞으로 웹사이트에 일일 IPP 노출 보고서를 게시할 계획이라고 밝혔습니다. "우리는 새로운 공개 공간에서 IPP 장치 데이터 보고를 공유함으로써 노출된 IPP 지원 프린터의 수를 줄이고 그러한 장치가 인증되지 않은 스캐너/공격자에게 노출될 위험에 대한 인식을 높일 수 있기를 바랍니다. 구독하는 회사 또는 국가 CERT 팀을 인정하십시오." IPP 서비스가 국가의 네트워크 및 IP 주소 공간에 온라인으로 노출되면 조직 보안 경고에 자동 알림이 전송됩니다. 인터넷에 노출된 장치를 처리하기 위한 Shadowserver Foundation의 미래 지향적인 권장 사항은 지난해 학술 연구와 일치합니다. 이 연구에서는 DDoS 차단이 종종 효과가 없으며 법 집행 기관은 공격자를 제한하기 위해 시스템 패치에 중점을 두어야 한다고 밝혔습니다. 프린터가 악용되기 전에 프린터를 보호하기 위해 사용자가 프린터 설명서를 읽고 IPP 액세스 제어 및 IPP 인증 기능을 구성하는 것이 좋습니다. 액세스 목록을 통해 장치에 대한 액세스를 제한합니다. 더 많은 관련 지식을 알고 싶다면 FAQ 칼럼을 방문해주세요!
//属性值;
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移动位置
위 내용은 ipp 프린터가 뭐죠?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!