Xinetd使用PHP获取远程IP


Xinetd obtain remote IP with PHP

你好,我有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

$REMOTE_ADDR是一个环境变量,由web服务器设置,作为CGI协议的一部分。你在插座上跑得很直。这里没有web服务器。这个变量(或者拉克萨斯在评论中建议的变量)没有设置也就不足为奇了。

如果你想要远程地址,你必须使用getpeername自己获取。

解决方案是用修改PHP

$IpX=$_SERVER['REMOTE_HOST']$_SERVER['mote_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

我测试发现:

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

但是xinetd只将"REMOTE_HOST"环境传递给我在xinetd.d/xxxx中由"服务器"定义的程序此外,"REMOTE_HOST"看起来像":ffff:1192.168.1.23",而不是一个纯IP地址。(BTW:这意味着什么?)

因此:xinetd+程序只能充当一个小的httpd moudle