comet icon indicating copy to clipboard operation
comet copied to clipboard

How to get the client's IP

Open seggyn opened this issue 5 years ago • 4 comments

I tried to add RKA\Middleware\IpAddress and get the client's IP, but it doesn't work. $_SERVER['REMOTE_ADDR'] also doesn't work. How to fix this?

seggyn avatar Aug 26 '20 18:08 seggyn

Comet always stays in memory and do not work nor changes GLOBALS and SERVER arrays from request to request. So you should use some workaround like this Workerman method to get real IP:

https://github.com/walkor/workerman-manual/blob/master/english/src/worker-development/get-remote-ip.md

Thanks for great question, we should implement more straightforward way to get that info.

gotzmann avatar Sep 29 '20 23:09 gotzmann

    // Main Loop
    $worker->onMessage = static function($connection, WorkermanRequest $request)
    {
        try {
            $_SERVER['REMOTE_ADDR'] = $connection->getRemoteIp();

Add please. $connection object is not available in $app container.

unixhostpro avatar Dec 05 '20 15:12 unixhostpro

As of latest Comet v1.1.2 you can get the client's IP address from REMOTE_ADDR attribute of ServerParams:

$params = $request->getServerParams(); $remote_ip = $params['REMOTE_ADDR'];

gotzmann avatar Jan 28 '21 16:01 gotzmann

Привет!

У меня тоже проблема получить IP адрес юзера $request->getServerParams(); возвращает другой набор переменных.

array ( 'SHELL' => '/bin/bash', 'PWD' => '/home/u_dev/app', 'LOGNAME' => 'u_dev', 'XDG_SESSION_TYPE' => 'tty', 'MOTD_SHOWN' => 'pam', 'HOME' => '/home/u_dev', 'LANG' => 'en_US.UTF-8', 'LS_COLORS' => 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'SSH_CONNECTION' => '80.100.180.120 1029 50.190.10.100 22', 'LESSCLOSE' => '/usr/bin/lesspipe %s %s', 'XDG_SESSION_CLASS' => 'user', 'TERM' => 'xterm-256color', 'LESSOPEN' => '| /usr/bin/lesspipe %s', 'USER' => 'u_dev-demort', 'SHLVL' => '1', 'XDG_SESSION_ID' => '1669574', 'XDG_RUNTIME_DIR' => '/run/user/1001', 'SSH_CLIENT' => '80.100.180.120 1029 22', 'PATH' => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'DBUS_SESSION_BUS_ADDRESS' => 'unix:path=/run/user/1001/bus', 'SSH_TTY' => '/dev/pts/1', 'OLDPWD' => '/home/u_dev, '_' => '/usr/bin/php', 'PHP_SELF' => 'app.php', 'SCRIPT_NAME' => 'app.php', 'SCRIPT_FILENAME' => 'app.php', 'PATH_TRANSLATED' => 'app.php', 'DOCUMENT_ROOT' => '', 'REQUEST_TIME_FLOAT' => 1636104784.513857, 'REQUEST_TIME' => 1636104784, 'argv' => array ( 0 => 'app.php', 1 => 'start', ), 'argc' => 2, )

SSH_CLIENT - В принципе отдает IP но не чистый на край конечно его можно использовать но меня смутило что в твоем примере есть даже переменная REMOTE_ADDR Работает через Nginx по документации сделал

`http {

upstream app {
    server http://path.to.your.app:port;
}

server {
    listen 80;
     location / {
        proxy_pass         http://app;
        proxy_redirect     off;
    }
}

}`

ghost avatar Nov 05 '21 09:11 ghost