No tengo una impresora AirPrint en mi red. Y tampoco he jugado nunca con una...
Ahora mismo no puedo hacer pruebas con un dispositivo AirPrint real que esté cerca.
Pero así es como puedo enumerar todos los IPP -impresoras habilitadas (en este caso todas están conectadas a través de CUPS):
En primer lugar, busque los servicios detectables de DNS-SD (todos los tipos):
kp@zdv-wireless-43-219:> dns-sd -B \_services.\_dns-sd.\_udp local.
Browsing for \_services.\_dns-sd.\_udp.local.
DATE: ---Fri 20 May 2016---
23:54:37.797 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
23:54:37.798 Add 3 4 . \_tcp.local. \_ssh
23:54:37.798 Add 3 4 . \_tcp.local. \_sftp-ssh
23:54:37.798 Add 3 4 . \_tcp.local. \_airplay
23:54:37.798 Add 3 4 . \_tcp.local. \_raop
23:54:37.798 Add 3 4 . \_tcp.local. \_googlecast
23:54:37.798 Add 3 4 . \_tcp.local. \_nomachine
23:54:37.798 Add 3 4 local. \_apple-mobdev2.\_tcp. \_sub
23:54:37.798 Add 3 4 . \_tcp.local. \_apple-mobdev2
23:54:37.798 Add 3 4 . \_tcp.local. \_ipps
23:54:37.798 Add 3 4 . \_tcp.local. \_ipp
23:54:37.798 Add 3 4 . \_tcp.local. \_workstation
23:54:37.798 Add 3 4 . \_tcp.local. \_http
23:54:37.798 Add 3 4 . \_tcp.local. \_amzn-wplay
23:54:37.798 Add 3 4 . \_tcp.local. \_rfb
23:54:37.798 Add 3 4 . \_tcp.local. \_afpovertcp
23:54:37.798 Add 3 4 . \_tcp.local. \_smb
23:54:37.798 Add 3 4 . \_udp.local. \_net-assistant
23:54:37.798 Add 2 4 . \_tcp.local. \_eppc
^C
Así que sí, efectivamente hay un servicio de impresión IPP (pero no uno AirPrint, que estaría marcada por destacan al ser etiquetados como Tipo de Servicio de _airprint._tcp
en la lista).
En segundo lugar, busque todos los servicios presentes de tipo "IPP":
kp@zdv-wireless-43-219:> dns-sd -B \_ipp.\_tcp local.
Browsing for \_ipp.\_tcp.local.
DATE: ---Fri 20 May 2016---
23:54:47.782 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
23:54:47.783 Add 3 4 local. \_ipp.\_tcp. Officejet6500donna @ mbp
23:54:47.783 Add 3 4 local. \_ipp.\_tcp. raw2dir @ mbp
23:54:47.783 Add 2 4 local. \_ipp.\_tcp. Officejet 6600 @ mbp
^C
Bien, uno de los nombres de instancia es "Officejet 6600 @ mbp" .
En tercer lugar, busque información específica sobre la impresora llamada "Officejet 6600 @ mbp":
kp@zdv-wireless-43-219:> dns-sd -L "Officejet 6600 @ mbp" \_ipp.\_tcp local.
Lookup Officejet 6600 @ mbp.\_ipp.\_tcp.local.
DATE: ---Fri 20 May 2016---
23:54:55.252 ...STARTING...
23:54:55.253 Officejet\\0326600\\032@\\032mbp.\_ipp.\_tcp.local. can be reached at mbp2-2.local.:631 (interface 4)
txtvers=1 qtotal=1 rp=printers/Officejet\_6600 ty=Unknown \\
adminurl=https://mbp2-2.local.:631/printers/Officejet\_6600 \\
note=Büro\\ im\\ Keller priority=0 product=\\(Officejet\\ 6600\\ e-All-in-One\\) \\
pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/pwg-raster \\
UUID=e7d11337-a440-3f2d-7168-b53de4325791 TLS=1.2 Color=T Scan=T \\
printer-state=3 printer-type=0x480900E
^C
La mitad de la información que buscas (nombre de host de la impresora) está cubierta por la frase "Officejet \0326600\032 @ \032mbp._ipp._tcp.local. puede ser contactado en mbp2-2.local.:631"
Esto da el nombre de host (Bonjour) actual del nodo que ofrece el servicio de impresión buscado.
En cuarto lugar, busca las direcciones IPv4 e IPv6 para un nombre de host determinado:
kp@zdv-wireless-43-219:> dns-sd -Gv4v6 mbp2-2.local
DATE: ---Sat 21 May 2016---
0:12:41.025 ...STARTING...
Timestamp A/R Flags if Hostname Address TTL
0:12:41.025 Add 3 4 mbp2-2.local. FE80:0000:0000:0000:AEBC:32FF:FEAE:CAEB%en0 120
0:12:41.025 Add 3 4 mbp2-2.local. FD00:0000:0000:0000:AEBC:32FF:FEAE:CAEB% 120
0:12:41.025 Add 2 4 mbp2-2.local. 192.168.177.20 120
^C
Resumen
Suponiendo que mi primero comando había devuelto algunos _airprint
servicio disponible en mi red, entonces mi suposición es que una de las líneas devueltas diría:
~~00:00:00.000 Add 3 4 . _tcp.local. _airprint
Así, mi segundo comando tendría que ser:
kp@zdv-wireless-43-219:> dns-sd -B _airprint._tcp local.
Supongo que esto podría devolver algo como
200:00:00.000 Add 3 4 local. _airprint._tcp. Some AirPrinter @ somehost
Entonces mi tercera debe decir:
kp@zdv-wireless-43-219:> dns-sd -L "Some AirPrinter @ somehost" local.
Lo que devolverá una línea que le dirá "... puede ser localizado en algún lugar.local.:1234 ". De donde se deriva el cuarto comando:
kp@zdv-wireless-43-219:> dns-sd -Gv4v6 somewhere.local.
------~~
Advertencias: La última parte, sobre el descubrimiento del servicio AirPrint puede estar mal. Podría darse el caso de que los servicios AirPrint se anuncien a sí mismos igual que los servicios IPP estándar. Tienes que averiguarlo tú mismo. Si lo haces, por favor, infórmate.
Actualización
He buscado en Google un poco de " _airprint._tcp
".
No encontré un solo caso de alguien que informara en algún foro su salida de dns-sd -B
que enumera esta cadena en particular.
Sin embargo, había muchos + muchos _airplay._tcp
y _ipp._tcp
resultados. Esto significa que " _airprint._tcp
" no parece existir, y las impresoras AirPrint deben estar utilizando una firma diferente para darse a conocer a los clientes potenciales. Sin embargo, ya sabemos que todos los servicios AirPrint utilizan IPP para comunicarse con sus clientes, por lo que también DEBE hacer el _ipp._tcp
anuncios de tipo de servicio.
De ahí que sea seguro concluir que...
- ...todo Los dispositivos AirPrint se anunciarán como
_ipp._tcp
(no _airprint._tcp
). Además, parece que...
- ...puedes identificar los dispositivos AirPrint buscando el
TXT
registro de urf="$anything"
y pdl="$anything,image/urf"
.
Para verificarlo, he comprobado con lo que el anuncio (falso) de dns-sd.org cuenta sobre su AirPrint (aviso, no está permanentemente en Internet, a veces se va durante horas...). Sí devuelve esto:
kp@zdv-wireless-43-219:> dns-sd -Z \_ipp.\_tcp,\_universal dns-sd.org.
Browsing for \_ipp.\_tcp,\_universal.dns-sd.org.
DATE: ---Sat 21 May 2016---
1:40:45.688 ...STARTING...
; To direct clients to browse a different domain, substitute that domain in place of '@'
lb.\_dns-sd.\_udp PTR @
; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names.
; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local
; names with the correct fully-qualified (unicast) domain name of the target host offering the service.
\_ipp.\_tcp PTR Stuart's\\032Home\\032AirPrint\\032Printer.\_ipp.\_tcp
Stuart's\\032Home\\032AirPrint\\032Printer.\_ipp.\_tcp SRV 0 0 631 airprint.dns-sd.org. ; Replace with unicast FQDN of target host
Stuart's\\032Home\\032AirPrint\\032Printer.\_ipp.\_tcp TXT "txtvers=1" "qtotal=1" "rp=ipp/printer" \\
"pdl=application/postscript,application/vnd.hp-PCL,application/vnd.hp-PCLXL,application/pdf,image/urf" \\
"URF=CP99,W8,OB10,PQ3-4-5,ADOBERGB24,DEVRGB24,DEVW8,SRGB24,IS1-2-4,MT1-2-3-5-12,MT1-2-3-5-12,RS600" \\
"ty=HP LaserJet 400 color M451nw" "product=(HP LaserJet 400 color M451nw)" \\
"priority=10" "adminurl=http://www.dns-sd.org/ServerStaticSetup.html" \\
"note=At Stuart's house" "Color=T" "Duplex=F" "Scan=F"
^C
De hecho, "Stuart's Home AirPrint Printer" menciona "URF" en sus registros TXT.
Así que, para resumir la respuesta a su pregunta "¿Cómo puedo obtener las direcciones IP de todas las impresoras AirPrint?"
- En primer lugar, enumere todas las impresoras IPP.
- En segundo lugar, excluir estas impresoras IPP que hacen NO enumerar los dos mencionados urf -en sus registros TXT.
Verificar mis declaraciones
El siguiente comando (mínimo) anunciará un dispositivo AirPrint falso en su LAN (hasta que cancele el comando con ^C ):
dns-sd \\
-R "Minimal AirPrint Demo (dummy+fake printer fooling iPad clients)" \\
\_ipp.\_tcp.,\_universal \\
. \\
631 \\
pdl="image/urf" \\
URF=""
Sus dispositivos iOS ahora enumerarán esta impresora entre sus dispositivos AirPrint autodescubiertos.
(Por cierto, también puedes anunciar el puerto como algo diferente a 631 -- los clientes de iOS seguirán identificándolo como un dispositivo AirPrint...)
Ahora repite este pequeño experimento, sólo deja uno de los dos image/urf
o URF=""
declaraciones de su mando:
- El dispositivo falso seguirá apareciendo como una impresora IPP en las listas de exploración de DNS-SD/Bonjour.
- Pero los clientes de iOS sólo listarán como aptos para AirPrint estos dispositivos (falsos o reales) con las entradas relacionadas con "URF".