2013-07-31 41 views
29

Tôi đang cố gắng in địa chỉ IP của người dùng đã đăng nhập trong ứng dụng web của tôi. Nếu người dùng kết nối từ một máy tính khác (trong cùng một mạng, vì ứng dụng web đang chạy trên máy của tôi), hãy sử dụng địa chỉ IP 192.168.10.120:8080/WebApplicationrequest.getRemoteAddr() hoặc request.getLocalAddr()) trả về địa chỉ IP của mình. Khi tôi đăng nhập từ máy tính của tôi chạy ứng dụng web, tôi nhận được địa chỉ IP này 0: 0: 0: 0: 0: 0: 0: 1.

Tại sao lại như vậy? Và sự khác nhau giữa các lệnh này (tôi nên sử dụng cái gì?) Cảm ơn bạn rất nhiều!Sử dụng request.getRemoteAddr() trả về 0: 0: 0: 0: 0: 0: 0: 1

+4

localhost sẽ trả về IP đó. Trên các máy tính khác, bạn sẽ thấy IP thực tế. – Makky

+0

Cảm ơn @Makky bạn có biết sự khác biệt giữa 2 lệnh đó không? – yaylitzis

+0

'getLocalAddr()' nhận địa chỉ IP của máy để nhận yêu cầu. [Nguồn] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocalAddr()). Ngược lại, 'getRemoteAddr()' lấy địa chỉ IP của máy để yêu cầu tài nguyên [Nguồn] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr()). –

Trả lời

29

Trong trường hợp của bạn, vì bạn đang cố gắng truy cập nó trên máy cục bộ của bạn, vì vậy nó sẽ trả về giá trị đó. Nhưng chúng ta hãy một tiếp cận người bạn của bạn nó, và bạn sẽ nhận được kết quả mong đợi với getRemoteAddr

Từ javadoc:

getRemoteAddr - Trả về địa chỉ IP của khách hàng hoặc proxy cuối cùng đã gửi yêu cầu

getLocalAddr - Trả về địa chỉ IP của giao diện mà yêu cầu đã được nhận.

4

getRemoteAddr() giải quyết mục đích của bạn, nhưng nếu khách hàng là đằng sau bất kỳ proxy sau đó bạn sẽ nhận được địa chỉ IP của proxy:

Trả về địa chỉ Internet Protocol (IP) của khách hàng hoặc proxy cuối cùng đã gửi yêu cầu.

getLocalAddr() trả về IP của máy chủ mà ứng dụng đang chạy.

27

Khi chúng tôi chuyển sang IPv6 từ IPv4, họ đang thay đổi địa chỉ loopback (localhost) thành 0:0:0:0:0:0:0:1 từ 127.0.0.1 đó là lý do bạn nhận được địa chỉ này.

Đối với các chức năng:

  • getRemoteAddr() trả về client IP

  • getLocalAddr() trả về IP của máy chủ ứng dụng được chạy trên

-2

thay vì đưa ra url dưới dạng "http://localhost:port/" cung cấp url dưới dạng "http://IP:port/" Bạn sẽ nhận được địa chỉ từ xa.

+1

Điều này không trả lời câu hỏi và đã có các câu trả lời đã được chấp nhận. – ziggystar