Sunday, July 24, 2011

Anleitung abgeschnitte Faxe mit der Fritz Box verhindern


Seit kurzem habe ich zum ersten Mal die Fax Funktion meiner Fritz Box 7170 ausprobiert. Doch leider kommen die Faxe immer nur zerstückelt an, siehe Bild.

Nach einiger Internetrecherche[1] habe ich im Freetz Webinterface 40MB Swap Space eingestellt. Die Swappiness[2] habe ich auf dem Standardwert 60 belassen. Scheinbar wird der Swap Space auch nur während der Konvertierung des empfangenen Faxes genutzt und 40MB reichen auf jeden Fall für einen ordentlichen Faxempfang aus! Kann ich nur empfehlen, falls ihr das gleiche Problem habt.


Im normalen Betrieb bleibt der SWAP ungenutzt:



[1] http://www.ip-phone-forum.de/showthread.php?t=217730
[2] http://juliusbeckmann.de/blog/linux-speichermanagement-tunen-swappiness.html

Sunday, July 17, 2011

Cross Site Scripting wird in Browsern vertuscht

Cross Site Scripting ist eine unschöne Sache. Dabei übernimmt der Server ohne weitergehende Prüfung eingaben des Benutzers.

Formularfelder werden vielfach per Javascript geprüft. Das ist nicht sicher! Man kann zum Beispiel GET Parameter direkt in der URL Leiste manipulieren.

Moderne Browser machen hier leider einen Strich durch die Rechnung indem URLs automatisch URL-encoded werden.

Beispiel Chrome:
Sichtbar ist in der URL Bar folgendes:
example.com/?param=<script>alert(document.cookie)</script>
Tatsächlich verwendet wird aber:
http://example.com/?param=%3Cscript%3Ealert(document.cookie)%3C/alert%3E
Hier wurde ein URL Encoding vorgenommen. Problematisch, weil mit URL-Encoding häufig kein Ausnutzen des Cross Site Scripting möglich ist. Es sieht aus, als ob die Web Anwendung sicher ist. Durch einen Intercepting Proxy ist ein Ausnutzen aber immer noch möglich!

Ähnlich wird in Internet Explorerer 8 und Firefox 3 and 4 vorgegangen. Allerdings wird hier der URL encoded String im Browser angezeigt, zumindest ein Hinweis für die Web Entwickler.

Wichtig ist es für einen WEB Entwickler, die Anzeige in der URL Leiste gegenzuchecken mit Firefox Plugins wie Tamper Data oder der Network Leiste in Google Chrome. Nur so kann effektiv auf Cross Site scripting überprüft werden. Im Zweifel sollte ein intercepting Proxy, zum beispiel Burp, herangezogen werden. Der kann dann auch POST Parameter modifizieren und ist frei von jeglichen Jacascript Checks.


Links:
- OWASP: Cross Site Scripting
- Burp intercepting Proxy

Thursday, April 14, 2011

SOAP Requests as HTTP Requests in Neoload vs. Loadrunner

Last month I started using Neoload as a load testing tool. It allows for a very easy learning curve so that the skill "load testing" can be more easily acquired.

Comparison
HP Loadrunner
Neotys Neoload
(+) fully scriptable
(+) advanced reports
(-) only simple expressions
(-) hard to learn
(-) long time needed to record
(+) simple, intuitive interface
(+) very good regular expressions
(+) most correlations automatic
(+) inexpensive
(-) Limited report export functionality

SOAP with Neoload


Both those products can be acquired with many different protocols or monitors. Neoload offers a very easy SOAP Protocol functionality where it reads out the descriptive WSDL file and offers the services for building the xml file.

However I did not have that SOAP protocol available. That means it is only not available for checking a replaying the Vuser. It is always available for recording.

For checking out the functionality in Neoload I decided to encapsulate a SOAP request in the HTTP protocolg. A SOAP request can be a simple http post request.


Usually http post request body data is comprised of key=value?key=value pairs. The Neoload HTTP protocol is designed to work exactly with this pattern and offers name and value pairs. It is possible to enter Text only in the name column. This is good for the XML SOAP request.


Yet it is possible to enter free text there and variables. If no value is present, the equal sign can be omitted by deselecting the checkbox for "put equals" in the advanced settings.


The http header can also be changed in the advanced settings of the neoload request. A special SoapAction header is necessary in the request header.

After that I added a simple variable extractor to extract the variable result.


Monday, January 31, 2011

Realtek RTL8187B USB Wireless and Mac OS X 10.6 Snow Leopard Howto



While Mac OS tries to look simple it still fails miserably at some 3rd party hardware support. For example a DIGITUS DN-7003GT USB Wireless dongle I got recently. Auto detection: fail.

The Digitus homepage promises Mac support. But no driver to download. Most Usb devices just re-use a specific wireless chipset. The driver for that chipset will work on every dongle, no matter which branding it uses. The DIGITUS branding contains just a RTL8187B chipset.

HOWTO get R8187 running


1. Download driver

http://218.210.127.131/downloads/downloadsView.aspx?Langid=1&PNid=24&PFid=1&Level=6&Conn=5&DownTypeID=3&GetDown=false&Downloads=true

Chipset: RTL 8187B, choose the OSX 10.5 one, even if you have OS X 10.6.
2. Install using the install command

Probably Mac OS X will say, that the driver is incompatible, but just install it for now.

3. Edit the driver

Now the driver needs to be changed for two reasons:

a) make it compatible to Mac OSX 10.6

edit the last few lines in /System/Library/Extensions/RTL8187Bl.kext/Contents/Info.plist
search for com.apple.kpi and replace update the version numbers to 8.1.0, so that you get:
<key>com.apple.kpi.bsd</key>
<string>8.1.0</string>
<key>com.apple.kpi.iokit<k/ey>
<string>8.1.0</string>
<key>com.apple.kpi.libkern</key>
<string>8.1.0</string>
<key>com.apple.kpi.mach</key>
<string>8.1.0</string>


b) make it compatible to the specific Digitus USB wireless dongle

Use "About this Mac"->"More Information" to find your USB Device ID.

Google helps to convert it to decimal:

Vendor ID 0x0bda in decimal is 3034
Device ID 0x8189 in decimal is 33161

However in the Info.plist I only have a different device ID. But I am able to locate the Vendor ID:
<key>idProduct</key>
<integer>33161</integer>
<key>idVendor</key>
<integer>3034</integer>
The Product ID just needs to be changed to match the actual product ID of the specific USB dongle.

4. Fix permissions of the kernel extension

With Mac OS X, permissions of kernel Extensions are very important! You can even go to Disk Utility and let it repair all disk permissions.

chown -R root:wheel RTL8187Bl.kext
chmod -R 755 RTL8187Bl.kext

5. Enable the kext in Mac OS X

Mac OS X keeps a cache of all kext, so we need to publish the newly compatible driver there:

rm /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext
kextcache -v 1 -a i386 -a x86_64 -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions

Make sure the device does not get listed as unsuccessful during the kextcache enabling!

6. Load the driver

Now just plug in your USB dongle to see if it is detected correctly. For debugging purposes, we can load the driver manually:


kextload -t RTL8187Bl.kext

Dmesg should now have the message:

RTL8187B: Ethernet address xx:xx:xx:xx:xx:xx

You can only use it with the Realtek USB WLAN Client Utility. Really uncomfortable. Is there any dongle out there that works on Mac without a utility?

Tuesday, January 25, 2011

Installation Treiber von Windows XP CD unter Windows Vista

Heute ging es daran ein antikes Schmuckstück, EPSON LQ-550 an einem inzwischen auch schon veralteten Windows Vista Computer anzuschliessen. Vista bietet den Druckertreiber unverständlicherweise von Haus aus nicht mehr an. Treiber zum Download gibt es nur für Windows 98. Es gibt auch mit dem omniprint Projekt einen CUPS Linux Treiber - vielleicht etwas für die nächste Migration auf Linux! Allerdings gibt es mit etwas Googlen die Information, dass der Drucker von Windows XP unterstützt wird. Plan: XP Treiber für Vista recyclen

Wo sind die alten Treiber auf der Windows XP CD?

Die Treiber von Windows XP kommen in einer Datei D:\WINXP\I386\driver.cab. Driver.cab enthält dann den konkreten Treiber ep24res.dll und die GPD-Beschreibungsdatei EP550.GPD. Allerdings können diese beiden nur durch eine inf-Datei installiert werden. Zum Glück muss man diese nicht selbst erstellen, sondern Windows XP bringt die schon im Verzeichnis D:\WINXP\I386 selbst mit.

Wie werden diese unter Windows Vista verwendet?

Im Drukermenü kann ein neuer Drucker hinzugefügt werden und dort muss dann ein eigener Pfad der Treiberdaten angegeben werden. Dieser Pfad ist D:\WINXP\I386. Danach bietet Vista die komplette Treiberliste von Windows XP an. Hier kann man direkt das richtige Modell auswählen.

Und voila - der alte Nadeldrucker verrichtet auch selbst unter Windows Vista tadellos seine Dienste.

Monday, January 10, 2011

OpenVPN zwischen iPhone und FritzBox

Wieso OpenVPN?
Nachteile des AVM VPNs mit IPSeC:
- das iPhone verlangt immer ein Passwort
- es wird nicht der gesamte Verkehr übers VPN geleitet

PPTP geht mit Freetz und der FritzBox Beta Labor nicht, weil AVM dort keine Kernel Quellcodes bereitstellt. Bei OpenVPN geht alles auch mit der Labor Version, wenn es auch etwas Aufwand verlangt.

Setup von OpenVPN auf dem iPhone
Ich bin nach einer Anleitung für OpenVPN und Freetz [1] und einer Anleitung für OpenVPN und das iPhone [2] und [3] vorgegangen. Dort fehlt allerdings ein für mich wichtiger Punkt:

Den gesamten Traffic durch den Tunnel leiten
Die Weiterleitung des gesamten Traffics ist unter Mac OSX und iOS nicht so gehandhabt, wie auf anderen Unixen. Die Routen lassen sich mit "netstat -r" anzeigen und mit dem OSX-eigenen Tool "scutil" umsetzen.

Zur Weiterleitung des gesamten Updates wird das Attribut "OverridePrimary" verwendet, siehe Beispielscript unter [4]. Dazu habe ich in der Datei aus dem Guide oben den Eintrag für "update-resolv-conf" gesucht und dort zwischen die anderen d.add Befehle "d.add OverridePrimary # 1" eingefügt. Damit wird der gesamte Traffic über das VPN geleitet.

Fazit, Vergleich OpenVPN und andere
Bei mir hat das soweit funktioniert, ich hatte aber doch bei Sprachgesprächen einen Hall, was vielleicht an der latenzträchtigen UDP-Kapselung von OpenVPN liegt. Nach meinem Gefühl ist es bei PPTP nicht so hörbar. Also forsche ich weiter nach der perfekten iSIP iPhone FritzBox VPN Telefonie Lösung.

[1] http://freetz.org/wiki/packages/openvpn
[2] http://dokuwiki.knallimall.org/iphone:openvpn
[3] http://chandraonline.net/blog/?p=22
[4] http://www.bsdforen.de/showthread.php?p=212991

Wednesday, December 22, 2010

Warten auf Standard-Ausgabe in Bash oder offene Pfeife

Das Problem

Nach Aufruf eines Dämons (hier sleep) kehrt die Bash nicht gleich zurück sondern wartet.
$  time ( sleep 3 &)|cat; ps

real    0m3.005s
user    0m0.000s
sys     0m0.004s
  PID TTY          TIME CMD
 7644 pts/0    00:00:00 bash
14552 pts/0    00:00:00 ps

Erklärung

Das "sleep" Kommando in der Subshell "( )" soll in den Hintergrund gehen "&". Danach soll die Ausgabe des symbolischen "sleep"-Dämons mit einem symbolischen "cat" verarbeitet werden. Die Zeitmessung "time" dauert statt der erwarteten 0.0x volle 3 Sekunden und "sleep" ist nach dem Aufruf nicht in der Prozessliste sichtbar.

Analyse

Das passiert nur, wenn die Ausgabe über eine Pfeife "|" geleitet wird. "cat" muss auf alle Eingaben warten, bevor es sich selbst schließt.

Workaround

$ time ( sleep 3 &)>/dev/null|cat; ps

real    0m0.003s
user    0m0.000s
sys     0m0.004s
  PID TTY          TIME CMD
 7644 pts/0    00:00:00 bash
17449 pts/0    00:00:00 sleep
17450 pts/0    00:00:00 ps
Hier wird die Standardausgabe auf /dev/null umgelenkt. Damit muss "cat" nicht mehr auf die Ausgabe warten. Ein definiertes Logging kann auch in eine Datei erfolgen, falls man die Ausgabe behalten möchte:
$ ( sleep 3 &)>/var/log/meindaemon.log|cat

Empfehlung

Ein "richtiger" Dämon sollte immer selbst Standardaus- und Eingaben abkoppeln um nicht noch gekoppelte Prozesse in der aufrufenden Shell aufzuhalten.

Tools zum Debuggen

  • lsof -p (PID) Offene Dateien eines Programmes auflisten
  • pfiles (PID) Schöner offene Dateien eines Programmes auflisten
  • fuser (Datei) Herausfinden, von welcher PID eine Datei geöffnet wird