Xinetd使用PHP获取远程IP

时间:2012-07-12 23:20:14

标签: php tcp xinetd

您好我有xinetd的这项服务:

service MyService 
{
port = 8881
socket_type = stream
wait = no
user = nobody
server = /usr/local/bin/php
server_args = /home/file/public_html/php/port/test1.php
log_on_success + = USERID
log_on_failure + = USERID
disable = no
}

我的文件test1.php:

<? php
$handle = fopen ('php :/ / stdin', 'r');
$input = fgets ($ handle);
fclose ($ handle);
$ip = $_SERVER['REMOTE_ADDR']
echo "Hello {$ input} your IP: $ip";
?>

我无法获得远程IP:

$ip = $ _SERVER['REMOTE_ADDR']

因为我可以获得远程ip ??

3 个答案:

答案 0 :(得分:1)

解决方案是使用以下命令修改PHP:

$ IpX = $ _SERVER ['REMOTE_HOST']? $ _SERVER ['REMOTE_HOST']:$ _SERVER ['HOST'];

<? php
$IpX = $_SERVER['REMOTE_HOST'] ? $_SERVER['REMOTE_HOST'] : $_SERVER['HOST'];
$handle = fopen ('php :/ / stdin', 'r');
$input = fgets ($ handle);
fclose ($ handle);
echo "Hello {$ input} your IP: $IpX";
?>

感谢:Gonzalo Ayuzo

答案 1 :(得分:1)

我测试并发现:

Apache httpd将“ REMOTE_ADDR ”和“ REMOTE_PORT ”以及更多其他环境传递给CGI程序。

但是xinetd只将“ REMOTE_HOST ”环境传递给我在xinetd.d / xxxx中由“server”定义的程序。而且,“REMOTE_HOST”看起来像“:: ffff:192.168.1.23” ,而不是纯粹的IP地址。(顺便说一句:这是什么意思?)

所以:xinetd +程序只能扮演一个微小的httpd模块

答案 2 :(得分:0)

$REMOTE_ADDR是一个环境变量,由Web服务器设置为CGI协议的一部分。你是直接在套接字上运行的。这里没有Web服务器。毫不奇怪,这个变量(或者确实是评论中Laxus建议的变量)没有设置。

如果您需要远程地址,则必须使用getpeername自行获取。