すでにこの種の処理を行っているライブラリがあるかどうか不思議です。だから、私のサーバー上の訪問者のHTTPヘッダー要求からIPアドレスフィールドを取得し、Javaですべてを実行したいのですか?どんな助けもいいだろう。 ありがとうございます。JavaのHTTPヘッダーからIPアドレスを取得する方法
答えて
javax.servlet.http.HttpServletRequest
オブジェクトのgetHeader(String Name)
メソッドを使用して、という変数を取得します。ここではサンプルコードは次のとおりです。
String ipAddress = request.getHeader("Remote_Addr");
このコードは、空の文字列を返す場合、この方法を使用します。
String ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
非常にupvotedされた受け入れ答えがあるのにもかかわらず、私が提案したいのですが代替案と受け入れられた答えの欠点を指摘する。
request.getHeader("Remote_Addr")
は、request.getRemoteAddr()
とまったく同じに戻るため、specifiedです。したがって、両方をチェックするのは意味がありません。また、getRemoteAddr
はjavax.servlet.ServletRequest
のメソッド(つまりHTTP非依存型)であり、getHeader
はjavax.servlet.http.HttpServletRequest
であることに注意してください。
さらに、一部のプロキシはX-Forwarded-For
ではなくClient-IP
を使用します。議論については、https://stackoverflow.com/a/7446010/131929を参照してください。
HTTP_X_FORWARDED_FOR
を超えるX-Forwarded-For
の使用方法がわかりません。 Javaでは、私はむしろ、直接の短い形式を使用したいと思います。議論については、https://stackoverflow.com/a/3834169/131929を参照してください。 getHeader
はspecifiedであるため、大文字と小文字は区別されません。の場合はです。
のJava代替
public final class ClientIpAddress {
// CHECKSTYLE:OFF
// https://stackoverflow.com/a/11327345/131929
private static Pattern PRIVATE_ADDRESS_PATTERN = Pattern.compile(
"(^127\\.)|(^192\\.168\\.)|(^10\\.)|(^172\\.1[6-9]\\.)|(^172\\.2[0-9]\\.)|(^172\\.3[0-1]\\.)|(^::1$)|(^[fF][cCdD])",
Pattern.CANON_EQ);
// CHECKSTYLE:ON
private ClientIpAddress() {
}
/**
* Extracts the "real" client IP address from the request. It analyzes request headers
* {@code REMOTE_ADDR}, {@code X-Forwarded-For} as well as {@code Client-IP}. Optionally
* private/local addresses can be filtered in which case an empty string is returned.
*
* @param request HTTP request
* @param filterPrivateAddresses true if private/local addresses (see
* https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces and
* https://en.wikipedia.org/wiki/Unique_local_address) should be filtered i.e. omitted
* @return IP address or empty string
*/
public static String getFrom(HttpServletRequest request, boolean filterPrivateAddresses) {
String ip = request.getRemoteAddr();
String headerClientIp = request.getHeader("Client-IP");
String headerXForwardedFor = request.getHeader("X-Forwarded-For");
if (StringUtils.isEmpty(ip) && StringUtils.isNotEmpty(headerClientIp)) {
ip = headerClientIp;
} else if (StringUtils.isNotEmpty(headerXForwardedFor)) {
ip = headerXForwardedFor;
}
if (filterPrivateAddresses && isPrivateOrLocalAddress(ip)) {
return StringUtils.EMPTY;
} else {
return ip;
}
}
private static boolean isPrivateOrLocalAddress(String address) {
Matcher regexMatcher = PRIVATE_ADDRESS_PATTERN.matcher(address);
return regexMatcher.matches();
}
}
PHPの代替素晴らしいです
function getIp()
{
$ip = $_SERVER['REMOTE_ADDR'];
if (empty($ip) && !empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
// omit private IP addresses which a proxy forwarded
$tmpIp = $_SERVER['HTTP_X_FORWARDED_FOR'];
$tmpIp = filter_var(
$tmpIp,
FILTER_VALIDATE_IP,
FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
);
if ($tmpIp != false) {
$ip = $tmpIp;
}
}
return $ip;
}
あなたの解決策はエレガントで、私はこれを使用しています。 UpVote – Mubasher
X-Forwarded-Forには、コンマで区切ったプロキシIPアドレスのリストを含めることができるので、最初に文字列を分割します。 –
- 1. C#のFTPリクエストからIPアドレスを取得する方法
- 2. C#、TcpClientからIPアドレスを取得する方法は?
- 3. ソケットからIPアドレスを取得する方法Windowsで
- 4. フォームメーラからIPアドレスを取得する方法
- 5. java android programminging。ユーザからIPアドレスを取得する
- 6. HTTPヘッダーを取得する方法
- 7. AndroidでプログラムでMacアドレスからIPアドレスを取得する方法は?
- 8. JavaのFTPサーバからファイルhttpアドレスを取得するには?
- 9. 取得IPアドレス
- 10. Java RMIで発信IPアドレスを取得
- 11. IPアドレスを取得
- 12. IPアドレスの取得
- 13. JAVAのクライアントマシンからMACアドレスを取得する方法は?
- 14. Javaアプレットから正しいローカルIPアドレスを取得
- 15. Pythonを使用してHTTP POSTリクエストからIPアドレスを取得する
- 16. リダイレクト後にホストのIPアドレスとHTTPステータスを取得する
- 17. jspのjavaで実際のサーバー名とIPアドレスを取得する方法は?
- 18. JavaのHttpResponseのプロキシサーバーでクライアントIPアドレスを取得する方法は?
- 19. Parallels VMがホストから使用するIPアドレスを取得する方法は?
- 20. 構造体addrinfoから自分のIPアドレスを取得する方法
- 21. Java Play 1.2.4で着信要求のIPアドレスを取得する方法
- 22. 私のシステムのIPアドレスを取得する方法
- 23. 他のモバイルデバイスのIPアドレスを取得する方法は?
- 24. クライアントマシンのIPアドレスを取得
- 25. クライアントのIPアドレスを取得する方法
- 26. Ruby on RubyでホストサーバのIPアドレスを取得する方法
- 27. クライアントのIPアドレスを取得する方法
- 28. AndroidエミュレータのIPアドレスを取得する方法は?
- 29. blazeDSでクライアントのIPアドレスを取得する方法
- 30. クライアント/ユーザのIPアドレスを取得する方法は?
! :)ありがとう、ありがとうございます、特定のIPアドレスに基づいてどの国が訪問者であると結論付けることができる方法はありますか? P.S.最高のものとしてマークします。あなたがすでに私の質問に答えているからです。 –
国/都市のGeoIPサービスを認識するためです。たとえば、次のリンクを確認してください。http://www.maxmind.com/app/java –
IPアドレスをジオコードする:http://stackoverflow.com/questions/3232516/geocode-an-ip-address –