Salut aux Mac-users,
Pour vous éviter beaucoup de tracas, je vais vous apprendre à rediriger la connexion sortant du client et destinée au serveur d'authentification vers votre machine.
J'utilise la commande ipfw pour gérer un firewall intégré à OSX. Cependant, à moins d'avoir une vieille version d'OSX, un man ipfw ne donnera rien.
Il y a deux principaux serveurs de connexion ankama, le .39 et le .40. Au début, je pensais rediriger les connexions sortantes allant vers le port 5555 vers le local puis me connecter au port 443 du serveur (attention, le port 443 n'utilise pas SSL, c'est exactement la même connexion). Or, pour utiliser ipfw et filtrer les connexions allant vers le serveur, on doit faire croire à la machine que son ip nous appartient. Et après, le serveur ne veut pas accepter de connexions de lui-même :cry:
J'ai donc dû trouver une autre solution. On oublie le port 443 et on se connecte à l'autre serveur.
Ainsi (j'utilise que le port 5555 pour ma part), je redirige les connexions allant à .39 vers localhost:portA et celles allant à .40 vers localhost:portB. J'écoute sur les deux ports (avec des sockets non bloquants), sachant que seul un va recevoir une connexion du client, et quand je la reçois, je désactive la règle qui redirige le traffic allant vers l'autre serveur.
Voici un code qui pourra vous inspirer :D (ou que vous pouvez utiliser si vous utilisez Python3) :
import os
from getpass import getpass
def redirections_on(IpDst,PtDst,PtFwd,mdp=''):
"""Redirige les connexions sortantes à destination de IpDst:PtDst vers 127.0.0.1:PtFwd"""
if not mdp:
mdp=getpass("Entrez un mot de passe Administrateur :\n")
os.popen('echo '+mdp+'| sudo -S ifconfig lo0 '+IpDst+' add').read()
flux = os.popen('echo '+mdp+'| sudo -S ipfw add fwd 127.0.0.1,'+str(PtFwd)+' tcp from me to '+IpDst+' dst-port '+str(PtDst))
print('Tous les paquets à destination de '+IpDst+':'+str(PtDst)+' sont redirigés à présent vers 127.0.0.1:'+str(PtFwd)+'.')
return flux.read()[:-1]
def redirections_off(IpDst,redrule,mdp=''):
if not mdp:
mdp=getpass("Entrez un mot de passe Administrateur :\n")
os.popen('echo '+mdp+'| sudo -S ifconfig lo0 '+IpDst+' remove').read()
print("L'alias avec "+IpDst+" est maintenant supprimé.")
os.popen('echo '+mdp+'| sudo -S ipfw delete '+redrule).read()
print("La règle ipfw a été supprimée.")
La première fonction renvoie la règle du firewall sous la forme d'une chaîne de caractères (en fait, c'est la sortie du terminal). La seconde l'utilise (redrule) pour supprimer cette règle.
Si jamais vous n'avez pas pu (à cause d'un bug ou de n'importe quoi d'autre) annuler les redirections, voici le code de nettoyage :
from getpass import getpass
import os
def clean():
mdp=getpass("Entrez un mot de passe Administrateur :\n")
os.system('echo '+mdp+'| sudo -S ipfw flush')
for ip in {39,40}:
os.system('echo '+mdp+'| sudo -S ifconfig lo0 213.248.126.'+str(ip)+' remove &> /dev/null')
if __name__== "__main__":
clean()
Il supprime toutes les règles du firewall (même les autres) (mais ce n'est pas grave car ce n'est pas le même firewall que celui de l'interface graphique), ainsi que les éventuels alias vers les ips des serveurs Ankama (rien ne vous empêche de remplacer {39,40} par d'autres ips, mais ce n'est pas utile, sauf si vous êtes sur un serveur de beta ou le serveur japonais).
Bonne chance à tous ! ;)