avatar_Молдованен

Помощь: Подключение SOCKET

Автор Молдованен, 2015 Фев. 16, 20:00

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlineсерверные файлы MUпомощьphpjoinserversocket

Молдованен

Здравствуйте, столкнулся с проблемой, пытаюсь сделать модуль Диссконнекта зависшего чера в игре, использую скрипт

Спойлер
<?PHP
// Disconnect Script
// Original Script by Sanbird
// Modification by Vaflan for MyMuWeb
// Version 1.0

if($_GET[op]!='user') {echo "$die_start Access Denied! $die_end";}

if($mmw[joinserver_ip] == NULL) {
$mmw[joinserver_ip] = '127.0.0.1';
}

$stat_reslut = mssql_query("select connectstat from MEMB_STAT where memb___id='$login'");
$stat_row = mssql_fetch_row($stat_reslut);
if($stat_row[0] == 1) {$status = mmw_lang_online;}
else {$status = mmw_lang_offline;}

if($_SESSION[set_lang] == 'Russian') {
$dc_text = "Если вы хотите отсоединить пользователя, нажмите:";
$dc_serv_off = "Невозможно присоединится к серверу. Наверно он выключен";
$dc_query_done = "Ваш пользователь отсоединён!";
}
else {
$dc_text = "If you want to disconnect an account, press:";
$dc_serv_off = "Can't connect to server. Maybe server is offline";
$dc_query_done = "Your Account is Disconnected!";
}

if(isset($_POST['disconnect'])) {
///////////////////////////////////////////////////////////////////////////
// Script to Disconnect a User from the Joinserver and                  //
// remove also the account entry from the database.                      //
// 100% Solution to the "User is already connected" problem.            //
// Made by: Sandbird                                                    //
// Thanks to : Savoy, Deathway and Darkfuture for their help            //
///////////////////////////////////////////////////////////////////////////
function ascii2hex($ascii) {
$hex = '';
for ($i = 0; $i < strlen($ascii); $i++) {
$byte = strtoupper(dechex(ord($ascii{$i})));
$byte = str_repeat('0', 2 - strlen($byte)).$byte;
$hex.=$byte." ";
}
$hex=str_replace(" ", "", $hex);
return $hex;
}
function hex2ascii($hex) {
$ascii='';
$hex=str_replace(" ", "", $hex);
for($i=0; $i<strlen($hex); $i=$i+2) {
$ascii.=chr(hexdec(substr($hex, $i, 2)));
}
return $ascii;
}
function dc_user($host, $port, $user) {
$mystring = "C11405";                    // Header packet. I used a packet sniffer to get this packet.It could be different for every gameserver.
$mystring .= ascii2hex($user);                // Insert into the packet the username after you convert it to hex first.
$zeros = strlen($mystring);
for ($i;$i<=39-$zeros;$i++) {
$mystring .="0";                        // The packets must be 40 bits long so we fill the rest of the packet with zeros.
}
$packet = hex2ascii($mystring);                // Convert the whole string to ascii
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if(!$x = @socket_connect($socket, $host, $port)) {        // attempt to connect
$result = false;
}
else {
socket_write($socket, $packet, strlen($packet));    // Send the dc packet
socket_close($socket);                    // Close connection
$result = true;
}
}

// Run the function dc_user(ip,port,user): Connect to port 55970 (Joinserver port) and dc the user. Where $user=username

if(dc_user($mmw[joinserver_ip],$mmw[joinserver_port],$login)) {echo $die_start . $dc_query_done . $die_end . $rowbr;}
else {echo $die_start . $dc_serv_off . $die_end . $rowbr;}
}
?>

<center>
<?echo mmw_lang_account . " $login $status";?><br><?echo $dc_text;?>
<form method="post" name="disconnect" action="">
<input type="hidden" name="disconnect" value="yes"><input value="Disconnect!" type="submit">
</form>
</center>
[свернуть]

Кикает ТОЛЬКО с JoinServer , так вот Узнал я пакет который ГС отправляет жоин серверу вставил зашол на сайт жму
Disconnect и выходит ошибка "Can't connect to server. Maybe server is offline" хотя порт жоин сервера открыт и айпи правельный,
в логах жоин сервера выводит :
[10:38:06] [Server Engine] Connect : Index : 8 - IP : 127.0.0.1 - ServerType : 2
[10:38:06] Connection Closed, dwIoSize == 0 (Index:8)


Всё разобрался нетот пакет вписал , выводит "Can't connect to server. Maybe server is offline" но с JoinServera кикал .

Вопрос номер 2 к знаюшим ,  как ДеКодировать пакеты получаемые ГСом от клиента?

Simp1e

#1
для работы с пакетами https://www.sendspace.com/file/46zznz

для отлова пакетов IPTools или WpePro

Молдованен

#2
Simp1e спасибо большое , ловлю пакеты на клиентской стороне , так как пробывал входящие на сервеной стороне но увы при переотправки их к ГСу игрока не диссконнектит ,так вот на клиентской стороне нашолся 1 пакетик выгледит примерно так "С3 0D F8 B1 51 8C CF EB 00 86 11 97 AE" при переотправки его к серверу (пользуюсь ВПЕ ПРО)  игрока диссконнектит (5 4 3 2 1),  НО можно ето проделать только 1-3 раэа потом пакет основательно меняется, все кроме "С3 0D" , при том что чар стоит в томже месте что и первый раз , тотже уровень,кароче все параметры теже, как узнать что отправляет Маин к Серверу и почему пакет меняется ?

Пробовал твой EncDec всунул туда пакет  декодировка успешна "C3 05 F1 02 00" ASCII информации нету
предпологать что там бессмысленно...
Я всё правельно делаю ? Или на стороне ГСа надо копать? Клиент сразу ГСу пакет диссконнекта отправляет ?

Похожие темы (5)