No tengo una impresora AirPrint en mi red. Y nunca jugó con uno tampoco ...
No puedo probar con un dispositivo AirPrint real en mi proximidad ahora mismo.
Pero aquí es cómo puedo enumerar todas las impresoras habilitadas IPP (en este caso, todas están conectadas a través de CUPS):
Primero, 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
Entonces, sí, hay un servicio de impresión IPP (pero no AirPrint, que estaría marcado por y se destacan como Tipo de servicio de _airprint._tcp
en la lista).
En segundo lugar, busque todos los servicios actuales del 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" .
Tercero, 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 Officejet266002@2mbp._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 está buscando (nombre de host de la impresora) está cubierta por la oración "Officejet \ 0326600 \ 032 @ \ 032mbp._ipp._tcp.local. se puede encontrar en mbp2-2.local .: 631 "
Esto proporciona el nombre de host actual (Bonjour-) del nodo que ofrece el servicio de impresión buscado.
En cuarto lugar, busque 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 comando first hubiera devuelto algún servicio _airprint
disponible en mi red, entonces supongo que una de las líneas devueltas sería:
00:00:00.000 Add 3 4 . _tcp.local. _airprint
Por lo tanto, mi comando segundo tendría que ser:
kp@zdv-wireless-43-219:> dns-sd -B _airprint._tcp local.
Supongo que esto podría devolver algo así como
200:00:00.000 Add 3 4 local. _airprint._tcp. Some AirPrinter @ somehost
Luego, mi comando third debería leer:
kp@zdv-wireless-43-219:> dns-sd -L "Some AirPrinter @ somehost" local.
Lo que devolvería una línea diciéndole que "... puede contactarse en algún lugar.local.:1234 ". De la cual derivar el comando cuarto :
kp@zdv-wireless-43-219:> dns-sd -Gv4v6 somewhere.local.
Caveats: La última parte, acerca del descubrimiento del servicio AirPrint puede estar equivocada. Podría darse el caso de que los servicios de AirPrint se anuncien como lo hacen los servicios IPP estándar. Tienes que averiguarlo tú mismo. Si lo hace, informe de nuevo.
Actualizar
He buscado un poco en Google para " _airprint._tcp
".
No encontré una sola instancia de nadie que haya reportado en algún foro su salida de dns-sd -B
listando esta cadena en particular.
Sin embargo, hubo lotes + lotes de _airplay._tcp
y _ipp._tcp
resultados. Esto significa que " _airprint._tcp
" no parece existir, y las impresoras AirPrint deben usar una firma diferente para darse a conocer a los posibles clientes. Sin embargo, ya sabemos que todos los servicios de AirPrint utilizan IPP para comunicarse con sus clientes, por lo que también MUST están realizando los anuncios de tipo de servicio _ipp._tcp
.
Por lo tanto, es seguro concluir que ...
- ... todos los dispositivos AirPrint se anunciarán como
_ipp._tcp
(no _airprint._tcp
). Además, parece que ...
- ... puedes identificar los dispositivos AirPrint buscando el registro
TXT
de urf="$anything"
y pdl="$anything,image/urf"
.
Para verificar esto, verifiqué lo que dice el (falso) anuncio de dns-sd.org sobre su AirPrint (advertencia, no está permanentemente en Internet, a veces desaparece por horas) ...). 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's2Home2AirPrint2Printer._ipp._tcp
Stuart's2Home2AirPrint2Printer._ipp._tcp SRV 0 0 631 airprint.dns-sd.org. ; Replace with unicast FQDN of target host
Stuart's2Home2AirPrint2Printer._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.
Entonces, para resumir la respuesta a su pregunta "¿Cómo puedo obtener las direcciones IP de todas las impresoras AirPrint?"
- Primero, liste todas las impresoras IPP.
- Segundo, excluya estas impresoras IPP que no NOT enumeran las dos entradas urf mencionadas anteriormente 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 descubiertos automáticamente.
(Por cierto, también puede anunciar que el puerto es diferente al 631; los clientes de iOS seguirán identificándolo como un dispositivo AirPrint ...)
Ahora repita este pequeño experimento, simplemente deje una de las dos declaraciones image/urf
o URF=""
fuera de su comando:
- El dispositivo falso seguirá apareciendo como una impresora IPP en las listas de navegación DNS-SD / Bonjour.
- Pero los clientes de iOS solo enumerarán como dispositivos compatibles con AirPrint (falsos o reales) con las entradas relacionadas con "URF".