syslogd und Sockets und Perl
Bio
- programmiertechnik
Sup!
Aus Paranoia wollte ich an meinen Server einen Log-Server per serielle Schnittstelle anbinden, der unangreifbar mitloggt was passiert, so daß böse böse Hacker die Logs zumindest nicht löschen können.
Nun kann der syslogd angeblich mit syslogd -p dazu überredet werden, seine Log-Messages an einen angegebenen Socket zu schicken.
Ich will aber die Nachrichten lieber an /dev/ttyS0 - und das ist kein Socket, sondern ein Character-Device.
Nun habe ich ein Perl-Skript geschrieben, daß einen Socket kreiert... das sollte dann die Daten empfangen und an das Device umleiten. Dummerweise kann ich den syslogd nicht überreden, sich an den Socket zu verbinden.
Also, als "Socket" benutze ich diese Skript hier:
#!/usr/bin/perl -w
use Socket;
socket(SOCK, PF_UNIX, SOCK_STREAM, 0) or die "$!";
unlink('/tmp/usock');
$sun = sockaddr_un('/tmp/usock');
bind (SOCK,$sun);
listen (SOCK,SOMAXCONN) or die "$!";
print "listening\n";
accept (CLIENT,SOCK);
print "Connected!\n";
while($input = <CLIENT>)
{
print $input;
}
Den syslogd starte ich mit /sbin/syslogd -p /tmp/usock
funzt aber nicht :-((
Was mache ich bloss mal wieder falsch? Ich weiss doch sonst immer alles ;-) *scnr*
Gruesse,
Bio
Sup!
Ehm... tja. Mittlerweile habe ich erkannt, daß ein Socket ein überaus böses Ding ist, welches zwar im Dateisystem erscheint, sich da aber für gar nichts verwenden lässt - kann man nichts rein- und rausschreiben und so :-(
Tja, und der syslog will es auch nicht aufmachen, ich schreibe jetzt mal selbst ein Skript zum Aufmachen, nicht, daß dass irgendeinen praktischen Sinn hätte oder so... vielleicht kann ich den syslog auch dazu überreden, die Sachen ganz ohne Socket direkt an /dev/ttyS0 zu schicken - nur wofür wäre dann die Möglichkeit, die Sachen an einen Socket zu schicken, gut?
Gruesse,
Bio
Hi Ritter,
Mittlerweile habe ich erkannt, daß ein Socket ein
überaus böses Ding ist, welches zwar im Dateisystem
erscheint, sich da aber für gar nichts verwenden
lässt - kann man nichts rein- und rausschreiben und
so :-(
Wir haben mal in einem Projekt eine zentrale socket als Serialisierungsmethode für Meldungen beliebiger Programme verwendet.
Ein Programm hängte sich permanent an diesen socket und erzeugte lauschenderweise die Protokolldatei (plus eine Bildschirmausgabe auf der Maschinenkonsole); beliebige andere Operator-Clients konnten sich mit "tail -f" an die Protokolldatei dran hängen oder mit "grep" irgendwelche Sichten auf dieselbe aufmachen oder was auch immer.
Die entsprechende socket-API haben wir als Bibliothek jedem Anwendungsprogramm hinzu gebunden. Die Programme sendeten nämlich keine Meldungen, sondern Meldungsschlüssel und Stellungsparameter; der socket-Belauscher übersetzte die Meldungsschlüssel in Meldungstexte und setzte die Parameter an den passenden Stellen ein. (Das Meldungssystem sollte potentiell sprach-unabhängig sein.)
Nicht, daß ich Dir jetzt irgendwas über socket-APIs erzählen könnte (diese Implementierung war nicht von mir, das Projekt ist 10 Jahre alt, in C unter IBM AIX realisiert und inzwischen nicht mehr produktiv) - nur: Deine Idee halte ich für durchaus angemessen, genau dafür würde ich sockets einsetzen wollen.
Viele Grüße
Michael
Hoi,
noe, krank nicht -- aber ich bin am Wochenende nicht online -- oder
zumindest selten.
Ehm... tja. Mittlerweile habe ich erkannt, daß ein Socket ein
überaus böses Ding ist,
Geschmack-Sache.
welches zwar im Dateisystem erscheint, sich
da aber für gar nichts verwenden lässt - kann man nichts rein- und
rausschreiben und so :-(
Na klar kann man. Man muss nur den richtigen Socket nehmen ;-)
Nun kann der syslogd angeblich mit syslogd -p dazu überredet
werden, seine Log-Messages an einen angegebenen Socket zu
schicken.
Was fuer ein Socket? Ein Unix Domain Socket oder ein INET-Socket?
Tja, und der syslog will es auch nicht aufmachen,
Hat er die Rechte dazu? Hast du die richtige Socket-Art genommen?
nur wofür wäre dann die Möglichkeit, die Sachen an einen Socket
zu schicken, gut?
Fuer z. B. zentrales Logging (Logging von mehreren PCs ueber das
Netzwerk an einem einzigen PC).
Gruesse,
CK