You would use -inetd option when running Xvnc from xinetd. 
Say you have configured the xinetd process to listen for connections on
behalf of Xvnc on port xxxx. 
As soon as a request arrives on the configured port xxxx, xinetd forks
off Xvnc and maps the stdin, 
stdout and stderr to the socket descriptor.

What it means is now on if you do a printf() the string would be
directed to the client(vncviewer)
and not stdout. Since stdout is mapped to the socket descriptor and
this stage.

Hence if you want the client IP, all you would do is the following.. 

char* get_viewer_ipaddress()
{
        struct sockaddr_in s;
        char *client_ip = NULL;
        int len, ret_val;

        if(client_ip == NULL)
        {
                memset(&s,0,sizeof(s));
                len = sizeof(s);
                s.sin_family = AF_INET;

                /*
                 * when launched from inetd, stdin, stdout and stderr
                 * are mapped to sd. Hence passing 0 to getpeername
                 */
                ret_val = getpeername(0, (struct sockaddr *)&s, &len);
                if(!ret_val)
                {
                        client_ip = (char *)inet_ntoa(s.sin_addr);
                        DEV_LOG("Inf: retrieved client IP address %s\n",
client_ip);
                }
                else
                {
                        client_ip = NULL;
                        DEV_LOG("Err: could not retrieve client IP
address\n");
                }
        }

        return client_ip;
}

let me know if that helps.. 

-Jinu



>>> "Tim Underwood" <[EMAIL PROTECTED]> 01/21/06 1:58 AM >>>
How can I determine a client's IP address, when they connect to a
server
running Xvnc with the -inetd option?

Can't use $DISPLAY, since it's the server's address, and I don't find
anything identifiable that can be used to get back to the client. 
Can't
even find anything via the process chain to get from a running
application back to the Xvnc process (xterm's run within the VNC
client
eventually show their parent as "init" or process id 1, never going
back
to the Xvnc process I know is the one I started).

I need to do this for some customized settings for terminals attaching
to our server (printers, etc.), and identifying them for other
purposes.

Any ideas?
_______________________________________________
VNC-List mailing list
[email protected] 
To remove yourself from the list visit:
http://www.realvnc.com/mailman/listinfo/vnc-list
_______________________________________________
VNC-List mailing list
[email protected]
To remove yourself from the list visit:
http://www.realvnc.com/mailman/listinfo/vnc-list

Reply via email to