Port auf entfernten Server mit netcat prüfen

Heute wollte ich ein E-Mail Konto auf meinem Laptop einrichten. Bekam aber immer wieder die Meldung, das keine Verbindung zum Server besteht. Meine erste Vermutung war die Firewall auf dem Server. Also wollte ich wissen ob der Port überhaupt offen ist.

necat lieferte die Antwort. POP3_SSL ist nicht offen für meine IP.

$ nc -zv www.domainname.de 995
nc: connect to www.domainname.de port 995 (tcp) failed: Connection timed out

Nützlich: mit netcat lassen sich auch Portbereiche definieren und testen.

$ nc -zv www.domainname.de 80-83
Connection to www.domainname.de 80 port [tcp/http] succeeded!
nc: connect to www.domainname.de port 81 (tcp) failed: Connection timed out
nc: connect to www.domainname.de port 82 (tcp) failed: Connection timed out
nc: connect to www.domainname.de port 83 (tcp) failed: Connection refused

Dateien und Ordner Rekursiv per FTP mittels Shell Script hochladen

Eine Bemerkung zum Beginn: Rein aus Sicherheitsgründen verwende ich FTP nicht gern. Aber bei einigen Projekten kommt man nicht herum sich damit auseinanderzusetzen, da der Hoster dies als einzige Datenübertragungsmethode anbietet.

Nun aber zum Problem. Der Standard FTP Client „ftp“ kann mehrere Dateien mit mput verarbeiten. Leider ist diese Funktion nicht rekursiv. Gerade beim Upload von mehreren Dateien und Ordnern via Script wird es schnell aufwändig. Einen ganz charmanten Ansatz bietet ncftp. Dort kann ich mput mit dem Paramater -R verwenden und Rekursiv hochladen.

Wenn das Paket noch nicht auf der Maschine installiert ist, kann das mit folgendem Befehl nachgeholt werden.

sudo apt-get install ncftp

Nun das Script zum Upload:

#!/bin/bash
HOST='ftp.domain.de'
USER='ftpusername'
PASSWD='ftppassword'

ncftp -u $USER -p $PASSWD $HOST << EOT
passive
ascii
cd /remote_directory
lcd /local/upload/directory/
mput -R *
bye
EOT

Weitere Informationen zum Thema:
http://www.ncftp.com/

pcregrep gegen grep

Um mit reguläre Ausdrücken auf der Linux-Konsole zu suchen, verwendete ich meist das Programm grep. Zufällig bin ich jetzt auf pcregrep gestoßen. Das kleine Tool befindet sich in den Paketquellen von Ubuntu und kann wie folgt installiert werden.

$ sudo apt-get install pcregrep

Im direkten Vergleich zeigt sich, das pcregrep deutlich schneller bei der Verarbeitung von Perl Kompatiblen Ausdrücken ist als grep -E.

$ time grep -o -E ‚^[0-9.]+\s‘ access.log > /dev/null
real 0m1.526s
user 0m1.508s
sys 0m0.012s

im Vergleich zu ….

$ time pcregrep -o ‚^[0-9.]+(?=\s)‘ access.log > /dev/null
real 0m0.036s
user 0m0.032s
sys 0m0.000s

Die Grundlage des Vergleichs ist die Suche nach IP Adressen in einer ca. 7 MB großen access.log Datei eines Apache. Wenn man das Ergebnis mal hochrechnet auf eine GB große Datei, macht sich der Unterschied schon ganz schön bemerkbar.

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/precise/man1/pcregrep.1.html
http://manpages.ubuntu.com/manpages/precise/man1/grep.1.html

Inhalt mehrerer Dateien in einer Datei Zusammenführen

Heute mal ein kleiner Schnipsel der sicherlich für den ein oder anderen hilfreich sein kann. Es geht um das Zusammenführen des Inhalts von zwei oder mehr Dateien. Hierfür kann z.B. der Befehl cat verwendet werden.

$ cat datei1.txt datei2.txt > datei12.txt

Selbstverständlich lässt sich der Befehl auch prima mit einem find oder ls kombinieren. Damit lassen sich dann auch ganze Order oder nur bestimmte Dateien in einem Verzeichnis zusammenführen.

Externe IP Adresse in der Konsole anzeigen

Heute mal eine kleine Gedankenstütze für das Anzeigen der Öffentlichen IP-Adresse in der Shell. Denn gerade wenn eine Maschine über ein Gateway oder Proxy mit dem Internet verbunden ist, finden sich in den bekannten Systemtools wie ifconfig keinerlei Informationen über externe Anschlüsse.

Aber wie am Desktop auch hilft hier eine der zahlreichen Webseiten die meine aktuelle IP-Adresse zurückgeben. Ein Beispiel könnte zum Beispiel so aussehen.

$ wget http://ipecho.net/plain -O – -q ; echo
178.254.11.33

Über Vorschläge weiterer Endpoints würde ich mich in den Kommentaren freuen.