Ich versuche, eine Liste aller AirPrint-Drucker im Netzwerk einer Schule zu erstellen. Wir haben viele von ihnen wegen der vielen Klassenzimmer- und Bürodrucker, aber sie wurden nicht mit aussagekräftigen Namen eingerichtet. Ich habe versucht, die DHCP-Zuordnungstabelle im Router zu lesen, aber viele der Drucker melden keinen Hostnamen. Ich kann die Drucker nicht persönlich überprüfen, da der Unterricht dadurch gestört wird, dass ich in jeden Raum gehe und mit den 1-3 Druckern dort spiele.
Der dns-sd
Befehl wie in Wie finde ich die IP-Adresse meines anderen Mac? gibt eine Spalte mit dem Namen Instanzname anstelle des Hostnamens an. Die Verwendung der dns-sd -G
Option für die Instanznamen ergab keinen solchen Datensatz.
dns-sd -Z
ist näher, da es Hostnamen gibt, die mit der G
Option nachgeschlagen werden können, aber es gibt keine vollständige Liste. Es gibt viel mehr Drucker im Dialogfeld " Drucker hinzufügen" auf einem Mac als in der Ausgabe von dns-sd -Z
.
Hat jemand einen Code oder ein Skript, um einfach alle IP-Adressen von Dingen zu finden, die von Bonjour beworben werden?
Ich habe keinen AirPrint-Drucker in meinem Netzwerk. Und auch noch nie mit einem gespielt...
Ich kann derzeit nicht mit einem echten AirPrint-Gerät in meiner Nähe testen.
Aber so kann ich alle IPP -fähigen Drucker auflisten (in diesem Fall sind sie alle über CUPS verbunden):
kp@zdv-wireless-43-219:> dns-sd -B _services._dns-sd._udp local. Suchen nach _services._dns-sd._udp.local. DATUM: ---Fr 20. Mai 2016--- 23:54:37.797 ... STARTET ... Zeitstempel-A/R-Flags, wenn Domänendiensttyp-Instanzname 23:54:37.798 Addiere 3 4 . _tcp.local. _ssh 23:54:37.798 Addiere 3 4 . _tcp.local. _sftp-ssh 23:54:37.798 Addiere 3 4 . _tcp.local. _luftspiel 23:54:37.798 Addiere 3 4 . _tcp.local. _rap 23:54:37.798 Addiere 3 4 . _tcp.local. _googlecast 23:54:37.798 Addiere 3 4 . _tcp.local. _nomachine 23:54:37.798 Addiere 3 4 lokal. _apple-mobdev2._tcp. _sub 23:54:37.798 Addiere 3 4 . _tcp.local. _apple-mobdev2 23:54:37.798 Addiere 3 4 . _tcp.local. _ipps 23:54:37.798 Addiere 3 4 . _tcp.local. _ipp 23:54:37.798 Addiere 3 4 . _tcp.local. _Arbeitsplatz 23:54:37.798 Addiere 3 4 . _tcp.local. _http 23:54:37.798 Addiere 3 4 . _tcp.local. _amzn-wplay 23:54:37.798 Addiere 3 4 . _tcp.local. _rfb 23:54:37.798 Addiere 3 4 . _tcp.local. _afpovertcp 23:54:37.798 Addiere 3 4 . _tcp.local. _smb 23:54:37.798 Addiere 3 4 . _udp.local. _net-Assistent 23:54:37.798 Addiere 2 4 . _tcp.local. _eppc ^C
Also ja, es gibt tatsächlich einen IPP-Druckdienst (aber keinen AirPrint-Dienst, der dadurch gekennzeichnet wäre_airprint._tcp
, dass er in der Liste als Diensttyp von gekennzeichnet wäre).
kp@zdv-wireless-43-219:> dns-sd -B _ipp._tcp local. Suchen nach _ipp._tcp.local. DATUM: ---Fr 20. Mai 2016--- 23:54:47.782 ... STARTET ... Zeitstempel-A/R-Flags, wenn Domänendiensttyp-Instanzname 23:54:47.783 Addiere 3 4 lokal. _ipp._tcp. Officejet6500donna @ mbp 23:54:47.783 Addiere 3 4 lokal. _ipp._tcp. raw2dir @mbp 23:54:47.783 Addiere 2 4 lokal. _ipp._tcp. Officejet 6600 @mbp ^C
Ok, einer der Instanznamen ist "Officejet 6600 @ mbp" .
kp@zdv-wireless-43-219:> dns-sd -L "Officejet 6600 @ mbp" _ipp._tcp lokal. Suchen Sie Officejet 6600 @ mbp._ipp._tcp.local. DATUM: ---Fr 20. Mai 2016--- 23:54:55.252 ... STARTET ... 23:54:55.253 Officejet\0326600\032@\032mbp._ipp._tcp.local. erreichbar unter mbp2-2.local.:631 (Schnittstelle 4) txtvers=1 qtotal=1 rp=Drucker/Officejet_6600 ty=Unbekannt \ adminurl=https://mbp2-2.local.:631/printers/Officejet_6600 \ note=Büro\ im\ Keller Priorität=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 Farbe=T Scannen=T \ Druckerstatus=3 Druckertyp=0x480900E ^C
Die Hälfte der gesuchten Informationen (Hostname des Druckers) wird durch den Satz „Officejet\0326600\032@\032mbp._ipp._tcp.local. kann unter mbp2-2.local.:631 erreicht werden“ abgedeckt.
Dies ergibt den aktuellen (Bonjour-)Hostnamen des Knotens, der den gesuchten Druckdienst anbietet.
kp@zdv-wireless-43-219:> dns-sd -Gv4v6 mbp2-2.local DATUM: ---Sa 21. Mai 2016--- 0:12:41.025 ...STARTEN... Zeitstempel A/R-Flags, wenn Hostname-Adresse TTL 0:12:41.025 Hinzufügen 3 4 mbp2-2.local. FE80:0000:0000:0000:AEBC:32FF:FEAE:CAEB%en0 120 0:12:41.025 Hinzufügen 3 4 mbp2-2.local. FD00:0000:0000:0000:AEBC:32FF:FEAE:CAEB% 120 0:12:41.025 Hinzufügen 2 4 mbp2-2.local. 192.168.177.20 120 ^C
Angenommen, mein erster Befehl hat einen _airprint
in meinem Netzwerk verfügbaren Dienst zurückgegeben, dann würde eine der zurückgegebenen Zeilen meiner Meinung nach lauten:
00:00:00.000 Add 3 4 . _tcp.local. _airprint
Somit müsste mein zweiter Befehl lauten:
kp@zdv-wireless-43-219:> dns-sd -B _airprint._tcp local.
Ich nehme an, dies könnte so etwas wie zurückgeben
200:00:00.000 Add 3 4 local. _airprint._tcp. Some AirPrinter @ somehost
Dann sollte mein dritter Befehl lauten:
kp@zdv-wireless-43-219:> dns-sd -L "Some AirPrinter @ somehost" local.
Was eine Zeile zurückgeben würde, die Ihnen sagt: "... kann unter irgendwo erreicht werden.lokal.:1234 ". Daraus soll der vierte Befehl abgeleitet werden:
kp@zdv-wireless-43-219:> dns-sd -Gv4v6 somewhere.local.
Vorbehalte: Der letzte Teil über die Erkennung des AirPrint-Dienstes kann falsch sein. Es kann sein, dass sich AirPrint-Dienste genauso ankündigen wie Standard-IPP-Dienste. Du musst es selbst herausfinden. Wenn doch, bitte melden.
Ich habe ein bisschen nach " _airprint._tcp
" gegoogelt.
Ich habe keine einzige Instanz von jemandem gefunden, der in einem Forum seine Ausgabe von dns-sd -B
der Auflistung dieser bestimmten Zeichenfolge gemeldet hat.
Allerdings gab es viele + viele _airplay._tcp
und _ipp._tcp
Ergebnisse. Das bedeutet, dass „ _airprint._tcp
“ nicht zu existieren scheint und AirPrint-Drucker eine andere Signatur verwenden müssen, um potenziellen Kunden bekannt zu werden. Wir wissen jedoch bereits, dass alle AirPrint-Dienste IPP für die Kommunikation mit ihren Clients verwenden, daher MÜSSEN sie auch die Diensttypankündigungen machen _ipp._tcp
.
Daher kann man mit Sicherheit davon ausgehen, dass ...
_ipp._tcp
(nicht _airprint._tcp
) an. Außerdem sieht es so aus...TXT
undurf="$anything"
suchen pdl="$anything,image/urf"
.Um dies zu verifizieren, habe ich überprüft, was die (gefälschte) Ankündigung von dns-sd.org über sein AirPrint sagt (Achtung, es ist nicht permanent im Internet, manchmal geht es für Stunden weg ...). Es gibt dies zurück:
kp@zdv-wireless-43-219:> dns-sd -Z _ipp._tcp,_universal dns-sd.org. Suchen nach _ipp._tcp,_universal.dns-sd.org. DATUM: ---Sa 21. Mai 2016--- 1:40:45.688 ... STARTET ... ; Um Clients anzuweisen, eine andere Domain zu durchsuchen, ersetzen Sie „@“ durch diese Domain. lb._dns-sd._udp PTR @ ; In der Liste der Dienste unten verweisen die SRV-Einträge normalerweise auf punktlokale Multicast-DNS-Namen. ; Wenn Sie diese Zonendateidaten auf Ihren Unicast-DNS-Server übertragen, müssen Sie diese dot-local ersetzen ; Namen mit dem korrekten vollqualifizierten (Unicast) Domänennamen des Zielhosts, der den Dienst anbietet. _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. ; Ersetzen Sie ihn durch den Unicast-FQDN des Zielhosts 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 Farbe M451nw" "product=(HP LaserJet 400 Farbe M451nw)" \ "priority=10" "adminurl=http://www.dns-sd.org/ServerStaticSetup.html" \ "note=Bei Stuarts Haus" "Color=T" "Duplex=F" "Scan=F" ^C
Tatsächlich erwähnt "Stuart's Home AirPrint Printer" "URF" in seinen TXT-Einträgen.
Um die Antwort auf Ihre Frage zusammenzufassen : "Wie kann ich die IP-Adressen aller AirPrint-Drucker abrufen?"
Der folgende (minimale) Befehl kündigt ein gefälschtes AirPrint-Gerät in Ihrem LAN an (bis Sie den Befehl mit ^C abbrechen ):
DNS-SD \ -R "Minimale AirPrint-Demo (Dummy+Fake-Drucker, der iPad-Clients täuscht)" \ _ipp._tcp.,_universal \ . \ 631 \ pdl="image/urf" \ URF=""
Ihre iOS-Geräte werden diesen Drucker nun unter den automatisch erkannten AirPrint-Geräten auflisten.
(Übrigens, Sie können den Port auch als etwas anderes als 631 ankündigen - die iOS-Clients werden ihn immer noch als AirPrint-Gerät identifizieren ...)
Wiederholen Sie nun dieses kleine Experiment, lassen Sie einfach eine der beiden image/urf
oder URF=""
-Anweisungen aus Ihrem Befehl:
Bevor Sie in die folgende Antwort eintauchen:
Bitte stellen Sie sicher, dass Sie die umfassenden AirPrint-Erklärungen für die [AirPrint]-Tag-Informationen verstanden haben, die ich kürzlich geschrieben habe.
Es gibt ein weiteres Tool, das AirPrint-Geräte identifizieren kann. Es ist das wenig bekannte ippfind
Dienstprogramm, das als Teil von CUPS ausgeliefert wird (unter Debian: als Teil des Pakets cups-client ).
Es gibt auch ein ippfind.exe
Dienstprogramm für Windows. Es wird als Teil des IPP Everywhere Selfcertification Software Package geliefert , das hier von der Website der Printer Working Group (PWG) heruntergeladen werden kann:
http://ftp.pwg.org/pub/pwg/tools/sw-ippeveselfcert10-20151110-windows.msi . Damit es tatsächlich unter Windows funktioniert, benötigen Sie außerdem Folgendes:
Die folgende Methode funktioniert also sowohl unter Linux als auch unter Mac OS X und Windows.
Ich zeige jetzt Schritt für Schritt, wie man damit arbeitet...
Die einfachste Art, das Dienstprogramm auszuführen, ist die folgende:
ippfind
Auf meinem aktuellen System gibt es Folgendes zurück:
ipp://mbp2-2.local.:632/printers/DummyAirPrint ipp://mbp2-3.local.:631/printers/Officejet6500eric ipp://mbp2-4.local.:631/printers/Officejet_6500 ipp://mbp2-5.local.:631/printers/Officejet_6500_E709n ipp://mbp2-1.local.:631/printers/Officejet_6600 ipp://mbp2-7.local.:633/printers/Officejet6500donna ipp://mbp2-8.local.:631/printers/raw2dir
Dies ist eine Liste aller IPP-Druckdienste (einschließlich der AirPrint-Dienste). Beachten Sie, dass einige davon nicht den Standard-IPP-Port 631 verwenden, aber dennoch erkannt werden.
Da ippfind
keine Befehlszeilenparameter angezeigt wurden, wurden stillschweigend die Standardparameter verwendet, und in Wirklichkeit wurde dieser Befehl ausgeführt:
ippfind _ipp._tcp --print
Um von allen IPP-Druckern nur diejenigen einzugrenzen, die AirPrint unterstützen, müssen wir unserer Abfrage den Untertyp _universal hinzufügen:
ippfind _ipp._tcp,_universal --print
Damit bleibt mir die folgende Teilmenge der vollständigen Liste von oben:
ipp://mbp2-2.local.:632/printers/DummyAirPrint ipp://mbp2-3.local.:631/printers/Officejet6500eric ipp://mbp2-7.local.:633/printers/Officejet6500donna
ippfind
funktioniert ähnlich wie das klassische find
Dienstprogramm, das nach Dateien, Verzeichnissen und anderen Objekten in der Dateisystemhierarchie sucht und dafür einen --exec
Parameter hat, der verwendet werden kann, um einen Befehl für jedes gefundene Element auszuführen:
ippfind _ipp._tcp,_universal --exec echo '{service_hostname}' \;
Der Befehl gibt die Hostnamen für alle AirPrinter zurück. Die anderen Nicht-AirPrint-IPP-Drucker werden nicht aufgeführt:
mbp2-2.local. mbp2-3.local. mbp2-7.local.
Da wir aus früheren Antworten bereits wissen, dass dns-sd -G
die IP-Adressen zurückgegeben werden, können wir dies anstelle des einfachen echo
Befehls von oben ausführen:
ippfind _ipp._tcp,_universal --exec dns-sd -G v4 '{service_hostname}' \; DATUM: ---Dienstag, 24. Mai 2016--- 3:39:18.024 ... STARTET ... Zeitstempel A/R-Flags, wenn Hostname-Adresse TTL 3:39:18.028 Hinzufügen 2 4 mbp2-2.local. 192.168.177.20 120 3:39:18.028 Hinzufügen 2 4 mbp2-3.local. 192.168.177.28 120 3:39:18.028 Hinzufügen 2 4 mbp2-7.local. 192.168.177.31 120 ^C
Voila!, eine Liste von IP-Adressen neben den vollständig qualifizierten (Bonjour) Hostnamen....
Sie könnten natürlich auch so etwas ausführen:
ippfind _ipp._tcp,_universal --exec echo '{service_hostname}' \; \ | während Lesezeile; tun ping -c 1 "$line" ; Erledigt \ | grep PING PING mbp2-2.local (192.168.177.20): 56 Datenbytes PING mbp2-3.local (192.168.177.28): 56 Datenbytes PING mbp2-7.local (192.168.177.31): 56 Datenbytes
(z. B. wenn dns-sd
nicht ohne Weiteres verfügbar ist, wie unter Windows), und es werden auch die IP-Adressen gemeldet (einfach, weil ping
sie benötigt und aufgelöst und auch gemeldet werden).
(Ich gebe zu: Ich habe das nicht mit echten AirPrint-Geräten getestet - ich habe einfach keine zur Verfügung. Ich habe es mit simulierten gemacht. Aber ich wäre überrascht, wenn dies in der Umgebung, mit der das OP arbeitet, nicht so gut funktionieren würde. .)
Hier ist eine andere Antwort. Es ist kürzer und direkter auf den Punkt. Ich lasse die erste Antwort jedoch für sich stehen, da sie für Personen nützlich sein kann, die sich mit diesem Thema befassen.
Derzeit kenne ich nur eine Antwort für Linux.... Wenn ich einen Befehl für Mac + findedns-sd
, erweitere ich diese Antwort.
Führen Sie unter Linux diesen Befehl aus:
kp@zdv-linux-003:> avahi-browse -rt _universal._sub._ipp._tcp + wlan1 IPv4 AirPrint Demo (Dummy Drucker) Internet Drucker lokal = wlan1 IPv4 AirPrint Demo (Dummy Drucker) Internet Drucker lokal Hostname = [zdv-linux-003] Adresse = [192.168.177.20] Anschluss = [632] txt = ["URF=V1.2,DM3,OF1-2-3-4,CP99,W8,OB10,PQ3-4-5,ADOBERGB24,DEVRGB24,DEVW8,SRGB24,IS1-2-4,MT1-2- 3-5-12,RS600" \ "pdl=application/pdf,image/urf,image/jpeg,image/pwg-raster" \ "usb_CMD=" "usb_MDL=" "usb_MFG=" "Transparent=T" "TBCP=T" \ "Product=" "Staple=T" "Sort=T" "Lochen=2" "PaperCustom=T" \ "PaperMax=isoC-A2" "Duplex=T" "Kopien=T" "Farbe=T" \ "Collate=T" "Bind=T" "Fax=F" "Binary=T" "Transparent=T" \ "DUUID=12345678-9ABC-DEF0-1234-56789ABCDEF0" \ "UUID=533f7ac6-1c37-11e6-ac21-ffa8e4bdcbf9" "TLS=1.2" \ "Druckertyp=0x0480FFFC" "Druckerstatus=3" \ "Produkt=Generische PDF-PPD" "Priorität=1" \ "adminurl=mailto:kurt.pfeifle@googlemail.com" \ "Art=Disc,Etikett,Großformat,Postkarte,Quittung,Rolle,Dokument,Umschlag,Foto" \ "air=none" "air=Benutzername,Passwort" "note3=" \ "note2=(völlig dummy und gefälschtes Gerät)" \ "note=Virtueller Drucker für Demos von IPP-Everywhere in Room 3a/3b" \ "ty=Kurt Pfeifle Handmade Model" "rp=printers/DummyAirPrint" \ "qtotal=1" "txtvers=1"]
Wie Sie sehen können, zeigt der _universal._sub._ipp._tcp
Diensttyp AirPrint-Geräte an, und der -r
Parameter löst ihn auf und gibt die IP-Adresse preis 192.168.177.20
.
Es gibt eine ziemlich schmerzlose Möglichkeit, dies mit dem Perl-Modul zu tun Net::Bonjour
:
#!/usr/bin/perl
use Net::Bonjour;
use warnings;
use strict;
my $res = Net::Bonjour->new('printer');
print "Name\t\t\tAddress\tPort\n";
foreach my $entry ( $res->entries) {
print join ("\t", $entry->name , $entry->address , $entry->port) , "\n";
}
Dadurch werden die Namen, IP-Adressen und Ports aller Bonjour-fähigen Drucker im Netzwerk aufgelistet, nicht nur die AirPrint-Drucker. Es funktioniert auf Mac, Windows und Linux.
sudo cpan install Net::Bonjour
, um das erforderliche Modul zu installieren.
Zwieback
ScunnerDarkly
Benutzer2127627
Allan
Kurt Pfeifle
dns-sd -Z
Aber nicht jeder IPP-fähige Drucker ist AirPrint-fähig (oder hat AirPrint deaktiviert). Weitere Einzelheiten finden Sie in meiner Antwort.