Pruefen ob ein Computer online ist mit ping und perl
Ich habe bei der Arbeit ein kleines Perl-Skript geschrieben, welches prüfen sollte, ob bestimmte Computer in bestimmten Räumen(also IP-Ranges) noch online sind oder schon automatisch ausgestellt wurden. Dieses Skript sendet ein Paket über ping und guckt dann, ob es ein packetloss gibt. Im Grunde wäre das in der Bash besser gewesen, aber so kann man das, wenn man es ein bisschen anpasst, auch unter anderen OS verwenden.
Code
# The string containsPacketLoss is searching for
$packetloss = "100% packet loss";
# Init
$returnval = "";
print "\nCheck if Computers are online...\n";
# Scan IP-Range
for (my $i = 1; $i <=255; $i++) {
# c = one package, w = deadline, q = quiet
$ipcmd = "ping -c1 -q -w1 169.254.1." . $i;
# execute and retreive output
$returnval = `$ipcmd`;
if (containsPacketLoss() == 0) {
# output
print "Computer with IP 169.254.1." . $i . "is still online.\n";
# write log file
system("echo Computer with IP 169.254.1.". $i . localtime(time) . " ONLINE >> /home/user/log");
}
}
sub containsPacketLoss(){
# check by RegEx if the string specified above is in the returnvalue
# of the ping command
if ($returnval =~ m/$packetloss/ ){
return 1;
}
return 0;
}
Download
MAC-Adresse per Skript aus ifconfig
Soweit ich weiß, gibt es unter Linux keinen Befehl oder eine Datei in der die MAC-Adresse steht, nur ifconfig. Für die weitere Verwendung ist das natürlich unpraktisch und so habe ich hier eben ein bisschen was mit grep und regular expressions zusammengeskriptet/kopiert:
#!/bin/bash
ifconfig |grep $1 | grep -m 1 -Eo '[[:alnum:]][[:alnum:]](:[[:alnum:]][[:alnum:]]){5}'
Das am besten unter der Datei grepMacAdr speichern, noch schnell mit
chhmod +x grepMacAdr
ausführtbar machen, dann erfolgt der Aufruf mit
./grepMacAdr eth0
eth0 ist hier das Netzwerkgerät. Wenn das bekannt ist kann auch direkt im Skript $1(=erster Parameter) durch die entsprechende Bezeichnung geändert werden.
Zur Erklärung: ifconfig ruft den Befehl auf, der alle Netzwerkgeräte samt Konfiguration ausgibt, von denen schneidet das Tool grep nur den Abschnitt heraus, der das übergebene Netzwerkgerät behandelt(bzw. die erste Zeile, da steht die MAC-Adresse im allgemeinen) und davon wiederrum wird mit einer Regular Expression(-E) dann nach dem Muster XX:XX:XX:XX:XX gesucht. Falls, was mit dem ersten grep falsch gelaufen ist, wird nur das erste ausgeben(-m 1). Ausgegeben wird dabei nur der Teil, der das Muster einhält, nicht die ganze Zeile(-o)
Ihr findet das Skript auch als fertige Datei hier.
Mit acp_commander root Zugriff auf Buffalo TeraStation Pro
Bei der Arbeit haben wir eine TeraStation Pro II und eine TeraStation Live. Dort kommt man leider nur per Web-Interface drauf, wir brauchten aber root haben also hab ich mich mal umgeguckt. Man kann natürlich die Firmware flashen, aber es geht auch noch einfacher. Mit dem Tool acp_commander und ein paar Linux-Befehlen kann man sich ebenfalls root Zugriff verschaffen.
Bei der TeraStation Live klappte folgendes:
java -jar acp_commander -t IPADRESSE -o
Vorrausgesetzt ist natürlich eine funktioniernde Java Installation. Wenn das unter Windows geschieht, muss das bin-Verzechnis der Java Installation im PATH sein(war bei mir nicht standardmässig der Fall). Für IPADRESSE ist die IP-Adresse des Geräts einzusetzen(wird evtl. auf Display angezeigt).
Wenn man folgende Meldung bekommt, sollte man der TeraStation eine statische IP geben, dem PC ebenfalls und die dann einfach direkt verbinden, denn irgendwas ist in den Router/W-LAN Einstellungen nicht in Ordnung bzw. zu restriktiv:
A SocketTimeoutException usually indicates bad firewall settings. Check especially for *UDP* port 22936 and make sure that the connection to your LS is working. ERROR: Exception: SocketTimeoutException (Receive timed out) [ACP Send/Receive (Packet:8020 = ACP_Discover)]
Wenn alles geklappt hat, kann man sich mit root und keinem Passwort über telnet anmelden:
telnet -l root IPADRESSE
oder über putty(telnet auswählen, Standard ist natürlich SSH). Jetzt kann man SSH nach belieben in /etc/sshd_config konfigurieren und dann mit /etc/init.d/ssh restart neustarten.
Die andere Kiste war nicht ganz so einfach zu öffnen, hier braucht man ein paar Linux-Befehle:
Setzen eines neuen root Passworts:
java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "(echo ADMINPASS;echo ADMINPASS)|passwd"
Schaltet die Authentifizierung über PAM via SSH wieder an:
java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "sed -i 's/UsePAM yes/UsePAM no/g' /etc/sshd_config"
Einstellung in der /etc/sshd_config, dass sich auch root direkt anmelden kann und nicht über su ein User zum root wird(gibt es unter busybox wohl nicht):
java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config"
Zu guter Letzt: SSH Server neu starten
java -jar acp_commander.jar -t IPADRESSE -ip IPADRESSE -pw ADMINPASS -c "/etc/init.d/sshd.sh restart"
Für ADMINPASS ist jeweils das Administratorpassowort einzusetzen und für IPADRESSE die IP-Adresse(s.o.). Auch hier muss der UDP Port frei sein, also am besten direkt über statische IPs mit nem Kabel von Computer zu TeraStation verbinden.
Man findet sonst auch noch interessante Informationen auf cpradio.org.
Credits to BigDiver und eine andere Quelle, die ich gerade nicht mehr wiederfinde.
dd Statusanzeige
dd ist das Kommandozeilen Kopiertool von *nix-Betriebssystemen. Im Gegensatz zu den meisten Programmen, hat es aber keine Statusanzeige oder gar einen Statusbalken um den Fortschritt anzuzeigen, so dass man kontrollieren kann, ob sich das Programm nicht vielleicht aufgehängt hat.
Mit diesem Trick kann man aus dd dennoch zu einer Ausgabe zwingen:
- dd Kopiervorgang starten, z.B.:
$ dd if=/dev/sdb of=/dev/sdc
- Neue Konsole öffnen
- PID vom dd-Prozess herausfinden:
$ ps -A |grep dd
Die Ausgabe könnte z.B. so aussehen:
$ 4905 pts/0 00:00:00 dd
- Statusreport-Signal an dd senden(PIDist die Nummer die Schritt 3. ergeben hat, z.B. 4095):
$ kill -USR1 PID
- In der Konsole aus der ddgestartet wurde müsste jetzt eine Ausgabe kommen, z.B.
75273+0 Datensätze ein 75273+0 Datensätze aus 38539264 Bytes (39 MB) kopiert, 27,4718 s, 1,4 MB/s
Ausserdem gibt es noch ein grafisches Tool für dd: air-imager
Credits to jma89 and h4shBrpwnz at linuxquestions.org
//update:
Das kleine Programm pipe viewer(pv) tuts auch und man bekommt sogar noch Datenrate und Fortschrittsbalken. Einfach installieren:
$ sudo apt-get install pv
Und dann über den geraden Strich über den eckigen Klammern an den dd Befehl hängen:
$ dd if=/mnt/sdx of=/mnt/sdy | pv
Credits to Peteris Krumin for finding this.
Firefox 5.0 und ubufox mit Ubuntu 10.04 (xul-ext-ubufox Problem)
repat@laptop:~$ sudo apt-get upgrade Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut Status-Informationen einlesen... Fertig Die folgenden Pakete werden aktualisiert: ubufox 1 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert. Es müssen noch 0B von 58,3kB an Archiven heruntergeladen werden. Nach dieser Operation werden 319kB Plattenplatz zusätzlich benutzt. Möchten Sie fortfahren [J/n]? j (Lese Datenbank ... 268513 Dateien und Verzeichnisse sind derzeit installiert.) Vorbereiten zum Ersetzen von ubufox 0.9-0ubuntu1~mfs~lucid1 (durch .../ubufox_0.9.1-0ubuntu0.10.04.1~mfn3_all.deb) ... Entpacke Ersatz für ubufox ... dpkg: Fehler beim Bearbeiten von /var/cache/apt/archives/ubufox_0.9.1-0ubuntu0.10.04.1~mfn3_all.deb (--unpack): Versuche, »/etc/xul-ext/ubufox.js« zu überschreiben, welches auch in Paket xul-ext-ubufox 0:0.9-0ubuntu1~mfs~lucid1 ist Fehler traten auf beim Bearbeiten von: /var/cache/apt/archives/ubufox_0.9.1-0ubuntu0.10.04.1~mfn3_all.deb E: Sub-process /usr/bin/dpkg returned an error code (1)
Lösung des Problems? xul-ext-ubufox(das Paket ist dafür gut) deinstallieren:
sudo apt-get remove xul-ext-ubufox
danach
sudo apt-get install -f
oder
sudo apt-get remove sudo apt-get install ubufox
Dank geht an orthopteroid aus ubuntuforums.org.
Danach ist bei mir alles in Englisch gewesen, dazu muss man die neue Sprachdatei runterladen und installieren
Dank geht an Martin Vogel, für den Tip:)
update: Des weiteren berichtet Tuxsuisse im Blog linuxundich.de, dass man unter Ubuntu z.B. einfach das Paket firefox-locale-de mit
sudo apt-get install firefox-locale-de
nachinstallieren könnte, dann geht das ebenfalls.
Cronjobs von selbst wieder anstellen
Das Problem war ganz einfach, manuell dürfen einige wenige Berechtigte aus guten Gründen Cronjobs abstellen. Damit aber am nächsten Tag der Cronjob wieder läuft braucht man ein (nicht-abstellbaren) Cron Jobs, der alle anderen Cronjobs wieder anstellt. Glücklicherweise gibt es da die Schnittstelle Config::Crontab und so sind dies nur ein paar Zeilen(via CPAN bzw. man Config::Crontab):
#!/usr/bin/perl use Config::Crontab; my $ct = new Config::Crontab; $ct->read; # alle crons auslesen a.k.a. crontab -l $_->active(1) for $ct->select(-command_re => '/usr/local/bin/command'); # zeile vervielfachen fuer andere befehle $ct->write; # alle crontabs schreiben, nicht vergessen!
Der gewünschte, nun wieder aktive Befehl ist /usr/local/bin/command.
Internet Explorer Vollbild per Kommandozeile
Nicht dass ich Internet Explorer Benutzer wäre, aber bei der Arbeit bekomm ich manchmal seltsame Aufträge:
C:\Programme\Internet Explorer\iexplore.exe -k http://google.de
Das Kommandozeilenargument "-k" aus der cmd, einer Verknüpfung oder dem "Ausführen..."-Dialog startet eine Website im Vollbild, so als hätte man F11 gedrückt. Bei anderssprachigen Windows Versionen, natürlich den Pfad anpassen.
Administrator Account de/aktivieren mit Windows 7
Mit folgendem Befehl kann man den Admin Account deaktivieren:
net user Administrator /active:no
Das Problem taucht aber erst andersherum auf:
net user Administrator /active:yes
Hier sollte man einen Systemfehler 5 bekommen.Umgehen lässt sich das im abgesichteren Modus, also beim Starten einfach F8 drücken und dann abgesichterer Modus wählen. Dort kann man sich dann anmelden und dann funktioniert auch der Befehl zum Aktivieren wieder.
Samba, net use, Windows 7 und Systemfehler 86
Beim Mappen von Netzwerklaufwerken unter Windows 7 ist mir heute bei einer veralteten Samba Version(2.x) der Systemfehler 86 aufgetaucht. Nach etwas googeln fand ich folgenden Forum Eintrag auf wirklichewelt.de, welcher mich auf die richtige Fährte brachte. Allerdings war die vorgeschlagene Lösung, nicht das was ich suchte.
Auf einer anderen Windows 7 Maschine klappte nun der Login sehr wohl, in den Einstellungen von secpol.msc war jedoch unter Netzwerksicherheit: LAN Manager Authentifizierung... keiner der Werte aus der Dropdown Liste angebeben sondern einfach nichts. In der Auflistung der Sicherheitsoptionen stand "nicht definitiert".
Nun konnte ich aber partou nicht den Wert aus dem LAN Manager entfernen auf der Maschine, auf der der net use login nicht funktionierte. Lösung: den passenden Registry Wert herausfinden und löschen.
Im Blog von t-error fand ich nun einen Kommentar von Gunnar Frenzel, der verriet, dass in der Registry im Ordner HK_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa der passende Schlüssel "LmCompatibilityLevel" ist. Ein Test auf der funktionierenden Windows Maschine zeigte, dass der Schlüssel dort nicht vorhanden war, ergo das "nicht definiert" aus den Sicherheitsoptionen erklärt.
Einfach den Schlüssel löschen und rebooten(wichtig!), dann klappt auch net use wieder. Mit neueren Samba Versionen ist das allerdings kein Problem mehr, da kann man wie im ersten Link vorgeschlagen auch LM- und NTLM-Antworten senden (NTLMv2-Sitzungssicherheit verwenden) wählen

