Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xinetd使用PHP获取远程IP_Php_Tcp_Xinetd - Fatal编程技术网

Xinetd使用PHP获取远程IP

Xinetd使用PHP获取远程IP,php,tcp,xinetd,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 } &l

您好,我有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
}
<? php
$handle = fopen ('php :/ / stdin', 'r');
$input = fgets ($ handle);
fclose ($ handle);
$ip = $_SERVER['REMOTE_ADDR']
echo "Hello {$ input} your IP: $ip";
?>
$ip = $ _SERVER['REMOTE_ADDR']
我的文件test1.php:

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

因为我可以获得远程ip???
$remote\u ADDR
是一个环境变量,由web服务器设置为CGI协议的一部分。你直接在插座上跑步。这里没有web服务器。不设置此变量(或者实际上是注释中建议的变量)也就不足为奇了


如果您想要远程地址,您必须自己使用。

解决方案是使用以下内容修改PHP:

$IpX=$\u服务器['REMOTE\u主机]$_服务器['REMOTE_HOST']:$\u服务器['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";
?>


感谢:

我测试并发现:

Apache httpd将“远程地址”和“远程端口”以及更多其他环境传递给CGI程序

但是xinetd只将“远程\u主机”环境传递给xinetd.d/xxxx中“服务器”定义的我的程序。此外,“远程\u主机”看起来像:ffff:192.168.1.23”,而不是一个纯IP地址。(顺便问一下:这是什么意思?)


所以:xinetd+程序只能充当一个很小的httpd模块

检查
$\u服务器['HTTP\u X\u FORWARDED\u']
$\u服务器['HTTP\u CLIENT\u IP']
是对Laxus解决方案的观察。寻找有关您的解决方案的信息,因为getpeername不知道。如果我能提供有关getpeername的帮助,谢谢你,我有:
socket\u getsockname($socket,$IPX,$PORT)
但是$IPX是空的,我有错吗?我纠正的是:
socket\u getpeername($socket,$IPX,$port)但不获取远程ip。当我运行此命令时:
socket\u getpeername($socket,$IPX,$port)我收到此错误:
警告:socket\u getpeername()期望参数1为resource
socket\u geetpeername
仅适用于实际套接字。xinetd将TCP套接字绑定到PHP的stdin/stdout,因此
socket\u getpeername
只会出错。