Wie kann ich die IP-Adressen aller AirPrint-Drucker in einem Netzwerk auflisten?

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-sdBefehl 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 -GOption für die Instanznamen ergab keinen solchen Datensatz.

dns-sd -Zist näher, da es Hostnamen gibt, die mit der GOption 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?

Probieren Sie die Who-is-on-my-WLAN-App aus
Probieren Sie Bonjour Browser-tildesoft.com aus . Sind Ihre Drucker von einem einzigen Hersteller und wenn ja, von welchem? Wir haben eine Reihe von Epson AIO-Geräten auf dem Campus und jedes Mal, wenn wir ein neues Gerät bereitstellen, zeichnen wir die Seriennummer und den Standort auf. Wir verwenden dann die EpsonNet Config von Epson, um den Druckern Bonjour-Namen und -Standorte zu geben, alles relativ schmerzlos. Leider verursacht jede große Bereitstellung einige anfängliche unvermeidbare Schmerzen, aber dies kann etwas gemildert werden, wenn der Hersteller über Verwaltungs-/Konfigurationstools verfügt.
Fast alle HP hier. Keine Konsistenz bei Modellen oder sogar Modellreihen, wir haben Dinge, die von Heimdruckern bis hin zu kleinen Büros variieren. Der Bonjour-Browser scheint zu funktionieren, ich habe mir das angesehen und er zeigt IPs für Tonnen von Druckern an.
Aus Neugier ... was nützt eine Liste, wenn Sie nicht wissen, wo sie eingesetzt werden, welche SN-Nummer sie haben usw.? Erhalten diese Drucker eine statische IP-Adresse?
Aus diesem Grund sind im Dialogfeld „ Drucker hinzufügen“ mehr Drucker als Sie sehen: Jeder AirPrint-fähige Drucker ist auch IPP-fähig. dns-sd -ZAber nicht jeder IPP-fähige Drucker ist AirPrint-fähig (oder hat AirPrint deaktiviert). Weitere Einzelheiten finden Sie in meiner Antwort.

Antworten (4)

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):

Suchen Sie zunächst nach erkennbaren DNS-SD-Diensten (alle Typen):

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).

Suchen Sie zweitens nach allen vorhandenen Diensten des Typs "IPP":

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" .

Suchen Sie drittens spezifische Informationen über den Drucker mit dem Namen „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.

Suchen Sie viertens nach den IPv4- und IPv6-Adressen für einen bestimmten Hostnamen:

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

Zusammenfassung

Angenommen, mein erster Befehl hat einen _airprintin 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.


Aktualisieren

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 -Bder Auflistung dieser bestimmten Zeichenfolge gemeldet hat.

Allerdings gab es viele + viele _airplay._tcpund _ipp._tcpErgebnisse. 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 ...

  1. ...alle AirPrint-Geräte melden sich als_ipp._tcp (nicht _airprint._tcp) an. Außerdem sieht es so aus...
  2. ... können Sie AirPrint-Geräte identifizieren, indem Sie nach dem Eintrag von TXTundurf="$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?"

  1. Listen Sie zunächst alle IPP-Drucker auf.
  2. Zweitens schließen Sie diese IPP-Drucker aus, die die beiden oben erwähnten urf -Einträge NICHT in ihren TXT-Einträgen auflisten.

Bestätige meine Aussagen

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/urfoder URF=""-Anweisungen aus Ihrem Befehl:

  1. Das gefälschte Gerät wird weiterhin als IPP-Drucker in den Suchlisten von DNS-SD/Bonjour angezeigt.
  2. Aber iOS-Clients werden nur diese (gefälschten oder echten) Geräte mit den "URF"-bezogenen Einträgen als AirPrint-fähig auflisten.

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 ippfindDienstprogramm, das als Teil von CUPS ausgeliefert wird (unter Debian: als Teil des Pakets cups-client ).

Es gibt auch ein ippfind.exeDienstprogramm 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:

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...

Der einfachste Befehl findet alle IPP-Drucker-URIs

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 ippfindkeine Befehlszeilenparameter angezeigt wurden, wurden stillschweigend die Standardparameter verwendet, und in Wirklichkeit wurde dieser Befehl ausgeführt:

ippfind _ipp._tcp --print

Filtern Sie die AirPrint-Geräte heraus

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

Rufen Sie die Hostnamen für die IPP-URIs ab

ippfindfunktioniert ähnlich wie das klassische findDienstprogramm, das nach Dateien, Verzeichnissen und anderen Objekten in der Dateisystemhierarchie sucht und dafür einen --execParameter 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.

Finden Sie die IP-Adressen aller AirPrint-Geräte

Da wir aus früheren Antworten bereits wissen, dass dns-sd -Gdie IP-Adressen zurückgegeben werden, können wir dies anstelle des einfachen echoBefehls 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-sdnicht ohne Weiteres verfügbar ist, wie unter Windows), und es werden auch die IP-Adressen gemeldet (einfach, weil pingsie 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._tcpDiensttyp AirPrint-Geräte an, und der -rParameter 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.

Hinweis für Personen, die Perl nicht regelmäßig verwenden: Verwenden Sie sudo cpan install Net::Bonjour, um das erforderliche Modul zu installieren.