2012-01-28 242 views
4

我想要做的是在我的网站上添加对Votifier插件的支持。使用fsockopen连接到服务器 - 连接被拒绝

我已经转发了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正在断开连接,可能是因为加密不正确?

+0

如果您使用的是共享主机,则可能会阻止出站端口8142。例如,GoDaddy共享主机只能在443和80上使用fsockopen。 – Drakes 2016-07-20 12:33:38

回答

0

您得到的错误是connection refused,这表示IP地址或端口不正确。这些需要被证实是正确的。由于您声明您已转发端口,因此代码无法正常工作的另一个原因可能是您正在同一路由器后面运行脚本和minecraft服务器,并且您的路由器不支持NAT Loopback,这并不表示存在你的脚本有问题,但你的路由器缺少一个功能。

你的代码中有更多的错误,当计算剩余的时候,你不应该把数量除以2,而应该计算为$leftover = (256 - strlen($str));,以防止输出块小于256,并且窃听Votifer协议的一些实现,默认Votifer插件不会检查其输入的所有协议限制。

相关问题