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.