Zum Empfang von Störungsmeldungen verschiedener Netzwerkdrucker und anderer Geräte kann ggf. die Syslog-Einstellung benutzt werden. Diese Einstellung findet sich z.B. in einigen HP-Druckermodellen (z.B. Laserjet 4200N, 4250N und sicher vielen weiteren). Der Drucker oder auch ein anderes Netzwerkgerät sendet dann kurze Textnachrichten bzw. Störungs- und Statusmeldungen an eine eingestellte Netzwerkadresse. Diese Meldungen können bei der Problemdiagnose helfen.

Als Empfänger kann ein kleines Programm dienen, welches auf einem entpsrechenden Rechner gestartet wird. Die empfangenen Meldungen in der Datei syslog.log gesammelt.
Ich habe dies hier mal als kleines Perl-Script realisiert. Das kann man sicherlich eleganter machen, es war nur ein erster Test mit Perl. 😉 Achtung hier sind keine Sicherheitsfeatures implementiert, das Script nimmt jede eingehende Meldung und schreibt sie in die Datei.

Getestet mit Strawberry Perl, unter Windows XP :
syslogd.pl

# perl
# christian-nagel.net
# SimpleSyslogDeamon
# Benutzt den Syslog-Standardport 514 (UPD), um Nachrichten zu empfangen
# und in eine Logdatei zu schreiben. (Z.B. HP-Drucker)
# Datenbankerweiterung (mySQL) kann ggf. ergänzt werden.

use strict;
use IO::Socket;

sub writelog;
my($sock, $oldmsg, $newmsg, $hisaddr, $hishost, $MAXLEN, $PORTNO, $onScreen);

$MAXLEN = 1024;
$PORTNO = 514;
$onScreen = 1;
$sock = IO::Socket::INET->new(LocalPort => $PORTNO, Proto => ‚udp‘) or die „socket: $@“;

print „Warte auf eingehende Syslog messages auf Port $PORTNO\n“;
writelog(„Syslogd started!“);

# Eine Dauerschleife
while (1 eq 1) {
  
  while ($sock->recv($newmsg, $MAXLEN)) {
    my($port, $ipaddr) = sockaddr_in($sock->peername);
    $hishost = gethostbyaddr($ipaddr, AF_INET);
    $hishost = inet_ntoa($ipaddr);
    #print „$hishost: „$newmsg“\n“;
    writelog(„$hishost: $newmsg“, $onScreen);
  }
}

sub writelog {
  my($timedata);
  my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);

  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
  $timedata = sprintf „%4d-%02d-%02d %02d:%02d:%02d „,$year+1900,$mon+1,$mday,$hour,$min,$sec;

  open(MYLOG, „>>syslog.log“);
  print MYLOG $timedata.“ „.$_[0].“\n“;

  if ($_[1] eq 1) {
    print $timedata.“ „.$_[0].“\n“;
  }

  close MYLOG;
}