Non ho una stampante AirPrint sulla mia rete. E non ho mai giocato con nessuno dei due ...
Non riesco a testare con un vero dispositivo AirPrint nella mia prossimità in questo momento.
Ma ecco come posso elencare tutte le stampanti abilitate per IPP (in questo caso sono tutte collegate tramite CUPS):
Per prima cosa, cerca i servizi rilevabili DNS-SD (tutti i tipi):
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
Quindi sì, c'è davvero un servizio di stampa IPP (ma nessuno di AirPrint, che sarebbe contrassegnato da risulterà contrassegnato come Tipo di servizio di _airprint._tcp
nell'elenco).
Secondo, cerca tutti i servizi presenti di 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
Ok, uno dei nomi di istanza è "Officejet 6600 @ mbp" .
Terzo, cerca informazioni specifiche sulla stampante denominata "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 metà delle informazioni che stai cercando (nome host della stampante) è coperta dalla frase "Officejet \ 0326600 \ 032 @ \ 032mbp._ipp._tcp.local. può essere raggiunta su mbp2-2.local .: 631"
Questo fornisce l'attuale (Bonjour-) nome host del nodo che offre il servizio di stampa cercato.
In quarto luogo, cerca gli indirizzi IPv4 e IPv6 per un determinato nome host:
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
Sommario
Supponendo che il mio comando primo abbia restituito un po 'di _airprint
di servizio disponibile nella mia rete, allora suppongo che una delle righe restituite dovrebbe essere: / strike>
00:00:00.000 Add 3 4 . _tcp.local. _airprint
Pertanto, il mio comando secondo dovrebbe essere:
kp@zdv-wireless-43-219:> dns-sd -B _airprint._tcp local.
Suppongo che questo potrebbe restituire qualcosa di simile
200:00:00.000 Add 3 4 local. _airprint._tcp. Some AirPrinter @ somehost
Quindi il mio comando terzo dovrebbe contenere:
kp@zdv-wireless-43-219:> dns-sd -L "Some AirPrinter @ somehost" local.
Che restituirebbe una linea che ti dice "... può essere raggiunta da qualche parte.local.:1234 ". Da cui derivare il comando quarto :
kp@zdv-wireless-43-219:> dns-sd -Gv4v6 somewhere.local.
Avvertimenti: L'ultima parte, relativa al rilevamento dei servizi AirPrint potrebbe essere errata. Potrebbe essere il caso che i servizi AirPrint si annunciano proprio come fanno i servizi IPP standard. Devi scoprire te stesso. Se lo fai, ti preghiamo di segnalarlo.
Aggiornamento
Ho cercato un po 'su " _airprint._tcp
".
Non ho trovato una singola istanza di qualcuno che ha segnalato in alcuni forum il loro output da dns-sd -B
che elenca questa particolare stringa.
Tuttavia, c'erano molti + lotti di _airplay._tcp
e _ipp._tcp
risultati. Ciò significa che " _airprint._tcp
" non sembra esistere e che le stampanti AirPrint devono utilizzare una firma diversa per farsi conoscere dai potenziali clienti. Tuttavia, sappiamo già che tutti i servizi AirPrint utilizzano IPP per comunicare con i loro clienti, quindi anche DEVE fare gli annunci di tipo di servizio _ipp._tcp
.
Quindi è sicuro concludere che ...
- ... tutti I dispositivi AirPrint si annunciano come
_ipp._tcp
(non _airprint._tcp
). Inoltre, sembra ...
- ... puoi identificare i dispositivi AirPrint cercando il
TXT
record di urf="$anything"
e pdl="$anything,image/urf"
.
Per verificarlo, ho verificato con che cosa l'annuncio (falso) di dns-sd.org parla della sua AirPrint (avviso, non è permanentemente su Internet, a volte va via per ore ...). Ritorna questo:
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
In effetti, "Stuart's Home AirPrint Printer" menziona "URF" nei suoi record TXT.
Quindi, per riassumere la risposta alla tua domanda "Come posso ottenere gli indirizzi IP di tutte le stampanti AirPrint?"
- Innanzitutto, elenca tutte le stampanti IPP.
- In secondo luogo, escludi queste stampanti IPP che NON enumerano i due urf -entries sopra menzionati nei loro record TXT.
Verifica le mie dichiarazioni
Il seguente comando (minimo) annuncerà un falso dispositivo AirPrint nella tua LAN (finché non annulli il comando con ^ C ):
dns-sd \
-R "Minimal AirPrint Demo (dummy+fake printer fooling iPad clients)" \
_ipp._tcp.,_universal \
. \
631 \
pdl="image/urf" \
URF=""
I tuoi dispositivi iOS ora enumereranno questa stampante tra i dispositivi AirPrint rilevati automaticamente.
(A proposito, puoi annunciare la porta come qualcosa di diverso dal 631 - i client iOS la identificheranno comunque come un dispositivo AirPrint ...)
Ora ripeti questo piccolo esperimento, lascia solo una delle due dichiarazioni image/urf
o URF=""
dal tuo comando:
- Il dispositivo falso apparirà ancora come una stampante IPP negli elenchi di navigazione DNS-SD / Bonjour.
- Ma i client iOS elencheranno solo come dispositivi compatibili con AirPrint (falsi o reali) con le voci correlate a "URF".