BenBE's humble thoughts Thoughts the world doesn't need yet …

04.03.2011

mIRC 6 mit IPv6

Filed under: Software — Schlagwörter: , , , , , , — BenBE @ 16:53:21

ein relativ guter, wenn auch teilweise bereits in die Jahre gekommener IRC-Client für Windows ist mIRC in der Version 6. Dieser tut selbst auf etwas älteren Systemen noch genau das, was er soll: Funktionieren. Da ich jedoch so langsam aber sicher versuche, überall wo möglich auf IPv6 umzustellen, war die Frage, wie man mIRC dazu bewegt bekommt, mit dem neuen Protokoll zu arbeiten.

Ein einfaches

/server irc.ipv6.freenode.net

an dieser Stelle wäre natürlich VIEL zu einfach gewesen, aber wenn immer es ein Problem gibt, kann man sich auf das Interweb verlassen, denn da hat jemand schon was vorbereitet. mircv6 ist im wesentlichen eine kleine Hook-Library, die man als Plugin in mIRC beim Start des Programms via

/dll mircv6.dll mircv6 0

läd.

Nur leider wollte diese Bibliothek unter Windows 2000 nicht so richtig, denn trotz dem es für Windows 2000 ein IPv6 Tech Preview gibt, mit dem zahlreiche Anwendungen wie Pale Moon und PuTTY, sowie viele weitere bereits fehlerfrei laufen, hat Microsoft die Chance zum Hinzufügen der getaddrinfo-Funktion zur ws2_32.dll verstreichen lassen und diese stattdessen in der wship6.dll implementiert. Benötigt man diese Funktion in seinem Programm, muss man eine Reihe zusätzlicher Header beim Übersetzen der Anwendung einbinden, da man sonst gegen die falsche DLL (ws2_32.dll statt wship6.dll) linkt.

Nun wäre dies kein Problem, da die Microsoft-Header dies bereits vorsehen:

//
// Unless the build environment is explicitly targeting only
// platforms that include built-in getaddrinfo() support, include
// the backwards-compatibility version of the relevant APIs.
//
#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < = 0x0500)
#include <wspiapi.h>
#endif

Nur leider habe ich 3 verschiedene Build-Systeme konsultieren müssen, bevor ich eine Version der wspiapi.h gefunden habe, die auch nur annähernd dem entsprach, was Microsoft in den W32-API-Headern einmal als den Inhalt dieser Header-Datei vorgesehen hat. Entnervt ging es dann also an's Copy & Paste der Header über Google's Code Search, wo sich dann in irgendeinem Ada-Compiler auch die passende Datei versteckte.

Nach dem damit alle benötigten Header zusammenwaren, blieb nun noch die ws2tcpip.h der Build-Umgebung zu patchen, da diese trotz BC-Headern immer noch versuchte, statisch gegen die getaddrinfo-Funktion von XP zu linken. Aber mit zwei Schrägstrichen vor den richtigen Zeilen war auch dem schnell abgeholfen. Blieb also noch die DLL zu testen.

Da ich gerade im IRC aktiv war und daher meine laufende mIRC-Instanz nicht crashen wollte (okay, immerhin wäre das ein Fortschritt gewesen), habe ich kurz OllyDbg gestartet, mIRC dort als neuen Prozess gestartet und Breakpoints auf's Laden neuer DLLs. Nach einer Reihe von F9-Betätigungen tauchte dann auch das Problemkind mv6functions.dll in mIRC auf - allerdings im Programmeverzeichnis, statt dem System32-Verzeichnis wie ich nach 3 erfolglosen Versuchen feststellte. Also die aktuelle DLL vom System32-Verzeichnis ins Programme-Verzeichnis gelegt und siehe da:

mircv6 by davy hollevoet
-
[16:03] * Connecting to irc.ipv6.freenode.net (6667)
-
[16:03] -leguin.freenode.net- *** Looking up your hostname...
-
[16:03] -leguin.freenode.net- *** Checking Ident
-
[16:03] -leguin.freenode.net- *** Couldn't look up your hostname
-
* Identd request from 0.0.0.0
* Identd replied: 2471, 6667 : USERID : UNIX : BenBE
-
[16:03] -leguin.freenode.net- *** Got Ident response
-
Welcome to the freenode Internet Relay Chat Network BenBE
Your host is leguin.freenode.net[2001:6b0:e:2018::172/6667], running version ircd-seven-1.0.3
This server was created Wed Feb 24 2010 at 00:01:47 CET
leguin.freenode.net ircd-seven-1.0.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI
CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQcgimnprstz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode KNOCK STATUSMSG=@+ CALLERID=g are supported by this server
SAFELIST ELIST=U CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 are supported by this server
FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,arx WHOX CLIENTVER=3.0 are supported by this server
-
There are 408 users and 65165 invisible on 25 servers
29 IRC Operators online
9 unknown connection(s)
36799 channels formed
I have 2957 clients and 1 servers
-
Current local  users: 2957  Max: 8055
Current global users: 65573  Max: 74012
-
Highest connection count: 8056 (8055 clients) (980105 connections received)
-
Message of the Day, leguin.freenode.net
-
End of /MOTD command.

IPv6 mit mIRC auf Windows 2000: Fuck Yeah!

Ach ja: Wer sich wundert, warum IDENTD-Requests von 0.0.0.0 kommen? mIRC sieht durch diese DLL keine externen IPs von IDENTD-Sockets mehr. Weitere Hintergründe dazu, wie dieser Patch intern arbeitet, finden sich auf der Website des Entwicklers Davy Hollevoet.

Wer sich die Arbeit ersparen möchte, sich die beiden benötigten DLLs per Hand zu übersetzen, findet hier mein mIRCv6-Build für Windows 2000 (asc) als Download.

Flattr this!

Keine Kommentare »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress