Die Portnummern-Kopfnuss

By dose | September 30, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Alles begann damit, dass Genosse Chefprogrammierer zu mir kam furchtbar schimpfend über unsere RPC-Library.
Als ich ihn fragte, was denn los sei, meinte er, dass bei einem unserer Kunden immer wieder die Portverbindung abreißt und der dortige Techniker von uns als Beweis, dass es nicht an unserer Software liegt, tcpdumps der Sessions wollte.
Faktisch kann es nicht an unserer SW liegen, weil wenn alle User gleichzeitig disconnectet werden, jedem User aber eine eigene Logon-Session mit eigener Socketverbindung zugeordnet ist, dann wäre das schon ein sehr merkwürdiger Zufall. Aber nachdem das Problem angeblich seit Versionseinspielung auftritt, sollten wir also den Beweis antreten.
Der Genosse hatte versucht, mithilfe von tethereal die Datenströme je nach Ports zu filtern. Da kam aber nix. Gar nix. Nicht mal wenn man eine Verbindugn machte auf den Port. Kein SYN-Paket, einfach nix.
Also habe ich gemeint, man könnte es ja mal mit tcpdump probieren. Selbes Resultat: Kein Mucks.
Das kam mir jetzt schon etwas spanisch vor.
Unsere Applikation startet über xinetd einen Hostextender (der rennt über stdio und wird über xinetd mittels tream eben durchgepiped). Der Hostextender läuft auf einem in /etc/services eingetragenen Port, der Port wird daher zu einem Namen aufgelöst.
Nun lag die Vermutung nahe, dass es sich viell. um ein xinetd-Problem handeln könnte (wenngleich tcpdump ja im promicious mode eigentlich alles mitkriegen sollte, was da so abläuft). Andere xinetd-Dienste belauscht, da funktionierte es problemlos.
Die nächste Strategie war, einmal mit iptrafnachzusehen, wo denn nun der Traffic läuft, wenn man etwas im Terminalemulator tut. Da sah man, dass die Verbindung auf Port 3464 lief.
Suchte man im netstat nach dem Port, so fand man keine Verbindung gelistet. Gespenstisch. Und immer wenn man auf Port 3464 verband, erhielt man auch die freundliche Login-Hilfe des Hostextenders.
Wir habe ndann mal verifiziert, ob auf anderen Rechner auch auf diesem Port der Hostextender läuft. War überall dort anzutreffen. Mit tcpdump auf 3464 konnte man auchdie Datenströme dumpen.
Nun war das Problem zwar eigenltihc gelöst, aber etwas mulmig war uns doch bei der Sache. woher kommt diese wundersame Portnummer, die wir noch nie gesehen haben. Laut /etc/services irgendein edm-mgr-sync. Merkwürdig.
Nach längerem Suchen und grübeln sah ich mir nochmals die Portnummer an: 69000.
Da fiel es mir wie Schuppen von den Augen, was neulich der neue Kollege aus der Technik bereits bei meiner Erklärung unseres Terminalemulator-Systems eingewandt hatte: Gibt’s net nur 65535 Ports?

Daran hatte bis jetzt niemand gedacht, weil wenn man das auf einen short castet kommt immer der richtige Wert raus. tcpdump und Konsorten haben aber scheinbar keine Bereichsüberprüfung und fressen alles 1:1, sie arbeiten ja im promicious mode und sich nicht gezwungen, das socket-Struct zu befüllen, welches als Datentyp short vorgibt.

# tcpdump port 9999999094835023480523749807529304870592374895273405273489057029345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

funktioniert also genauso. Autsch!

Zwischen PuTTY Fenstern mittels Hotkey wie unter Unix wechseln

By dose | June 16, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Wie ja schon in meinem Dualhead-Beitrag erwähnt, arbeite ich mit 2 Schirmen im Büro.. Links das Windows-Zeugs, rechts das Terminal auf Vollbild.
Das klappt soweit ganz gut, allerdings habe ich natürlich immer mind. 5 Terminals gleichzeitig offen, zwischen denen ich immer wieder hin- und herschalten muss. Das ist mühsam mit ALT+TAB, um immer das richtige Terminal zu suchen. Es wäre daher wünschenswert, dass man – wie unter Unix üblich – mittels ALT-F1 bis ALT-F10 zwischen den einzelnene offenen Konsolen herumwechseln kann.
Genau das habe ich mit einem kleinen Programm nun realisiert:
Es legt sich auf die Tastenkombinationen STRG + ALT + F[1..12] und öffnet das jeweilige PuttY-Fenster in der Reihenfolge, wie die Fenster geöffnet wurden.
Ich öffne also alle benötigten PuTTY-Fenster, gib sie am rechten Schirm auf Vollbild (in den Optionen unter Window/Behaviour auf [x] Full screen on ALT+Enter und dann am rechten Schirm ALT+ENTER).
Sobald mein Utility im Hintergrund läuft, kann ich nun mit den oben genannten Tastenkombinationen auf den Terminals hin- und herschalten.

Sourcecode gibts hier
Das fertige Kompilat als Mini-EXE (3k) gibts hier

Combobox mit Autocomplete

By dose | May 20, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Um einer comobox Autocomplete-Funktionalität zu verleihen, muss man diese wie gewohnt Subclassen.
Allerdings ist zu beachten, dass man nicht in jedem Fall Autocomplete darf. Drückt der User z.B. Backspace oder ENTF, so darf die Routine dafür nicht anspringen, sonst könnte er ja nichts mehr löschen.
Um dies zu erreichen, muss auch das zur Combobox zugehörige Edit-Control gesubclassed werden.
Möchte man die Combobox während der Eingabe aufgeklappt lassen, so ist zu beachten, dass das Auf- und zuklappen mittels PostMessage() gesteuert werdenm uss, andernfalls befindet sich das Control in einem inkonsistenten Status, welcher glaubt, dass die linke Maustsate gedrückt ist und somit den Eingabefokus der Maus “stiehlt”.
Ein kleines Beispiel C-Modul gibts hier

Dualhead: Fenster nur auf erstem Schirm (Desktop) minimieren

By dose | March 28, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Im Büro habe ich ja wie erwähnt einen neuen Rechner bekommen. Das Schöne ist: Er kann dualhead, das beduetet, ich kann 2 Monitore anschließen und habe daher einen erweiterten Desktop.
Sehr nett zum Entwickeln: Rechts auf Vollbild das Terminal, links die Windowsprogramme und unseren Terminalemulator. Dh: Testen links, entwickeln rechts.
Sehr praktisch ansich. Nur habe ich leider dummerweise die Angewohnheit, die Programme zum Testen immer über die Desktop-Icons aufzurufen und alte schlechte Gewohnheiten wird man schwer los wie es scheint.
Daher hat mich folgendes Windows-Verhalten sehr genervt:
Wenn man auf “Desktop anzeigen” klickt oder WIN+M oder WIN+D drückt, werden die Fenster auf allen Schirmen minimiert. Um hier Abhilfe zu schaffen habe ich mir daher ein kleines C-Programm geschrieben welches nur die Fenster am primary display (Desktop) minimiert:

Sourcecode gibts hier.
Das fertige Kompilat als Mini-Exe (3k) gibts hier.

Viell. kanns ja noch wer brauchen. Die .exe einfach irgendwo hinkopieren und dann in der Taskbar verknüpfen. Bei Ausführung werden alle Fenster am primary Display minimiert.

ALTGR – Tastenkombinationen (z.B. Backslash) mit Remotedesktopverbindung

By dose | March 25, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Ich habe dieser Tage einen neuen Bürorechner bekommen und habe mir diesem mit Windows XP eingerichtet. Ich benutze den Rechner auch, um via Remotedesktopverbindung (RDP) auf meinen Rechner zuhause zuzugreifen. Mit dem alten Rechner hat dies wunderbar geklappt, mit dem neuen jedoch hatte ich Probleme bei Tastenkombinationen, welche mit ALT GR arbeiteten (z.B. Backspace eingeben). Das Ganze funktionierte mit Glück manchmal, meistens jedoch nicht. Im Internet wurde dazu geraten, statt ALT GR die Tastenkombination CRTL+ALT zu benutzen, damit funktioniert es. Das ist für mich aber keine befriedigende Lösung, da man beim Eintippen immer “umdenken” muss, was den Arbeitsfluss ziemlich stört.

Nach einiger Rercherche im Internet bin ich schließlich auf folgenden Newsgroup-Eintrag gestoßen, welcher eine befriedigende Lösung für das Problem aufzeigt:
Remote-Desktop und Systemtasten (Alt, Alt-Gr, Shift) + Lösungen
Um es kurz zusammenzufassen:
Man muss am lokalen Rechner (der,w elcher die RDP aufbaut) folgende einstellungen unter Systemsteuerung -> Regions- und Sprachoptionen ->
Registerkarte Sprachen -> Button Details tätigen:

1. Unter “Installierte Dienste” muss der Tastaturtreiber “Englisch
(USA)” / US installiert sein
2. Auf der Registerseite “Erweitert” muss unbedingt die Option “Alle
erweiterten Textdienste deaktivieren” deaktiviert sein (also eine
doppelte Verneinung -> die erweiterten Textdienste funktionieren)

Wen so wie mich das Weechseln des Layouts bei mehreren installierten Layouts mittels iener Tastenkombination stört (weil sich das Ganze ständig umschaltet), der kann noch unter dem Buton “Tastatur..” die Tastenkombination zum Wechsel des Eingabegebitssschemas abstellen.
Seitdem funktioniert mein Backspace wieder mit RDP.

RAMDISK.SYS unter Windows XP

By dose | March 10, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Microsoft bietet als als Beispieltreiber eine kleine ramdisk an (RAMDISK.SYS). Dort steht geschrieben, dass man für windows XP den Treiber neu kompilieren muss, falls man ihn auf einem System einsetzen will, wo keine FAT-Laufwerker installiert sind (Sonst komtm beim Aufruf des Laufwerks: Unzulässiger Funktionsaufruf).
Dies ist aber nicht unbedingt notwendig. Man kann auch einfach den FastFat-Treiber aktivieren.
Hierzu in der Registry unter: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Fastfat\ den Wert Start von 4 auf 1 ändern. damit wird der Treiber beim Systemstart gestartet und folglich funktioniert auch RAMDISK.SYS

Konvertieren von RTF in TXT files mittels WIN32-API

By dose | February 5, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Heute hatte ich im Büro die Aufgabenstellung, eine RTF-Datei in PLaintext zu konvertieren.
Für solche Aufgabenstellungen gibt es natürlich unzählige Libraries im Internet, aber mittels des
RichEdit-Controls funktioniert es auch direkt über Windows.
Das Prinzip ist einfach:
Ein verstecktes Richedit-Control als Fenster anlegen, RTF-Daten hineinladen, TXT-Daten herausschreiben, fertig.
Ich habe mir eine kleine Funktion hierfür gebastelt. Wen’s interessiert, es gibt sie hier.

MySQL 5 Mit Visual Studio 6 kompilieren

By dose | January 6, 2008
Under: technical stuff, Uncategorized
Comments: No Comments »

Nachdem Visual Studio 6 das letzte brauchbare VS ist, erscheint es naheliegent, MySQL auch mit diesem zu kompilieren, damit man nicht extra nur für diesne Zweck VS7 oder höher installieren muss.
Mit ein paar Modifikationen des MySQL-Sourcecodes ist es möglich, MySQL mit nmake unter VS6 zu kompilieren:

MySQL 5 mit Visual Studio 6 kompilieren

Erstellen kann man die nmake Makefiles nach setzen des VC-Environments (VCVARS.BAT) mit:

cmake.exe" . -G "NMake Makefiles"

DELL Vostro 200 mit Debian aufsetzen

By dose | December 3, 2007
Under: technical stuff, Uncategorized
Comments: No Comments »

Der DELL Vostro 200 ist ein billiger PC ohne jegliche Ausstattung. Er ist dermaßen erbärmlich, dass er nicht einmal PS/2 Ports besitzt, weswegen auch eine USB-Tastatur mitgeliefert wird. Er eignet sich also wunderbar als dummer Server für diverse nicht sehr anspruchsvolle Aufgaben. Möchte man ihm ein ein Debian Linux Betriebssystem verpassen, stößt man leider auf einige Probleme:

  • Mit dem 2.4er Installationskernel wird der SATA-Controller nicht erkannt
  • Mit dem Standard 2.6er Installationskernel spinnt die USB-Tastatur
  • Mit keinem Kernel wird die Ethernet-Karte (Intel E1000) richtig erkannt
  • Es erfordert daher etwas Handarbeit, den PC aufsetzen zu können.
    Als erstes muss man die richtige InstallationsCD besorgen. Hier bietet sich die Debian testing Netinstall-CD an, welche einen aktuellen 2.6.22er Kernel enthält:
    http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/i386/iso-cd/debian-testing-i386-netinst.iso
    Startet man mit dieser Install-CD den Kernel jedoch normal, so gibt es Probleme mit unbehandelten IRQs. Man muss die Installation daher mit dem Parameter irqpoll starten.
    Am CD-Bootprompt:
    install irqpoll
    Nachdem die Installation einmal gestartet hat, kommt die nächste Ernüchterung: Die Netzwerkkarte wird nicht erkannt. Zu neu, wies scheint. Man benötigt also die aktuellen Treiber von Intel und muss diese für den Kernel kompilieren. Nachdem das Module Object Format der einzelnen Kernels untereinander nicht kompatibel zu sein scheint, braucht man entweder eine korrekt vorkompilierte Version für den eignesetzen Kernel 2.6.22-3 oder man muss es so wie ich machen: Temporär andere NIC rein (RTL8139D), damit installieren und das Kernelmodul nachtäglich builden, dann die neue NIC wieder raus.
    Damit einem dieses Ärgernis erspart bleibt, habe ich mal das von mir kompilierte Modul online gestellt, in der Hoffnung, dass man dann beim Setup nur noch das Modul von Diskette laden und mit insmod in den Kernel installieren muss (ALT+F2 für Konsole, ENTER, mountfloppy, insmod /floppy/e1000.ko, ALT+F1 zurück zur Installation).
    Das von mir vorkompilierte Kernel-Modul gibt’s hier.
    Nach dem Neustart muss man den irqpoll Boot-Parameter wieder entfernen, scheinbar macht der nur beim CD-Booten Probleme:
    vi /boot/grub/menu.lst
    Um nun den aktuellen e1000 Treiber zu kompilieren und in den Kernel zu installieren sind folgende Schritte notwendig:


    apt-get install linux-headers-2.6.22-3-all make
    wget http://downloadmirror.intel.com/9180/eng/e1000-7.6.12.tar.gz
    tar -xzvf e1000-7.6.12.tar.gz
    cd e1000-7.6.12/src
    make
    #Sichern:
    cp /lib/modules/2.6.22-3-686/kernel/drivers/net/e1000/e1000.ko ~
    install -D -m 644 e1000.ko /lib/modules/2.6.22-3-686/kernel/drivers/net/e1000/e1000.ko
    modprobe e1000
    #Nachsehen, ob alles passt:
    dmesg | tail
    #Wenn alles OK:
    echo e1000 >>/etc/modules

    Damit sollte der Schrotthaufen dann hoffentlich endlich laufen.

    T-Mobile Internet (web’n’walk) mit externer IP

    By dose | September 23, 2007
    Under: technical stuff, Uncategorized
    Comments: No Comments »

    Web’n’walk von T-Mobile ist ansich ein praktischer mobiler Internetzugang.
    Die Standardinstallation hat nur leider einen “Schönheitsfehler”:
    Wählt man sich ins Internet ein, so bekommt man eine interne Klasse A-Adresse (10.x.x.x) zugeteilt anstatt einer externen IP. Alle VErbindungen auf die externe IP werden außerdem nicht durchgeschleift, sodass man praktisch vollständig gefirewalled ist.
    Das ist natürlich äußerst unpraktisch denn z.B. für Remoteadministration usw. ist eine externe IP doch recht praktisch.
    Glücklicherweise ist das Problem relativ einfach zu umgehen, indem man einfach den APN wechselt.
    Dies mann man entweder im web’n’walk Manager Tool bewerkstelligen, indem man einfach ein neues Profil anlegt und dort den APN von gprsinternet auf business.gprsinternet umstellt.

    Verwendet man eine DFÜ-Verbindung dafür (die einfach *99# am GPRS-Modem wählt), so muss man stattdessen die Modemeinstellungen ändern. Hierbei gibt man als zusätzlichen Init-String für das Modem an: +cgdconf=1,,"business.gprsinternet".
    Damit wird dann der richtige APN gewählt und fortan ist man endlich auch über seine externe IP erreichbar.