OS übers Netz abfragen

berni51

Open-Net-FreeBSD user
Hallo zusammen,
ich suche eine Möglichkeit, in einem Shellscript das Betriebssystem eines entfernten Rechners abzufragen, und das als normaler user, also ohne root-Rechte.
Kennt jemand ein geeignetes Werkzeug dafür?
Hintergrund ist die Ermittlung des OS bei Dual-Boot Maschinen (BSD und Linux), um aus dem Ergebnis eine entsprechende Konfigurationsdatei für Cups zu erstellen. Ist das Ergebnis der Abfrage "BSD", wird die Meldung ausgegeben, dass kein Printserver verfügbar ist und der nächste mögliche Rechner wird angefragt, bei "Linux" wird eine passende client.conf erzeugt.

Grüße
Berni
 
ich suche eine Möglichkeit, in einem Shellscript das Betriebssystem eines entfernten Rechners abzufragen, und das als normaler user, also ohne root-Rechte.
Kennt jemand ein geeignetes Werkzeug dafür?
nmap. Aber das braucht für OS-Detection Root-Rechte.
Dann kann man ein nmap -O 10.0.0.5 machen.

Hintergrund ist die Ermittlung des OS bei Dual-Boot Maschinen (BSD und Linux), um aus dem Ergebnis eine entsprechende Konfigurationsdatei für Cups zu erstellen. Ist das Ergebnis der Abfrage "BSD", wird die Meldung ausgegeben, dass kein Printserver verfügbar ist und der nächste mögliche Rechner wird angefragt, bei "Linux" wird eine passende client.conf erzeugt.
Wozu? CUPS-Clients gehen doch auch "configless".
 
Verstehe ich das richtig, dass du eigentlich wissen willst ob ein Print-Server läuft? Wenn ja, wäre es dann nicht sinnvoller den Port zu checken?
 
Danke für die Hinweise, aber:

@double-p : Wie meinst Du das? Ich brauch ja eine remote Abfrage.

@Andy_m4 : nmap scheitert an den root-Rechten für -O. Das config file (client.conf) brauch ich auf BSD-Maschinen, die den Cups-Server auf den Linux-Boxes als lpr-Server ansprechen (mangels passender Treiber für BSD).

@Athaba : Ja, das ist richtig. Bin nicht darauf gekommen, den Port 631 abzufragen, das sollte aber gehen, teste ich nachher. Das könnte ich dann mit nmap machen.

Grüße
Berni
 
Ok. Die BSD-Maschinen sind lpr-Clients. Na dann versteh' ich Dein Problem noch weniger. Weil dann kannst Du ja einfach ne entsprechende
/etc/printcap an die entsprechenden BSD-Clients zu verteilen.
 
Also die Abfrage mit nmap, ob der Port 631 offen ist, funktioniert schon mal einwandfrei, damit kann ich mein Problem lösen. :rolleyes:
Ebenso gut klappt das auch mit nc, was zudem wesentlich schneller antwortet als nmap. Danke, @foxit

@Andy_m4 : Wir arbeiten mit den cups-lp-Tools und brauchen dazu keine printcap, sondern lediglich eine Datei, die den Servernamen und den Port enthält. Und weil wir mehrere Unix-Rechner als potentielle Print-Server hier haben (und die nicht immer alle online sind), muss ein druckwilliger BSD-Nutzer das Script absetzen. Das schaut, welcher Rechner online ist und ob er als Print-Server arbeiten kann. Daraus entsteht dann die einzeilige Datei client.conf, die vom cups-lpr ausgewertet wird.

@Azazyel : Das Werkzeug kenne ich bisher gar nicht, ich schaus mir aber heut abend mal an.

Nochmals Danke für eure Beiträge.

Gruß
Berni
 
Genau solche Szenarien lassen sich doch mit CUPS (+zeroconf) wunderbar abbilden. Die (CUPS)-Printserver bieten ihren Dienst im Netz an. Auf dem Client (egal ob jetzt BSD oder Linux) läuft dann halt CUPS als Client und benutzt die zeroconf-Service-Discovery, damit gerade im Netz verfügbare Drucker ansprechbar sind.

Treiberprobleme gibts auch nicht. Denn die Clients schicken ihre Druckaufträge in einem neutralen Format (Postscript) an den jeweiligen CUPS-Server und dieser setzt das dann in die Druckersprache des lokalen Druckers um.

Alles ohne spezifische Konfigurationsdateien die Du erst erstellen musst. Alles ohne erst mit Portscanning umständlich zu prüfen, ob und welcher Rechner (CUPS-Printserver) da ist.
 
@Andy_m4 :
Ganz klar ist mir die Vorgehensweise noch immer nicht!
Brauch ich auf den Clients so eine Art zeroconf-Service (avahi?) oder macht cups das alles intern? Denn normalerweise will cups ja auch auf den Clients die Druckertreiber oder entsprechende ppd-Dateien haben?

Etwas ratlos
Berni
 
Brauch ich auf den Clients so eine Art zeroconf-Service
Das muss der 'server' machen, wo der Drucker dranpappt. Also cups sollte automatisch besagtes AVAHI mitbringen, zum. unter FreeBSD. print/cups

Selber genutzt hatte ich das noch nicht, da ich ein Freund von expliziten Einstellungen bin und kein Bedarf bestand. Aber aus der Erinnerung heraus musste ich mit IPP Everywhere nichts weiter einstellen.
 

Anhänge

  • Screenshot_2021-02-27 Brother_HL-5240 - CUPS 2 2 13.webp
    Screenshot_2021-02-27 Brother_HL-5240 - CUPS 2 2 13.webp
    16,2 KB · Aufrufe: 203
Aha, besten Dank. Leider machen das meine Treiber nicht. Sind nicht die Cups- oder Gutenprint-Treiber (die es für meine Drucker nicht gibt), sondernBrother-eigene Treiber für Linux.
Ich befürchte, dieser Weg bleibt mir versperrt.

Grüße
Berni
 
Ich befürchte, dieser Weg bleibt mir versperrt.
Nicht unbedingt. Wie ich @Andy_m4 verstehe, muss es nicht zwingend via IPP Everywhere laufen. Das habe nur ich erwähnt, weil das bei mir so funktioniert.
Ggf. kann er ja noch ein paar Details auspacken. Das geht in Richtung 'pseudo-druckertreiber-über-netzwerk', dh. auf dem druckauftraggebenden Rechner muss nur kompatibel zum Server geschoben werden, welcher sich dann um den echten Treiber und Drucker kümmert.

Ggf. nützlich:
 
Brauch ich auf den Clients so eine Art zeroconf-Service (avahi?) oder macht cups das alles intern?
Jain. :-)
CUPS macht das eigentlich allein. Erst muss halt nur mit Avahi-Support kompiliert sein (was bei Packages aber fast immer der Fall ist).
Also wenn Du nix konfigurierst findet Dein lokales CUPS schon automatisch CUPS-Instanzen im LAN. Voraussetzungen ist lediglich, das die Rechner die lokale Drucker haben (also die Printserver spielen sollen) den Drucker auch "freigegeben" haben.

Leider machen das meine Treiber nicht. Sind nicht die Cups- oder Gutenprint-Treiber (die es für meine Drucker nicht gibt), sondernBrother-eigene Treiber für Linux.
Wie gesagt. Es wird lediglich an dem Rechner an dem der Drucker dann tatsächlich angeschlossen ist (also der Print-Server) ein Treiber benötigt.
Am einfachsten ist es tatsächlich, wenn Du das schon angesprochene Driverless-Printing (IPP-Everywhere) benutzt. Der Konfigurationsaufwand ist (vor allem auf der Client-Seite) minimal.
PPD-Datei und andere Treiberbestandteile brauchst Du dann wirklich nur auf den Print-Servern.

Das Debian-Wiki widmet sich recht umfangreich der Thematik:
https://wiki.debian.org/CUPSDriverlessPrinting bzw. https://wiki.debian.org/CUPSIPPEverywhere
lässt sich aber auch auf andere System gut übertragen.
 
Andere Option wäre über die TTLs zu ermitteln. Die können zwar auch durch den Administrator des Servers modifiziert werden aber i.d.R. ändert da kaum jemand was dran.

Stichwort: OS Fingerprinting mit TTL bzw. TCP Window Size
 
Also grundsätzlich funktioniert das so, wie @Andy_m4 es beschrieben hat - aber bis jetzt noch nicht überall und auf jedem System. Geklappt hat es auf Anhieb mit allen Linuxkisten und mit GhostBSD. Die Maschinen unter Open- bzw. NetBSD wehren sich noch und ich weiss im Moment nicht recht, woran's liegt. Werde daran arbeiten. Bis dahin klappt die indirekte OS-Erkennung mittels nc ja noch.
Danke für den 1a Input.

Grüsse
Berni
 
Soweit komme ich gar nicht! Auf diesen Rechnern (also Open/NetBSD) kann ich die Drucker ohne eigene Treiber nicht einrichten - der Treiber (oder die ppd) wird gnadenlos verlangt, sonst gehts nicht weiter. Wahrscheinlich kann cups auf diesen Rechnern kein Bonjour oder Zeroconf. Oder ich muss doch tief ins avahi einsteigen.

Aber insgesamt ist der Status Quo gerade ganz OK.

Grüße
Berni
 
Wahrscheinlich kann cups auf diesen Rechnern kein Bonjour oder Zeroconf.
Zumindest bei OpenBSD ist es laut Port-Makefile ( https://github.com/openbsd/ports/blob/master/print/cups/Makefile ) als Lib-Dependency mit drin.
Zeroconf/Avahi/Bonjour brauchst Du ja in erster Linie auch "nur" für das auffinden von PrintServern. Das Drucken geht im Prinzip auch so.
"Sehen" denn die OpenBSD/NetBSD wenigstens die Drucker?

Aber insgesamt ist der Status Quo gerade ganz OK.
Ja. Wäre aber cooler, wenn wir den Rest auch noch hinkriegen. :-)
 
Etwas Nebelgestocher, weil ich https://wiki.debian.org/CUPSIPPEverywhere überflog:
IPP braucht so oder so eine Grundgerüst-.PPD, wie ich das lese. Entweder selbst gebastelt oder in meinem Fall vermute ich, dass die mit gutenprint mitgeliefert wurde.

Kannst du mal abgleichen, welche Optionen du bei Add Printers bekommst?
 

Anhänge

  • Screenshot_2021-03-04 Add Printer - CUPS 2 2 13.webp
    Screenshot_2021-03-04 Add Printer - CUPS 2 2 13.webp
    18,8 KB · Aufrufe: 198
Da es ein remote Rechner ist, eher
Code:
ssh $HOST "uname -s"
unter der Voraussetzung, dass in der Variable Host der Rechnername bzw. IP steckt.
Um das zu automatisieren muss man natürlich dafür sorgen, dass man sich dann remote ohne Passwort einloggen kann (z.B. per Zertifikat)
 
Cups auf Open/NetBSD sieht die Drucker (alles Brother DCPJ525W) schon und bietet die gleichen Verbindungsoptionen, die @mr44er aufgelistet hat. Aber der nächste Schritt ist dann die Frage nach dem Treiber bzw. der ppd. Und dann gehts nicht mehr weiter.
Die OS-Abfrage mittels ssh ist recht elegant, aber mit Zertifikat zu aufwändig. Im Moment frag ich über nc den Port 631 ab, auf dem auf den BSD-Maschinen kein cupsd lauscht.
 
Note that it is actual printers which are discovered, not IPP Everywhere print queues broadcast by a CUPS server.

cups-browsed has a PPD generator for IPP Everywhere printers and a PPD will automatically be created in /etc/cups/ppd.
Kannst ja mal schauen, ob im Pfad bei Server oder Client jeweils was abgelegt wurde.
 
Zurück
Oben