Назад | Перейти на главную страницу

Подмена ответа IPP в брандмауэре?

Как мне подделать ответ IPP «Несанкционированный»? Ознакомились со спецификациями IPP, но не можете точно определить, как должен выглядеть ответ IPP. Есть примеры?

По сути, у меня есть принтер IPP с промежуточным межсетевым экраном, который аутентифицирует пользователей принтера, и когда неаутентифицированный пользователь или неверно аутентифицированный пользователь печатает, я хочу, чтобы пользователь получал более значимое сообщение об ошибке, чем «Невозможно связаться с принтером, пожалуйста. убедитесь, что адрес принтера правильный и принтер включен ». Простое отклонение с HTTP 403 в брандмауэре на порту IPP просто дает это сообщение об ошибке.

По сути, я хочу ответить application / ipp и кодом ответа 0x0403 в качестве ответа, когда брандмауэр считает пользователя неаутентифицированным. У меня есть возможность читать и декодировать данные из запроса в брандмауэре (кажется, мне это нужно, чтобы скопировать идентификатор запроса?).

Решив это, я просто перенаправляю пользователя (IPP-клиента) на эту страницу, когда аутентификация не выполняется. Пользователь правильно получает сообщение об ошибке, в котором говорится, что пользователь не авторизован для печати в большинстве операционных систем:

#!PATH TO PERL INTEPRETER
$file = <STDIN>;
$file =~ s/(.)/sprintf("%02x",ord($1))/seg;

$response = "";
$response = $response.chr("01").chr("00").chr("04").chr("03");
$response =$response.chr(hex(substr($file, 6, 2))).chr(hex(substr($file, 8, 2)));
$response=$response.chr(hex(substr($file, 10, 2))).chr(hex(substr($file,12, 2)));
$response = $response.chr("01").chr(hex("47")).chr("00").chr(hex("12"));
$response = $response."attributes-charset".chr("00").chr("05")."utf-8".chr(hex("48"));
$response = $response . chr("00").chr(hex("1B"))."attributes-natural-language".chr("00");
$response =$response . chr("05")."en-us".chr(hex("41")).chr("00").chr(hex("0E"));
$response = $response . "status-message".chr("00").chr(hex("1B"))."client-error-not-authorized";
$response = $response . chr("03");
$clen = length($response);
print "Content-Length: ".$clen."\nContent-Type: application/ipp\n\n$response";