{"id":1008,"date":"2011-03-04T16:53:21","date_gmt":"2011-03-04T15:53:21","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=1008"},"modified":"2011-03-04T17:05:00","modified_gmt":"2011-03-04T16:05:00","slug":"mirc-6-mit-ipv6","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=1008","title":{"rendered":"mIRC 6 mit IPv6"},"content":{"rendered":"<p>ein relativ guter, wenn auch teilweise bereits in die Jahre gekommener IRC-Client f\u00fcr Windows ist mIRC in der Version 6. Dieser tut selbst auf etwas \u00e4lteren Systemen noch genau das, was er soll: Funktionieren. Da ich jedoch so langsam aber sicher versuche, \u00fcberall wo m\u00f6glich auf IPv6 umzustellen, war die Frage, wie man mIRC dazu bewegt bekommt, mit dem neuen Protokoll zu arbeiten.<!--more--><\/p>\n<p>Ein einfaches <\/p>\n<pre lang=\"mirc\">\/server irc.ipv6.freenode.net<\/pre>\n<p>an dieser Stelle w\u00e4re nat\u00fcrlich VIEL zu einfach gewesen, aber wenn immer es ein Problem gibt, kann man sich auf das Interweb verlassen, denn da hat jemand <a href=\"http:\/\/users.skynet.be\/jaguar\/mircv6.html\">schon was vorbereitet<\/a>. mircv6 ist im wesentlichen eine kleine Hook-Library, die man als Plugin in mIRC beim Start des Programms via<\/p>\n<pre lang=\"mirc\">\/dll mircv6.dll mircv6 0<\/pre>\n<p>l\u00e4d.<\/p>\n<p>Nur leider wollte diese Bibliothek unter Windows 2000 nicht so richtig, denn trotz dem es f\u00fcr Windows 2000 ein <a href=\"http:\/\/www.microsoft.com\/presspass\/press\/2000\/Mar00\/IPv6PR.mspx\">IPv6 Tech Preview<\/a> gibt, mit dem zahlreiche Anwendungen wie Pale Moon und PuTTY, sowie viele weitere bereits fehlerfrei laufen, hat Microsoft die Chance zum Hinzuf\u00fcgen der <a href=\"http:\/\/support.microsoft.com\/kb\/955045\">getaddrinfo-Funktion zur ws2_32.dll<\/a> verstreichen lassen und diese stattdessen in der wship6.dll implementiert. Ben\u00f6tigt man diese Funktion in seinem Programm, muss man eine Reihe zus\u00e4tzlicher Header beim \u00dcbersetzen der Anwendung einbinden, da man sonst gegen die falsche DLL (ws2_32.dll statt wship6.dll) linkt.<\/p>\n<p>Nun w\u00e4re dies kein Problem, da <a href=\"http:\/\/www.c-plusplus.de\/forum\/p593774#593774\">die Microsoft-Header dies bereits vorsehen<\/a>:<\/p>\n<pre lang=\"c\" escaped=\"true\">\r\n\/\/\r\n\/\/ Unless the build environment is explicitly targeting only\r\n\/\/ platforms that include built-in getaddrinfo() support, include\r\n\/\/ the backwards-compatibility version of the relevant APIs.\r\n\/\/\r\n#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < = 0x0500)\r\n#include &lt;wspiapi.h&gt;\r\n#endif\r\n<\/pre>\n<p>Nur leider habe ich 3 verschiedene Build-Systeme konsultieren m\u00fcssen, bevor ich eine Version der wspiapi.h gefunden habe, die auch nur ann\u00e4hernd 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 \u00fcber Google's Code Search, wo sich dann in irgendeinem Ada-Compiler auch die <a href=\"http:\/\/www.koders.com\/c\/fid275FEAF57FA3E640A9425FB3A46D988E1F72B61D.aspx\">passende Datei versteckte<\/a>.<\/p>\n<p>Nach dem damit alle ben\u00f6tigten 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\u00e4gstrichen vor den richtigen Zeilen war auch dem schnell abgeholfen. Blieb also noch die DLL zu testen.<\/p>\n<p>Da ich gerade im IRC aktiv war und daher meine laufende mIRC-Instanz nicht crashen wollte (okay, immerhin w\u00e4re 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\u00e4tigungen 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:<\/p>\n<pre>\r\nmircv6 by davy hollevoet\r\n-\r\n[16:03] * Connecting to irc.ipv6.freenode.net (6667)\r\n-\r\n[16:03] -leguin.freenode.net- *** Looking up your hostname...\r\n-\r\n[16:03] -leguin.freenode.net- *** Checking Ident\r\n-\r\n[16:03] -leguin.freenode.net- *** Couldn't look up your hostname\r\n-\r\n<strong>* Identd request from 0.0.0.0<\/strong>\r\n* Identd replied: 2471, 6667 : USERID : UNIX : BenBE\r\n-\r\n[16:03] -leguin.freenode.net- *** Got Ident response\r\n-\r\nWelcome to the freenode Internet Relay Chat Network BenBE\r\n<strong>Your host is leguin.freenode.net[2001:6b0:e:2018::172\/6667], running version ircd-seven-1.0.3<\/strong>\r\nThis server was created Wed Feb 24 2010 at 00:01:47 CET\r\nleguin.freenode.net ircd-seven-1.0.3 DOQRSZaghilopswz CFILMPQbcefgijklmnopqrstvz bkloveqjfI\r\nCHANTYPES=# 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\r\nSAFELIST ELIST=U CASEMAPPING=rfc1459 CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 ETRACE CPRIVMSG CNOTICE DEAF=D MONITOR=100 are supported by this server\r\nFNC 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\r\n-\r\nThere are 408 users and 65165 invisible on 25 servers\r\n29 IRC Operators online\r\n9 unknown connection(s)\r\n36799 channels formed\r\nI have 2957 clients and 1 servers\r\n-\r\nCurrent local  users: 2957  Max: 8055\r\nCurrent global users: 65573  Max: 74012\r\n-\r\nHighest connection count: 8056 (8055 clients) (980105 connections received)\r\n-\r\nMessage of the Day, leguin.freenode.net\r\n-\r\nEnd of \/MOTD command.\r\n<\/pre>\n<p>IPv6 mit mIRC auf Windows 2000: Fuck Yeah!<\/p>\n<p>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\u00fcnde dazu, wie dieser Patch intern arbeitet, finden sich auf der Website des <a href=\"http:\/\/users.skynet.be\/jaguar\/art\/mircv6art\/\">Entwicklers Davy Hollevoet<\/a>.<\/p>\n<p>Wer sich die Arbeit ersparen m\u00f6chte, sich die beiden ben\u00f6tigten DLLs per Hand zu \u00fcbersetzen, findet hier mein <a href='http:\/\/blog.benny-baumann.de\/wp-content\/uploads\/mIRCv6_Win2K.zip'>mIRCv6-Build f\u00fcr Windows 2000<\/a> (<a href='http:\/\/blog.benny-baumann.de\/wp-content\/uploads\/mIRCv6_Win2K.zip.asc'>asc<\/a>) als Download. <\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=1008&amp;md5=0e0ebb2745db0e58bccd5b21ece8dfa3\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>ein relativ guter, wenn auch teilweise bereits in die Jahre gekommener IRC-Client f\u00fcr Windows ist mIRC in der Version 6. Dieser tut selbst auf etwas \u00e4lteren Systemen noch genau das, was er soll: Funktionieren. Da ich jedoch so langsam aber sicher versuche, \u00fcberall wo m\u00f6glich auf IPv6 umzustellen, war die Frage, wie man mIRC dazu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[29],"tags":[14,98,69,162,7,13,77],"class_list":["post-1008","post","type-post","status-publish","format-standard","hentry","category-software","tag-bugs","tag-developement","tag-internet","tag-ipv6","tag-links","tag-patch","tag-release"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1008"}],"version-history":[{"count":2,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1008\/revisions"}],"predecessor-version":[{"id":1012,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1008\/revisions\/1012"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}