Mac OS X

Are you still playing the graphic adventure made in Redmond?

Binäre .plist Datei unter OS X mit Java lesen

Mit OS X 10.2 führte Apple ein binäres plist-Format ein, welches deutlich weniger Speicherplatz benötigt als das bisherige.Mit Einführung von OS X 10.4 wurde dieses neue, binäre Format das Standard-Format. Dem binären Format liegt eine einfache XML-Struktur zugrunde (welche mit OS X 10.0 eingeführt wurde), welche sehr einfach mit Java zu lesen und zu parsen war.

Das neue Format muß nun speziell geparsed werden: entweder indem man Apples Property List Editor verwendet, oder durch die Verwendung der Apache Commons Configuration (deren API ebenfalls das Property List Format unterstützt). Inzwischen gibt es ein neues Projekt von Daniel Dreibrodt, der ein JAVA-Projekt pflegt, welches das Lesen der binären plist ermöglicht. Dieses Projekt ist unter der GPL3 lizensiert und kann hier gefunden werden:

http://code.google.com/p/plist/

Update: Es gibt ein neues Projekt auf sourceforge, welches das .plist-Format nicht nur lesen, sondern auch schreiben können soll. Ich habe es noch nicht getestet, aber ich möchte hier trotzdem schon einmal den Link veröffentlichen: Property List Library

Installer (.pkg oder .mpkg) ohne Dialog (silentmode) von der Konsole unter OS X

Häufig wird Software für OS X als .pkg oder .mpkg Installer-Bundle geliefert (der Unterschied zwischen .mpkg und .pkg ist, daß das .mpkg flexibler hinsichtlich verschiedener Anpassungen ist). Wenn man den Installer durchlaufen lassen möchte, ohne sich dabei durch die GUI-Dialoge klicken zu müssen, dann kann man dies über die Konsole im sogenannten Silentmode tun:

sudo installer -pkg your_installer_file.pkg -target /

Der Installer läuft nun durch, ohne daß eine grafische Benutzeroberfläche aufgeht. Eventuell muß noch das Paßwort des System-Administrators eingegeben werden, sofern der Installer dies benötigt. Das Paßwort kann (aber sollte nicht!) auch in der Kommandozeile mitgegeben werden (so können zum Beispiel automatisiert mehrere Installer ausgeführt werden):

echo <password> | sudo installer -pkg your_installer_file.pkg -target /

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ACHTUNG: Das Paßwort wird dadurch u.a. in der bash_history gespeichert!

Diese Methode sollte nur verwendet werden, wenn man 100% genau weiß was man dabei tut!

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Firewall umgehen Teil II – Sicheren Tunnel durch eine Firewall bauen

*WOW* – die Reaktionen auf meinen letzten Artikel sind überwältigend! Der Artikel ist kaum eine Woche alt, aber meine Mailbox ist bereits voll mit Fragen, ob der SOCKS-Tunnel auch verschlüsselt aufgebaut werden kann über z.B. eine SSH-Verbindung.
Um meiner Mailbox einige weitere hundert Emails zu ersparen: JA – es gibt eine Möglichkeit!

Einen SOCKS-Proxy über SSH aufbauen

Alles was man dazu benötigt, um einen SOCKS5-Tunnel über SSH zu fahren ist ein openSSH auf dem “SOCKS-Server” und den bereits benutzten und bekannten “Proxifier”, ebenso wie unter Windows-Systemen das Programm PuTTY.

Als erstes muß der sichere Tunnel aufgebaut werden (unter OS X hierzu in der Konsole folgenden Befehl eingeben):

ssh -2 -N -D 8080 user@<ip of your SOCKS5-Host>

zum Beispiel:

ssh -2 -N -D 8080 myuser@192.168.1.11

Unter Windows muß PuTTY wie folgt konfiguriert werden:

Den Hostname (fim Beispiel: 192.168.1.11 – hier muß aber die IP Ihres SSH/SOCKS-Servers eingetragen werden!) im Bereich “Sessions” eintragen.
Dann im Reiter “Tunnels” den Source Port auf 8080 stellen
Dann “Dynamic” unter dem Punkt Destination Port anwählen
Open anklicken um den Tunnel aufzubauen

Als nächstes wird der Proxifier gestartet und folgende Einstellung vorgenommen:

Proxifier Setting for SSH SOCKS tunnel

Ich finde es nützlich (aber nicht unbedingt notwendig) die folgende Regel noch den Proxification Rules hinzuzufügen:

Proxification Rules for ssh tunnel

Das wars: openSSH hat einen integrierten SOCKS-Proxy. Proxifier sendet nun den gesamten Datenverkehr über den verschlüsselten SSH-Tunnel, und der SOCKS-proxy in openSSH auf der anderen Seite schickt den Datenverkehr an die richtige Zieladresse, bzw. leitet den eingehenden Datenverkehr wieder korrekt zurück.

Firewall umgehen – SOCKS (dante) Tunnel und OS X

Neue Kunden, neue Probleme: Üblicherweise erhalte ich bei meinen Kunden über das Intranet Zugang zum Internet und kann eine VPN-Verbindung oder wenigstens eine SSH/SSL-Verbindung aufbauen, damit ich mein IMAP-Postfach auf sicherem Wege erreichen kann. Dieses Mal wurde ich leider jedoch komplett ausgesperrt – nur Port 80 war erlaubt – und für mich ist ohne Emails zu leben wie für andere ohne zu atmen. So war mein erster Entschluß gefasst: die Firewall durchbrechen und meine Verbindungen durch diese hindurch nach außen zu bringen.
Ich hatte soetwas schon einmal während meiner Universitätszeit gemacht, als die Systemadministratoren beschlossen unser Wohnheim benötige nur die Ports 80 und 21. Und so war mein erster Gedanke nun auch dieses Mal ein SOCKS-Tunnel.

Einrichten des SOCKS-Tunnel

nachdem ich google nach SOCKS durchsucht hatte fand ich eine häufig empfohlene Implementierung von SOCKS5: Dante
Außerdem gibt es eine sehr nette Übersicht über verschiedene Implementierungen auf wikipedia: http://en.wikipedia.org/wiki/SOCKS

Installation

Die Installation ist sehr einfach: Unter SuSE findet man ein passendes rpm welches einfach installiert wird, unter FreeBSD findet man Dante in den ports (cd /usr/ports/net/dante/; make; make install ). Interessanter wird nun die Konfiguration von Dante, die ich heute erklären möchte (ich habe nirgendwo ein HowTo gefunden und mußte deswegen die gesamte Dokumentation lesen):

Konfiguration

Das config-file findet man unter /etc/sockd.conf (/usr/local/etc/sockd.conf unter FreeBSD). Dieses muß in der folgenden Weise angepasst werden:

#Logfile fuer Dante konfigurieren
logoutput: /var/log/dante.log

#IP und Port auf der Dante fuer eingehende Verbindungen warten soll
internal: <IP address of your dante server> port = 80

#IP/Interface welches Dante ausgehend benutzen soll
#Name des Interface erhaelt man ueber ifconfig
external: eth0
#Alternative: >external: <IP address that should be used>

#Authentifizierung: deaktiviert, da eine statische IP-Adresse authentifizierung genug ist.
method: username none

#unprivileged user
user.notprivileged: nobody

Soviel mal zu den Grundlagen – nun zum interessanten Teil:

#Wer darf den SOCKS-Tunnel konnektieren?
client pass {
from: <your ip here>/32 port 1-65535 to: 0.0.0.0/0
}

#Loopback darf ebenfalls den Tunnel verwenden
client pass {
from: 127.0.0.0/8 port 1-65535 to: 0.0.0.0/0
}

#Alle anderen nicht
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

#Nach erfolgreicher Verbindung: wohin darf konnektiert werden?
#Loopback darf niemand von aussen konnektieren
block {
from: 0.0.0.0/0 to: 127.0.0.0/8
log: connect error
}

#Verbindungen von aussen an den Client sind erlaubt
pass {
from: <your ip here>/32 to: 0.0.0.0/0
protocol: tcp udp
}

pass {
from: 127.0.0.0/8 to: 0.0.0.0/0
protocol: tcp udp
}

#Der Rest wird geblockt
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

Kleiner Hinweis: dieses Beispiel erlaubt den Zugang von einer IP-Adresse (/32) aus, selbstverständlich kann auch von mehreren aus der Zugang erlaubt werden. Wer mit dem Subnetting und der Slash-Notation kämpft, der findet hier eine passende Hilfe: Subnet Cheat Sheet

Starten von Dante

nach dieser recht einfachen Konfiguration sollte der Dante-Dienst ohne Probleme sich starten lassen über folgenden Befehl:

/etc/rc.d/sockd start

(Unter FreeBSD muß zuerst sockd_enable=”YES” in die /etc/rc.conf eingetragen werden, und dann der Befehl: /usr/local/etc/rc.d/sockd start ). Ab jetzt kann man im Logfile /var/log/dante.log zusehen was passiert.

Ok – damit kommen wir zum komplizierten Teil: OS X davon zu überzeugen mit SOCKS5 zusammenzuarbeiten.

OSX mit dem SOCKS5 Tunnel nutzen

Als erste (und nicht erfolgreiche) Idee kam mir, dies über die Systemeinstellungen unter Netzwerk zu konfigurieren. (Systemeinstellungen öffnen, Netzwerk und dort “Weitere Optionen” anklicken, dann auf den Reiter “Proxies”. In diesem Fenster den SOCKS Proxy aktivieren und die IP des Servers und den zugehörigen Port eintragen; die Änderungen speichern und aktivieren.) Leider helfen diese Einstellungen nur bei Cocoa and WebKit-basierten Programmen (und da selbst diese Applikationen nicht alle die Systemeinstellungen benutzen ist man hier auch nur zu 95% abgedeckt).

Screenshot Systempreferences network german

Screenshot Systempreferences network german

Thunderbird und Firefox zum Beispiel benutzen nicht die Systemeinstellungen. Beide Programme kann man so konfigurieren, daß sie einen SOCKS-Tunnel benutzen, aber um ehrlich zu sein: Ich habe keine Lust an jedem Ort wo ich hinkomme meine Programme neu zu konfigurieren bevor ich arbeiten kann. Deswegen machte ich mich auf die Suche nach einem generellen SOCKS-Proxy für OS X.

Nach einigem Suchaufwand konnte ich Proxifier finden – ein kommerzielles Produkt welches leicht zu installieren, konfigurieren und mit nur ein paar Klicks zu benutzen ist. Außerdem gibt es auch eine Version für Windows und ich denke (getestet habe ich es nicht), diese wird ebenso gut funktionieren wie die Mac-Variante für OS X.

Die Konfiguration ist sehr einfach und benötigt die ausführliche Dokumentation auf der Homepage von Proxifier eigentlich nicht. Für dieejenigen, die gerne Dokumentationen lesen und sich somit besser fühlen: Hier ist die Anleitung für OS X zu finden: http://www.proxifier.com/mac/documentation/ProxifierHelp.html

Nachdem Proxifier gestartet und konfiguriert ist war ich direkt wieder online – unter “umgehen” der Firewall meines Kunden indem nun aller Datentransfer über den Port 80 “geroutet” wird.

ACHTUNG: Dante und SOCKS ist nicht mit einem VPN zu verwechseln (auch wenn es sich so anfühlt)! Der gesamte Datenverkehr läuft unverschlüsselt und kann mit jedem Packetsniffer im Klartext mitgelesen werden!

Komplette Webseite herunterladen (“stehlen”) unter OS X

Jeder kennt die Situation: Man hat eine geniale und äußerst hilfreiche Webseite im Internet gefunden, speichert sich ein Bookmark dafür, und wenn man die Seite braucht und sie wieder besuchen möchte ist sie nicht mehr erreichbar.

Aus diesem Grund spiegele ich mir solche Webseiten auf meinen lokalen Computer. Bisher habe ich hierzu ein Tool namens “WebDevil” benutzt (welches zwar einige Probleme hatte, aber im großen und ganzen ordentlich funktioniert hat), aber dieses scheint nun auch nicht mehr im Internet erreichbar zu sein. Aus diesem Grund habe ich mich auf die Suche nach einem neuen Programm gemacht und wurde fündig:

WebGrabber

WebGrabber ist unter der GPL (“OpenSource Freeware”) veröffentlicht und wurde von Eric Peyton und der Firma epicware Inc entwickelt. WebGrapper bringt alles an Funktionen, um eine komplette Webseite zu spiegeln, oder um sogar das gesamte Internet auf den eigenen Rechner herunter zu laden:

Jede nur denkbare Option und Einstellung kann getroffen werden: ignorieren der robots.txt (Anweisungen des Webseitenbetreibers für Spider und Grapper), überschreiben einer schon gespeicherten Version auf dem Rechner, lokalisieren von Links (um von der eigenetlichen Webseite unabhängig zu werden), einschränkung des Grappers auf eine Webseite oder sogar ein bestimmtes Verzeichnis der Webseite, Synchronisation mit einer alten gespeicherten Version, Wiederaufnahme von unterbrochenen Downloads und vieles mehr. Verzeichnis-Tiefe, Wartezeit zwischen dem Abruf einzelner Seiten, maximale Downloadbandbreite und sogar die Buffer-Größe können bestimmt werden.

Zusätzlich können noch diverse Filter für den Download definiert werden: Es kann festgelegt werden welche Art von Dateien heruntergeladen werden sollen, und welche nicht. WebGrapper ist definitiv das beste Mirroring-Tool für den Mac, welches ich bisher gesehen habe.

Download Link: http://www.epicware.com/webgrabber.html

Da die Webseite des WebGrappers einige Male für mich nicht erreichbar war und Links aus dem ReadMe nicht mehr erreichbar sind, spiegele ich den Download hier in meinem Blog, bevor die Originalseite nicht mehr erreichbat ist: webgrabber07tar

Der QuellCode des Projekts (XCode) ist im Download ebenfalls enthalten.

Get in contact:

Kategorien