- Port 9100 printing
- Who would put a printer on the Internet?
- Для сетевого подключения (LPR/Port 9100/SMB)
- Настройки аппарата
- Установка драйвера принтера путем создания порта принтера
- Внезапно не может печатать на сетевом принтере — кроме как через telnet/ браузер с подключением к порту 9100
- Двунаправленное общение с принтером (USB, TCP/IP порт 9100) из драйвера
- Daniel
- Game Programmer
- What is port 9100 & How to print to it
- 6 thoughts on “ What is port 9100 & How to print to it ”
Port 9100 printing
Raw printing is what we define as the process of making a connection to port 9100/tcp of a network printer – a functionality which was originally introduced by HP in the early 90s using separate hardware modules. It is the default method used by CUPS and the Windows printing architecture [1] to communicate with network printers as it is considered as ‘the simplest, fastest, and generally the most reliable network protocol used for printers’ [2] . Raw port 9100 printing, also referred to as JetDirect, AppSocket or PDL-datastream actually is not a printing protocol by itself. Instead all data sent is directly processed by the printing device, just like a parallel connection over TCP. In contrast to LPD, IPP and SMB interpreted printer control or page description languages can send direct feedback to the client, including status and error messages. Such a bidirectional channel is not only perfect for debugging, but gives us direct access to results of PJL, PostScript or PCL commands, for example for [information disclosure] attacks. Therefore raw port 9100 printing – which is supported by almost any network printer – is used as the channel for security analysis with PRET and PFT.
Who would put a printer on the Internet?
Obviously, a port 9100 based attack requires IP packets to be routed from the attacker to the printer device and backwards but printers usually are not directly connected to the Internet [3] . As of February 2017, the Shodan search engine reveals 48,213 printing devices Internet-accessible trough port 9100.
Attacking intranet printers however may also be attractive to an insider. Imagine an employee who has motivation to obtain the department manager’s payroll print job from a shared device. It is also worth mentioning that many new printers bring their own wireless access point – unencrypted by default to allow easy printing, for example via AirPrint [4] compatible mobile apps, or they automatically connect to an access point provided by the attacker with a «default» SSID [5] . While connecting to a printer through Wi-Fi requires the attacker to stay physically close to the device, it may be feasible to perform her attack from outside of the targeted institution depending on the signal strength.
- ↑Windows Printer Driver Architecture, Microsoft Corporation
- ↑Network Protocols supported by CUPS – AppSocket Protocol, M. Sweet
- ↑ It however must be noted that in many educational institutions it is common even today to assign a public IP address to all networked devices including printers.
- ↑About AirPrint, Apple Inc.
- ↑Rogue Device Spotlight: Wireless Printers, Robert Awk, Pwnie Express Blog
Для сетевого подключения (LPR/Port 9100/SMB)
Можно установить драйвер принтера либо путем нахождения принтера в сети, либо путем создания нового порта принтера.
Настройки аппарата
Для использования функции печати через Port 9100, LPR или SMB необходимо предварительно задать настройки сети для аппарата.
Задайте IP-адрес в [Настройки TCP/IP] .
Номер порта RAW
Для использования функции печати через Port 9100:
активизируйте номер порта RAW в [Настройка TCP/IP] для аппарата (значение по умолчанию: [9100] ).
Для использования функции печати через LPR:
в [Настройка LPD] на последней странице [Детальная настройка] выберите [Включить] для настройки LPD.
Для использования функции печати через SMB:
в [Настройка печати] в [Настройка SMB] задайте Имя NetBIOS, Имя сервиса печати и Рабочая группа.
Подробнее о настройках сети для аппарата см. Настройка NIC: настройка данных сети аппарата.
Для использования функции печати через SMB в среде IPv6 необходимо включить опцию [Настройка прямого хостинга] для аппарата. Подробнее см. Настройка прямого хостинга.
Установка драйвера принтера путем создания порта принтера
Для установки драйвера принтера необходимы права администратора.
Так как в процессе установки осуществляется поиск принтера, прежде чем включать аппарат, убедитесь, что он подключен к сети.
Правой кнопкой мыши нажмите на окно Пуск, а затем нажмите [Устройства и принтеры] под [Все приложения] — [Панель управления] — [Оборудование и звук] .
В Windows 8.1/Server 2012 R2 нажмите в окне Пуск — [Панель управления] — [Оборудование и звук] — [Устройства и принтеры] .
В Windows 10 правой кнопкой мыши нажмите кнопку Пуск , а затем нажмите [Панель управления] — [Оборудование и звук] — [Устройства и принтеры] .
Выберите [Добавить принтер] в панели инструментов.
Открывается мастер установки принтера [Добавить принтер] (или [Добавить устройство] ).
В окне с результатами поиска нажмите [Требуемый принтер отсутствует в списке] .
Нажмите [Добавить локальный или сетевой принтер с ручными настройками] .
Нажмите [Создать новый порт:] и выберите тип порта.
Для использования протокола LPR/Port9100 выберите [Станд. порт TCP/IP] .
Для использования соединения через SMB выберите [Локальный порт] .
Задайте IP-адрес и порт.
Для использования протокола LPR/Port 9100 выберите [Устройство TCP/IP] и введите IP-адрес.
Для использования соединения через SMB введите «\\имя NetBIOS\имя сервиса печати» в окне [Имя порта] .
Введите такое же имя NetBIOS и имя сервиса печати, как заданы в [Настройка SMB] — [Настройка печати] .
Если на дисплее появляется диалоговое окно [Требуется дополнительная информация о порте] или Требуется больше информации о порте , перейдите к шагу 10.
Если на дисплее появляется диалоговое окно [Установка драйвера принтера] , перейдите к шагу 14.
Выберите [Произв.] и нажмите [Настройки] .
Измените настройки в соответствии с параметрами порта и нажмите [OK] .
Для подключения через LPR выберите [LPR] и введите [Печать] в окне [Имя очереди:] .
При вводе необходимо различать буквы верхнего и нижнего регистра.
Для подключения через Port 9100 выберите [RAW] и введите номер порта RAW (настройка по умолчанию: [9100] ) в окне [Номер порта] .
Если на аппарате активизированы обе опции — LPR и Port 9100, драйвер принтера подключается к аппарату, используя LPR.
Открывается страница [Установка драйвера принтера] .
Нажмите [Установить с диска] .
Выберите папку с драйвером принтера и нажмите [Открыть] .
Нажмите [Далее] .
Следуйте указаниям в открывающихся окнах.
При появлении окна [Управление учетными записями] нажмите [Продолжить] или [Да] .
После завершения установки убедитесь, что значок установленного принтера появился в окне [Устройства и принтеры] или [Принтеры] .
На этом установка драйвера принтера завершена.
Внезапно не может печатать на сетевом принтере — кроме как через telnet/ браузер с подключением к порту 9100
У меня есть ноутбук с операционной системой Windows 7 64-bit и HP 7310 OfficeJet. Я печатаю на этом принтере годами. У него есть фиксированный IP-адрес в моей домашней сети. Конфигурация принтера на моем компьютере отправляет сообщения на порт 9100 по этому IP-адресу с использованием протокола RAW с включенной поддержкой двунаправленной связи.
Несколько дней назад задания на печать начали терпеть неудачу. Они появлялись бы в очереди со статусом «Печать» в течение короткого периода, но затем это изменилось бы на «Ошибка — Печать». Когда я пытаюсь отслеживать, что происходит с помощью SysInternals TCPView, я не могу поймать процесс, открывающий удаленный порт 9100.
Ошибка печати происходит независимо от того, с чего я печатаю: Microsoft Word, Acrobat Reader, Firefox. Я перезагрузил компьютер, отключил и перезапустил принтер безуспешно.
Однако: когда я перехожу в веб-браузере к порту 9100 с этим IP-адресом, принтер точно печатает HTTP-транзакцию! Аналогично, когда я открываю сеанс telnet с этим адресом и портом, печатаются символы, которые я печатаю, когда сеанс открыт.
Когда у меня Windows устраняет неполадки конфигурации принтера, единственное, что он обнаруживает, это то, что «совместное использование принтера серии HP OfficeJet 7300 с домашней группой позволит другим компьютерам использовать принтер». Я не делюсь этим с другими компьютерами, так что это не имеет смысла. Тем не менее, я попытался это исправить, и это не имело никакого значения, поэтому я отменил его.
На момент попытки печати ни в одном из журналов Windows не было ни ошибок, ни предупреждений.
У меня есть BitDefender, который я никоим образом не настроил за последние несколько недель, кроме как включить, а затем быстро отключить его механизм катастрофической защиты от вымогателей.
Любые идеи о причине и решении будут оценены!
Двунаправленное общение с принтером (USB, TCP/IP порт 9100) из драйвера
Общая формулировка задачи.
Win драйвер должен перед печатью страницы определять есть ли в принтере бумага (посредством отправки Esc команды). В случае, если нет то поменять статус (принтера? джобы?), то выполнять попытки каждые несколько секунд пока не появится. В случае если появилась проверить какой тип бумаги вставлен (посредством отправки Esc команды) проверить совместима ли она с текущим документом и либо продолжить, либо сменить статус на соответствующий.
Вопросы.
1. Для «прослушивания» события планирую использовать DDI Hook INDEX_DrvSendPage:
https://msdn.microsoft.com/en-. s.85).aspx
https://msdn.microsoft.com/en-. s.85).aspx
Здесь должна быть прописана логика общения с принтером посредством Esc-команд и в зависимости от ответов меняться статус джобы (или принтера).
Верно ли это с точки зрения архитектуры?
2. Для общения с принтером используется bidirectional interface. Принтер может быть подключен через USB, а также как сетевое устройство (порт 9100).
Стандартный TCP/IP Port Monitor не поддерживает bidirectional. Поскольку написание custom TCP/IP Port Monitor является большой задачей, есть ли более экономные с точки зрения временного ресурса альтернативы у этого подхода?
Нормально ли вообще из драйвера общаться через BiDi interface?
3. Среди списка статусов джобы нет статуса, который бы показывал несоответствие типа вставленной бумаги и текущего документа:
https://msdn.microsoft.com/ru-. s.85).aspx
Можно ли добавить свой custom статус или стоит использовать JOB_STATUS_USER_INTERVENTION ?
4. Нормально ли что хендлеры SendPage или StartPage могут длительное время (часы, при отсутствии реакции от пользователя — бесконечный loop) повторно считывать статусы?
Если есть опыт в этом то готов заплатить за детальную консультацию (пишите в личку).
Узнать модель принтера через порт tcp 9100
Добрый день. Нифига не понимают в программировании драйверов. Как получить ответ от сетевого.
Двунаправленное общение сайта с программой (программы с сайтом)
Посылать запросы с сайта в свою программу — нашёл. ПРосто поднимается в программе локальный сервер.
Общение с принтером через serial_port и exception «Inappropriate ioctl for device»
Доброго времени суток! Только начал использовать библиотеку Boost и хочу с её помощью посылать.
Общение игрострой TCP/UDP
Привет всем! Как написать чат, сериализовывать и десериализовывать я знаю. Передавать файлы по.
Daniel
Game Programmer
What is port 9100 & How to print to it
Of the many methods for printing the simplest and most genius is port 9100. At the very basic printing over port 9100 requires you to open a TCP connection to the printer’s port 9100, push some text, then close the connection.
For a presentation at Microsoft I wanted to end on a fun note and provide some printing trivia. My online searches for information related to port 9100 and printing through said port turned up sparse. The only reason I knew anything about port 9100 was from pouring over Foomatic’s driver metadata database two summers ago. I think this method might also be known as JetDirect or Direct Print. WIkipedia’s only obvious mention is the port’s official registration as “PDL Data Stream”.
As the official port registration implies that text I mentioned pushing to the printer can in fact have PDL instructions embed.
PDL stands for Page Description Language. This term is related to PCL which stands for Printer Command Language. PCL is not supposed to be a PDL since it allows for printer control. In theory this extra power should make PCL a member of the more general Printer Control Language group. Thus, in theory, when Wikipedia says “PDL Data Stream” the implication is that there is no control granted over the printer itself. In practice printers sometimes treat the PDL sent over port 9100 as commands. I think some HP printer firmware updates get sent this way. The net result has been various security bugs over the years.
The genius of port 9100 is in the pure reality that no other network printing protocol can be simpler. Even printing over UDP would complicate the process by requiring a END_OF_PRINT_JOB instruction. Instead port 9100 treats the TCP’s closure as the submit command.
You can try printing over port 9100 yourself by running from the command line:
Hope that helped. I also hope I did not write anything too inaccurate.
6 thoughts on “ What is port 9100 & How to print to it ”
How to print Chinese charset?
Printing anything but 7bit ASCI would require using the printer’s Page Description Language which is much more complex. If you need something that complex for a program you are writing you may want to look into CUPS or libcups combined with linux’s filter chain.
You open a connection to port 9100 then use the printer job language “PJL” commands to force the start of a new job (in case the port was left in a bad state) set up the print parameters such as input tray output finishing options, resolution and the like then use the @PJL ENTER_LANGUAGE command to enter whatever printer language is supported by the printer and whatever format you wish to generate. PJL manuals can be found online. Note in the example below the comments preceded by “#” are not legal PJL and are intended merely to be informative. The sequence is:
^[%-12345X@PJL JOB # This string exits any existing job and starts a new one ^[ is escape (0x1b)
@PJL SET RESOLUTION = 300 # White space does not matter capitalization does
@PJL SET COPIES = 4 # Set copy count to four
@PJL ENTER LANGUAGE = POSTSCRIPT # What follows is PostScript NOT PJL
%!PS
.5 setgray
clippath pathbbox moveto lineto stroke showpage
^D
@PJL EOJ #cleanly exit the PostScript Job and prepare for a new one.
I am a novice with computer work a rounds.
I have Win 8.1 and trying to connect via WiFi from an Epson WF3540 printer all in one. I can connect to the computer with the Firewall turned off. However when the Firewall is turned on no connection.
Will the following open port 9100 work when the the Firewall is turned on?
$ netcat PRINTER_IP 9100
$ Hello World
$
according to your article, What is port 9100 & How to print to it.
I have three ports to choose from according to Epson, 9100, 2958, and 3629.
My cable company wants a 10 month service agreement to turn one of the three ports on.
How does one remove that code if it does not work?
Why are you trying to connect from the Printer to the Computer? As well you should not turn on those ports at your cable internet service provider. That would expose your printer to the world and allow anyone to print on it.
Sorry I’m honestly not sure what you are trying to do.
Is there a way to get some job status or printer status via 9100? Newer HP Printers simply power off after some time and even network gets stopped so it is impossible to wake these remotely.
So I’m trying to run periodic job (every few minutes) that does some query to the printer to prevent it from going into sleep and power off.