$_SERVER['REMOTE_ADDR'] vs craft()->request->userHostAddress
Between the two, I'd say that craft()-&gt;request-&gt;userHostAddress is going to be a more reliable method.   It tries to take into account things like clients going though proxy servers, shared ISP IP addresses, etc. whereas you don't know any of that just relying on $_SERVER['REMOTE_ADDR'].

But, as you pointed out, none of this is guaranteed to be reliable.