Remote access
Bonjour,

Aujourd'hui j'ai découvert les fonctionnalités du Remote Access.
Après quelques essais laborieux j'ai réussi à créer diverses fonctions plus ou moins intéressantes.
Mon objectif était d'administrer le plus possible mon serveur via une interface d'administration du site.
J'ai donc la possibilité de consulter et de répondre aux requêtes, d'envoyer des mail et d'effectuer des annonces. Le tout via mon site.

Mon seul bémol, c'est que tout ça ne fonctionne qu'en local.
Une fois uploader sur mon dédié (qui possède le même core, le même fichier mangosd.conf, la même base de données ...) la page charge indéfiniment, bloquant même le site.
La console MaNGOS me connecte bien avec l'utilisateur définit dans mon script, pas d'erreurs à cet endroit.
Ca coince lorsqu'il essaye d'effectuer la commande demandée et referme ainsi la connexion.

Voila le script en question :

[code=php]
<?php
// Lancement des sessions
session_start();
error_reporting(0);

// Si l'utilisateur ne s'est pas authentifié correctement, on le redirige vers la page d'authentification
if ($_SESSION['uid'] == 0)
{
if($_SESSION['gmlevel'] < 1)
{
header("Location: ../authentification.php");
}
}
$username = $_SESSION['username'];

$fsk = @fsockopen("127.0.0.1",3443);
fread($fsk,64);

fwrite($fsk,"root\n");
fread($fsk,64);

fwrite($fsk,"rootpass\n");
fread($fsk,64);

switch($_GET['action'])
{
case "envoyer_courrier" :
$username = $_POST['nom_personnage'];
$titre = $_POST['titre'];
$texte = $_POST['message'];
try
{
fwrite($fsk,"send mail '{$username}' '{$titre}' '{$texte}'\n");
fread($fsk,1024);

fwrite($fsk,"quit\n");
fread($fsk,1024);
header("Location: ./envoyer_courrier.php");
}
catch (Exception $e)
{
echo 'Exécution de la commande échouée. Raison :<br />\n' . $e->getMessage();
}
}
?>
[/code]

Qu'est-ce qui peut être à l'origine d'un non fonctionnement de ce script sur mon dédié ?
Merci d'avance.
Hum bizarre quand même ! Est-ce que mangos fourni une API SOAP ? Car le remote acces en socket comme ça.. c'est pas ce qu'il y a de mieux !

Essaye d'enlever le @ dans le fsockopen et vois l'erreur.

Sinon c’est étrange d'ouvrir ton socket sans lui balancer de packet de type AUTH_PACKET pour lui dire "Ok j'ouvre une connexion mais je m'authentifie avant."

je sais que Trinity prévois une communication avec SOAP qui est super facile ! Tu peux balancer les commandes du jeu via une classe qui gère tout et tu recupere le resultat.
genre $trinity->execute("ticket list");
$trinit->getResult(); // et tu traite le resultat
(13-06-2011 13:48)Elmsroth a écrit :  Hum bizarre quand même ! Est-ce que mangos fourni une API SOAP ? Car le remote acces en socket comme ça.. c'est pas ce qu'il y a de mieux !

Essaye d'enlever le @ dans le fsockopen et vois l'erreur.

Sinon c’est étrange d'ouvrir ton socket sans lui balancer de packet de type AUTH_PACKET pour lui dire "Ok j'ouvre une connexion mais je m'authentifie avant."

je sais que Trinity prévois une communication avec SOAP qui est super facile ! Tu peux balancer les commandes du jeu via une classe qui gère tout et tu recupere le resultat.
genre $trinity->execute("ticket list");
$trinit->getResult(); // et tu traite le resultat

J'ai la même erreur même sans le "@" dans le fsockopen.
A savoir :


[Image: ra.png]

Alors qu'en local, pour la même demande, j'obtiens ça :

[Image: raOK.png]

J'avais également ce code sous la main :
[code=php]
<?php

$config['user'] = 'root';
$config['pass'] = 'rootpass';
$config['host'] = '127.0.0.1';
$config['port'] = 7878;

$client = new SoapClient(NULL,
array(
'location' => 'http://' . $config['host'] . ':' . $config['port'] . '/',
'uri' => 'urn:MaNGOS',
'style' => SOAP_RPC,
'login' => $config['user'],
'password' => $config['pass']
)
);

function executeMangosCommand($client, $command)
{
try
{
$result = $client->executeCommand(new SoapParam($command, "command"));
echo 'Commande exécutée avec succès. Retour commande : <br />\n' . $result;
}
catch (Exception $e)
{
echo 'Exécution de la commande échouée. Raison :<br />\n' . $e->getMessage();
}
}

executeMangosCommand($client, 'server info');

?>
[/code]
Mais il ne fonctionnait pas du tout, c'est pourquoi je suis partit sur l'autre.
Erreur : Fatal error: Class 'SoapClient' not found
SI il ne fonctionne pas c’est qu'il n'est pas initialisé lors du démarrage du serveur... regarde du côté de ton fichier conf ... tu devrais avoir un truc du genre SOapCLient.Enabled = 0 ou 1 Clin
Ca ne peut pas venir du fichier mangosd.conf (Après vérification c'était activé à 1) puisqu'il arrive bien à établir une connexion :
[Image: ra.png]

Il a l'air de bloquer quand il s'agit d'effectuer la ligne :
[code=php]
try
{
fwrite($fsk,"send mail '{$username}' '{$titre}' '{$texte}'\n");
fread($fsk,1024);

fwrite($fsk,"quit\n");
fread($fsk,1024);
header("Location: ./envoyer_courrier.php");
}
[/code]
Il referme la socket alors qu'en local il ne la referme pas et continue (envoyer le message dans le cas présent.)
Pourquoi il dit :
Starting Remote Access listner on port 3443 on 0.0.0.0
??
Tu devrais pas remplacer l'IP par la tienne ou celle du serveur ?

[edit]
Citation :SOAP.Enabled = 0
SOAP.IP = 127.0.0.1
SOAP.Port = 7878
Vérifie que le port qu'il utilise est ouvert ? vérifie que tu as mis SOAP.IP = 0.0.0.0 et pas 127.0.0.1 ;-)
Cordialement ,
(13-06-2011 15:25)Hipili a écrit :  Pourquoi il dit :
Starting Remote Access listner on port 3443 on 0.0.0.0
??
Tu devrais pas remplacer l'IP par la tienne ou celle du serveur ?

[edit]
Citation :SOAP.Enabled = 0
SOAP.IP = 127.0.0.1
SOAP.Port = 7878
Vérifie que le port qu'il utilise est ouvert ? vérifie que tu as mis SOAP.IP = 0.0.0.0 et pas 127.0.0.1 ;-)
Cordialement ,

Ra et Soap sont deux services indépendants si je ne me trompe pas. Ca ne sert pas à grand chose d'activer les deux.
Quoiqu'il en soit, j'ai testé les deux configurations, aucun changements.
A mon avis le port est correctement ouvert car il arrive à m'authentifier.
Il n'utilse pas SOAP ici donc ces lignes ne serviront à rien ! il utilise R.A. Console.
[ https://github.com/mangos/mangos/blob/ma...nf.dist.in ]
(regarde la ligne 1589 - 1595 )
tu peux nous envoyer les lignes correspondantes que tu as du modifié dans ton mangosd.conf ;-)

Cordialement ,
Voila les lignes demandées.
Citation :Console.Enable = 1
Ra.Enable = 1
Ra.IP = 0.0.0.0
Ra.Port = 3443
Ra.MinLevel = 3
Ra.Secure = 1
Ra.Stricted = 0

Je rappelle juste que j'utilise la même config qu'en local et que celle ci fonctionne.
Édition :
En actualisant sans cesse un script plus simple (uniquement là pour des tests), certaines requêtes finissent quand même par passer.
Qu'est-ce qui peut bloquer la commande à s'effectuer et pourquoi certaines arrivent à passer parfois ?

[code=php]
<?php
$fsk = @fsockopen("127.0.0.1",3443);
fread($fsk,64);

fwrite($fsk,"REMOTE\n"); //your username/adminname
fread($fsk,64);

fwrite($fsk,"remote\n"); // Your user/admins's password
fread($fsk,64);

fwrite($fsk,"send mail 'Taglina' 'Essai' 'C'est un message de test'\n"); // Commande à executer
fread($fsk,1024);

fwrite($fsk,"quit\n");
fread($fsk,1024);
?>[/code]
Le code en question, si quelqu'un pouvait tester chez lui, changez simplement Taglina par votre personnage et les users/pass.


Merci d'avance à ceux planchant sur le problème.

Retourner en haut Accueil