Witam, mógłby mi ktoś objaśnić jak mogę zdobyć zewnętrzne IP klienta? W aplikacji mam coś takiego, że najpierw sprawdzane jest połączenie (URL + URLConnection), a następnie chcę, aby program był w stanie zwrócić IP klienta. W sieci widziałem, że należy użyć HttpServletRequest, lecz nie potrafię sobie z tym dać rady :/ Mógłby ktoś krok po kroku objaśnić jak powinienem się za to zabrać? Z góry dziekuję za pomoc :)
0
0
To nie takie proste. Musiałbyś zrobić request od tego klienta o jakiegoś zewnętrznego serwera (swojego) i odczytać IP z którego przyszedł ten request. Z poziomu samego klienta nie da sie tego stwierdzić, chyba że jego maszyna ma faktycznie przypisany bezpośrednio ten publiczny IP, wtedy można by pobrać listę interfejsów sieciowych i odczytać z nich adres.
0
można odpytać np. stronę https://www.ipify.org/ - adres dostaniesz w JSONie
0
Zrobiłem coś takiego:
URL url = new URL("http://checkip.amazonaws.com/");
URLConnection connection = url.openConnection();
connection.connect();
log.debug("Połączenie z internetem aktywne");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
publicIP = reader.readLine().trim();
log.debug("Publiczne IP użytkownika: " + publicIP);
Ujdzie, czy raczej można to zrobić bardziej optymalnie? :D
0
bydzie :)
0
No to gites, dzięki za info :D
0
W sumie to jeszcze jedno pytanko - ma ktoś może taki skrypt jak na tym http://checkip.amazonaws.com/ ? Chciałbym wrzucić to na swojego hosta :)
EDIT:
<?PHP
function getUserIP() {
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
$_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if (filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} elseif (filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = $forward;
} else {
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip;
?>
Nie było pytania ;)