Discussion:
gethostbyaddr, bei Fehler keine IP ausgeben
(zu alt für eine Antwort)
Detlef Paschke
2022-11-25 19:56:45 UTC
Permalink
Hallo,

für eine kleine Auswertung einer Seite, verwende ich einen Aufruf mit
fput, in dem unter anderem die IP und der Hostname des Benutzers
protokolliert werden.

$_SERVER["REMOTE_ADDR"] . ' | ' . gethostbyaddr($_SERVER['REMOTE_ADDR'])

Kann mit gethostbyaddr() der Hostname jedoch nicht aufgelöst werden,
wird ebenso die IP ausgegeben. Im Ergebnis stünde dann zwei mal die IP
in der Ausgabe.

Gibt es einen einfachen kleinen Trick, dass von gethostbyaddr() im Fall
eines Fehler bzw. wenn der Hostname nicht aufgelöst wird, einfach ein
"False" oder irgend so etwas ähnliches ausgegeben wird?

Viele Grüße
Detlef Paschke
--
Das "Zitat des Augenblicks" gibt es nur auf
https://schabau.eu
Meine "Merkzettel"
https://helpdesk.schabau.eu
Arno Welzel
2022-11-26 16:17:00 UTC
Permalink
Post by Detlef Paschke
Hallo,
für eine kleine Auswertung einer Seite, verwende ich einen Aufruf mit
fput, in dem unter anderem die IP und der Hostname des Benutzers
protokolliert werden.
$_SERVER["REMOTE_ADDR"] . ' | ' . gethostbyaddr($_SERVER['REMOTE_ADDR'])
Kann mit gethostbyaddr() der Hostname jedoch nicht aufgelöst werden,
wird ebenso die IP ausgegeben. Im Ergebnis stünde dann zwei mal die IP
in der Ausgabe.
Ja, kommt vor. Nicht jede IP-Adresse kann per rDNS aufgelöst werden.
Post by Detlef Paschke
Gibt es einen einfachen kleinen Trick, dass von gethostbyaddr() im Fall
eines Fehler bzw. wenn der Hostname nicht aufgelöst wird, einfach ein
"False" oder irgend so etwas ähnliches ausgegeben wird?
Nein.

Siehe auch: <https://www.php.net/manual/de/function.gethostbyaddr.php>

"Rückgabewerte:

Gibt bei Erfolg den Hostnamen zurück, im Fehlerfall die unmodifizierte
ip oder false bei einer fehlerhaften Eingabe."

Mein Ansatz wäre:

$ipAddress = $_SERVER["REMOTE_ADDR"];
$hostName = gethostbyaddr($ipAddress);

$result = sprintf(
'%s%s',
$ipAddress,
($ipAddress !== $hostName) ? ' | ' . $hostName : ''
);

Zur Erläuterung, falls ternäre Operatoren nicht bekannt sind - die
dritte Zeile im sprintf() ist eine Abkürzung für sowas:

$ipAddress = $_SERVER["REMOTE_ADDR"];
$hostName = gethostbyaddr($ipAddress);

if ($ipAddress !== $hostName) {
$hostOutput = ' | ' . $hostName;
} else {
$hostOutput = '';
}

$result = sprintf(
'%s%s',
$ipAddress,
$hostOutput
);
--
Arno Welzel
https://arnowelzel.de
Detlef Paschke
2022-11-28 15:10:39 UTC
Permalink
Post by Arno Welzel
Post by Detlef Paschke
Hallo,
Hallo Arno,
Post by Arno Welzel
Post by Detlef Paschke
Gibt es einen einfachen kleinen Trick, dass von gethostbyaddr() im Fall
eines Fehler bzw. wenn der Hostname nicht aufgelöst wird, einfach ein
"False" oder irgend so etwas ähnliches ausgegeben wird?
Nein.
Siehe auch: <https://www.php.net/manual/de/function.gethostbyaddr.php>
Gibt bei Erfolg den Hostnamen zurück, im Fehlerfall die unmodifizierte
ip oder false bei einer fehlerhaften Eingabe."
das hatte ich auch gelesen aber man weiß ja nie, was der eine oder
andere noch für Geheimwissen hat.
Post by Arno Welzel
$ipAddress = $_SERVER["REMOTE_ADDR"];
$hostName = gethostbyaddr($ipAddress);
$result = sprintf(
'%s%s',
$ipAddress,
($ipAddress !== $hostName) ? ' | ' . $hostName : ''
);
So in dieser Art habe ich es jetzt auch gemacht, vielen Dank

Viele Grüße
Detlef Paschke
--
Das "Zitat des Augenblicks" gibt es nur auf
https://schabau.eu
Meine "Merkzettel"
https://helpdesk.schabau.eu
Loading...