*/
public function addReceivedHeader()
{
+ $have_netdns = @include_once 'Net/DNS.php';
+ if ($have_netdns) {
+ $resolver = new Net_DNS_Resolver();
+ $resolver->retry = isset($GLOBALS['conf']['dns']['retry']) ? $GLOBALS['conf']['dns']['retry'] : 1;
+ $resolver->retrans = isset($GLOBALS['conf']['dns']['retrans']) ? $GLOBALS['conf']['dns']['retrans'] : 1;
+ }
+
$old_error = error_reporting(0);
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
/* This indicates the user is connecting through a proxy. */
$remote_path = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$remote_addr = $remote_path[0];
- $remote = gethostbyaddr($remote_addr);
+ if ($have_netdns) {
+ $response = $resolver->query($remote_addr, 'PTR');
+ $remote = $response ? $response->answer[0]->ptrdname : $host;
+ } else {
+ $remote = gethostbyaddr($remote_addr);
+ }
} else {
$remote_addr = $_SERVER['REMOTE_ADDR'];
- $remote = empty($_SERVER['REMOTE_HOST'])
- ? gethostbyaddr($remote_addr)
- : $_SERVER['REMOTE_HOST'];
+ if (empty($_SERVER['REMOTE_HOST'])) {
+ if ($have_netdns) {
+ $response = $resolver->query($remote_addr, 'PTR');
+ $remote = $response ? $response->answer[0]->ptrdname : $host;
+ } else {
+ $remote = gethostbyaddr($remote_addr);
+ }
+ } else {
+ $remote = $_SERVER['REMOTE_HOST'];
+ }
}
error_reporting($old_error);