How can I retrieve IP address from HTTP header in Java
Use the getHeader(String Name)
method of the javax.servlet.http.HttpServletRequest
object to retrieve the value of Remote_Addr
variable. Here is the sample code:
String ipAddress = request.getHeader("Remote_Addr");
If this code returns empty string, then use this way:
String ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
Correct way of getting Client's IP Addresses from http.Request
Looking at http.Request you can find the following member variables:
// HTTP defines that header names are case-insensitive.
// The request parser implements this by canonicalizing the
// name, making the first character and any characters
// following a hyphen uppercase and the rest lowercase.
//
// For client requests certain headers are automatically
// added and may override values in Header.
//
// See the documentation for the Request.Write method.
Header Header
// RemoteAddr allows HTTP servers and other software to record
// the network address that sent the request, usually for
// logging. This field is not filled in by ReadRequest and
// has no defined format. The HTTP server in this package
// sets RemoteAddr to an "IP:port" address before invoking a
// handler.
// This field is ignored by the HTTP client.
RemoteAddr string
You can use RemoteAddr
to get the remote client's IP address and port (the format is "IP:port"), which is the address of the original requestor or the last proxy (for example a load balancer which lives in front of your server).
This is all you have for sure.
Then you can investigate the headers, which are case-insensitive (per documentation above), meaning all of your examples will work and yield the same result:
req.Header.Get("X-Forwarded-For") // capitalisation
req.Header.Get("x-forwarded-for") // doesn't
req.Header.Get("X-FORWARDED-FOR") // matter
This is because internally http.Header.Get
will normalise the key for you. (If you want to access header map directly, and not through Get
, you would need to use http.CanonicalHeaderKey first.)
Finally, "X-Forwarded-For"
is probably the field you want to take a look at in order to grab more information about client's IP. This greatly depends on the HTTP software used on the remote side though, as client can put anything in there if it wishes to. Also, note the expected format of this field is the comma+space separated list of IP addresses. You will need to parse it a little bit to get a single IP of your choice (probably the first one in the list), for example:
// Assuming format is as expected
ips := strings.Split("10.0.0.1, 10.0.0.2, 10.0.0.3", ", ")
for _, ip := range ips {
fmt.Println(ip)
}
will produce:
10.0.0.1
10.0.0.2
10.0.0.3
How to find the client ip address from a HttpHeaders object in java?
You are able to get it via @Context HttpServletRequest request
simply like:
String ip = request.getRemoteAddr();
New method signature:
@GET
@Produces(MediaType.APPLICATION_JSON)
public String checkLogin(@QueryParam("username")String username,@QueryParam("password")String password,@QueryParam("clientid")String clientno,@QueryParam("callback")String callback,@Context HttpServletRequest request)
what is the right way to get request's ip
The answer is complicated.
If your servlet is running on a webserver that is behind a reverse proxy or load balancer, then that web proxy can be configured to inject a request header that gives the IP address that the request came from. Different reverse proxies will inject different headers. Consult the documentation for your (front-end) server.
If your client uses a (forward) proxy, then it might insert headers to say what the client IP address is ... or it might not. And the IP address it insert might be incorrect.
The value you get by calling
request.getRemoteAddr()
is going to be the IP address of the immediate upstream source of the request.
None of the headers that you listed is standard, but "x-forwarded-for" is reputed to be a defacto standard; i.e. it is the one that is most likely to be inserted by a proxy, etc ... if anything is injected.
Finally, even if you did get an IP address, it wouldn't necessarily help you. For instance, if the client sits on a private network and connects to the internet via a NAT gateway, then the IP address in HTTP request will be an address of the NAT server ... not the actual client IP.
So what does this all mean? Well basically, it means that in general you cannot reliably find out the IP address of the system that the request originated from.
How to get client Ip Address in Java HttpServletRequest
Try this one,
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
reference : http://www.mkyong.com/java/how-to-get-client-ip-address-in-java/
How to get the client's browser ip from the request in java?
As I understand correctly
You can get client IP with method
HttpServletRequest httpRequest = (HttpServletRequest) request;
String userIpAddress = httpRequest.getHeader("X-Forwarded-For");
Full quote:
How to determine by what IP Address my website has been accessed?
Getting the server IP from request:
HttpServletRequest.getLocalAddr();
Full quote: Getting server address and application name
And getting the server ips can be done so:
Inet4Address.getLocalHost().getHostAddress()
Full quote:
Getting the IP address of the current machine using Java
Related Topics
Difference Between Static and Final
How to Prevent Eclipse from Hanging on Startup
How to Get the Current Date and Time
Why Are Class Static Methods Inherited But Not Interface Static Methods
Remove Last Character of a Stringbuilder
Why Does Java Switch on Contiguous Ints Appear to Run Faster with Added Cases
How to Convert .Pfx File to Keystore with Private Key
@Generatedvalue Polymorphic Abstract Superclass Over MySQL
Java Naming Convention with Acronyms
Is -Djava.Library.Path=... Equivalent to System.Setproperty("Java.Library.Path", ...)
How to Upload Files on Server Folder Using Jsp
How to Debug a Multi-Threaded App in Intellij
Why Maven? What Are the Benefits
Create Java Runtime Image on One Platform for Another Using Jlink
What Is the Benefit of Polymorphism Using Collection Interface to Create Arraylist Object
Guessing the Encoding of Text Represented as Byte[] in Java
Download Large File from Server Using Rest Template Java Spring MVC
Convert Java.Util.Hashmap to Scala.Collection.Immutable.Map in Java