Specify Remote IP Address of Clients Connected to PHP CLI Socket Server

clients, php, sockets

Solution

Immediately after the line where you successfully call `socket_accept()`, put a call to `socket_getpeername()`:

if (($client[$i]['sock'] = socket_accept($sock)) < 0) {
    rLog("socket_accept() failed: ".socket_strerror($client[$i]['sock']));
} else {
    rLog("Client #".$i." connected");
    socket_getpeername($client[$i]['sock'], $address, $port);
}

`$address` now contains the remote host's IP address, and `$port` contains the remote port. Do with that information as you will.

Problem

I have php cli socket server with the code below; clients connect and send requests ``` <?php // PHP SOCKET SERVER error_reporting(E_ERROR); // Configuration variables $host = "127.0.0.1"; $port = 5600; $max = 500; $client = array(); // No timeouts, flush content immediatly set_time_limit(0); ob_implicit_flush(); // Server functions function rLog($msg){ $msg = "[".date('Y-m-d H:i:s')."] ".$msg; echo($msg."\n"); } // Create socket $sock = socket_create(AF_INET,SOCK_STREAM,0) or die("[".date('Y-m-d H:i:s')."] Could not create socket\n"); // Bind to socket socket_bind($sock,$host,$port) or die("[".date('Y-m-d H:i:s')."] Could not bind to socket\n"); // Start listening socket_listen($sock) or die("[".date('Y-m-d H:i:s')."] Could not set up socket listener\n"); rLog("Server started at ".$host.":".$port); // Server loop while(true){ socket_set_block($sock); // Setup clients listen socket for reading $read[0] = $sock; for($i = 0;$i<$max;$i++){ if($client[$i]['sock'] != null) $read[$i+1] = $client[$i]['sock']; } // Set up a blocking call to socket_select() $ready = socket_select($read,$write = NULL, $except = NULL, $tv_sec = NULL); // If a new connection is being made add it to the clients array if(in_array($sock,$read)){ for($i = 0;$i<$max;$i++){ if($client[$i]['sock']==null){ if(($client[$i]['sock'] = socket_accept($sock))<0){ rLog("socket_accept() failed: ".socket_strerror($client[$i]['sock'])); }else{ rLog("Client #".$i." connected"); } break; }elseif($i == $max - 1){ rLog("Too many clients"); } } if(--$ready <= 0) continue; } for($i=0;$i<$max;$i++){ if(in_array($client[$i]['sock'],$read)){ $input = socket_read($client[$i]['sock'],1024); if($input){ rLog("Client ".$i." Call:".$input.")"); ## <<<<<<<<<<< Clients Request Show Here >>>>>>>>>>>> ## ## <<<<<<<<<<< Clients Request Show Here >>>>>>>>>>>> ## ## <<<<<<<<<<< Clients Request Show Here >>>>>>>>>>>> ## ## <<<<<<<<<<< Clients Request Show Here >>>>>>>>>>>> ## ## <<<<<<<<<<< Clients Request Show Here >>>>>>>>>>>> ## } } } } // Close the master sockets socket_close($sock); ?> ``` Question: - How can I detect the IP Address of clients connected to my php cli socket server ?

Original source