Использование fsockopen для подключения к серверу - соединение отказано - PullRequest
4 голосов
/ 29 января 2012

Я пытаюсь добавить поддержку плагина Votifier на свой веб-сайт.

Я перенаправил правильные порты для сервера Minecraft, проверил и подтвердил, что они открыты.Также используется Minestatus , чтобы подтвердить, что плагин Votifier работает правильно.

Однако, когда я пытаюсь использовать сценарий PHP, который я нашел для подключения к серверу, все, что я получаю, это отказ в соединении.

<?php

error_reporting(E_ALL);

// Details of the vote.
$str = "VOTE\n" .
       "TopHCSMP\n" .
       "SlickTheNick666\n" .
       "50.98.149.40\n" .
       time()."\n";

// Fill in empty space to make the encrypted block 256 bytes.
$leftover = (256 - strlen($str)) / 2;

while ($leftover > 0) {
    $str .= "\x0";
    $leftover--;
}

// The public key, this is an example.
$key =             "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkFywgrx2fPXL/CPS1Gi5/a7zoTfWV9fqrhsJMzPqqC0CnLBBkg8VUiwnBVsMvhJrUT1mLvyHx5H9dobTVlE+aoxcsDRa1Yc9OAUKHspxrPswRW6/Yn85YAghOSBZfgPoXD3Q0Ng5jkJUoBUHOBtFHDUeAHi5av36iJ8dTQTSaOyAXKGdB88TOzre5cpnj5oDi/JSJ0bCJx7cgcBAO1TvOVuFMTXhygDyEVh6 o2nn8+qdDlEPXf+m+dxdkH3zWkkWjY4OittIpaHj2n8ihgPqwMPZFH1CXkoTjoSh4Fo7KtUAaAa4gt5w/thauozG25G    1s2XSigNgCDDvg4S8awmtewIDAQAB";
$key = wordwrap($key, 65, "\n", true);
$key = <<<EOF
-----BEGIN PUBLIC KEY-----
$key
-----END PUBLIC KEY-----
EOF;

// Encrypt the string.
openssl_public_encrypt($str, $encrypted, $key);

// Establish a connection to Votifier.
$socket = fsockopen("50.98.149.40", "8192", $errno, $errstr, 2);

if (!$socket) {
    die("Failed to connect to Votifier.");
}

// Send the contents of the encrypted block to Votifier.
fwrite($socket, $encrypted);
?>

Кажется, что Votifier разрывает соединение, возможно, из-за неправильного шифрования?

1 Ответ

0 голосов
/ 25 января 2016

Полученная вами ошибка - connection refused, это означает, что либо IP-адрес, либо порт неверен. Это должно быть подтверждено для правильности. Поскольку вы указали, что перенаправили порты, еще одна причина, по которой код не работает, может заключаться в том, что вы запускаете сценарий и сервер minecraft за одним и тем же маршрутизатором, и ваш маршрутизатор не поддерживает NAT Loopback , это не означает, что в вашем скрипте что-то не так, но в маршрутизаторе отсутствует функция.

В вашем коде больше ошибок, при расчете остатка НЕ ​​следует делить сумму на 2, вместо этого вычисляйте ее как $leftover = (256 - strlen($str));, чтобы выходной блок не превышал 256 и не ошибался в некоторых реализациях протокола Votifer, плагин Votifer по умолчанию не проверяет все ограничения протокола на своем входе.

...