2012-03-31 11 views
1

私はISPの問題に遭遇しましたが、fsockopenはセキュリティ上のリスクがあると言いますが、私はperlを使用することを提案しています。fsockopenと同等のperl

誰でもfsockopenの代わりに以下のスクリプトにperlを使用する可能性がありますか?

<?php 

// fetches server information from minequery. 
function fetch_server_info($ip, $port){ 
    $socket = fsockopen($ip, $port, $errno, $errstr, 0.5); 

    if($socket === false){ 
     return false; 
    } 

    fwrite($socket, "QUERY_JSON\n"); 

    $responce = stream_get_contents($socket); 

    return json_decode($responce, true); 
} 

?> 
+2

IO ::ソケットは、私はへのソケットを開くことが一つの方法からの切り替え方法を見ていない:

<?php // fetches server information from minequery. function fetch_server_info($ip, $port){ $script = <<<'EOF' use warnings; use strict; use IO::Socket; die if $#ARGV+1 != 2; my $ip = $ARGV[0]; my $port = $ARGV[1]; my $sock = IO::Socket::INET->new(PeerAddr => "$ip:$port") or die; print $sock "QUERY_JSON\n" or die; local $/ = undef; print <$sock>; EOF; $responce = shell_exec("echo '$script' | perl - $ip $port"); if ($responce == NULL) return false; return json_decode($responce, true); } $> 

それとも、彼らはそれを持っている場合は、のnetcatを使用することができます。ここではPerlを使用した例です別のものが「セキュリティリスク」を助けるでしょう。 – Mat

+0

彼らは、彼らが何を話しているのか、あるいはあなたに既存のサーバー構成のB.Sの理由を伝えることを知らない。 –

+3

これについてもっと考えてみると、彼らのホスティングインフラストラクチャでソケットアクセスをブロックするように管理者が設定していると思います。おそらく、彼らは顧客ホスティングDMZを適切に分離していないからです。ソケットに設定可能な制限のない別の言語(Perl)を使用することは、ほとんどの場合、これらの条件を克服するのに慣れていたスタッフの助言を得ています。 –

答えて

1

あなたがPHPでソケット関数のいずれかを使用せずに$responceに、サーバからの応答を取得したいように聞こえます。ホスティングプロバイダによってshell_exec()が有効になっている場合は、外部プログラムを実行して代わりにこれを実行できます。

<?php 

// fetches server information from minequery. 
function fetch_server_info($ip, $port){ 
    $responce = shell_exec("echo QUERY_JSON| nc $ip $port"); 

    if ($responce == NULL) 
     return false; 

    return json_decode($responce, true); 
} 

$> 
+0

あなたの答えをありがとう、私はそれを試して、それは完璧に働いた –