Xinetd получает удаленный IP с 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?

3 ответа

Решение

Решение заключается в модификации 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";
?>

Спасибо: Гонсало Аюдзо

Я проверил и обнаружил, что:

Apache httpd передает " REMOTE_ADDR " и " REMOTE_PORT " и многие другие среды в программу CGI.

Но xinetd передает только среду " REMOTE_HOST " в мою программу, определенную "server" в xinetd.d/xxxx 。 и более , "REMOTE_HOST" выглядит как "::ffff:192.168.1.23", а не чистый IP-адрес.(BTW: что это значит?)

Итак: программа xinetd + может действовать только в крошечном httpd moudle

$REMOTE_ADDR переменная окружения, которая устанавливается веб-сервером как часть протокола CGI Ты бежишь прямо в розетку. Здесь нет веб-сервера. Неудивительно, что эта переменная (или даже те, что предложены Federkun в комментарии) не установлены.

Если вам нужен удаленный адрес, вам придется получить его самостоятельно, используя getpeername.

Другие вопросы по тегам