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/WebApplication
mã request.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
Trả lời
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.
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.
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 IPgetLocalAddr()
trả về IP của máy chủ ứng dụng được chạy trên
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.
Đ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
- 1. về android Trả về getBounds trả về Rect (0, 0 - 0, 0)
- 2. exit (0) vs return 0
- 3. mysql_insert_id() trả về 0
- 4. recv() trả về 0
- 5. Tại sao 0 && 1 là 1 trong khi 1 && 0 bằng 0 trong ruby?
- 6. `java (0% 2! = 0) == false`
- 7. Tại sao ký hiệu (-0) trả về 0?
- 8. Là 0 và! 1 tốt hơn 1 và 0?
- 9. Tại sao (Vô cực | 0) === 0?
- 10. parseInt ("08") trả về 0
- 11. list.item (0) vs danh sách [0]
- 12. Facebook getUser() trả về 0
- 13. Lua table.getn() trả về 0?
- 14. event.charCode luôn trả về 0
- 15. Trong dãy Fibonacci, là fib (0) 0 hay 1?
- 16. Tại sao kết quả 2 + 1 & 0 là 0?
- 17. Stream.Seek (0, SeekOrigin.Begin) hoặc vị trí = 0
- 18. CSS * {margin: 0; padding: 0;} ghi đè
- 19. PHP $ string {0} so với $ string [0];
- 20. (string) đọc [0] vs Convert.ToString (đọc [0])
- 21. Bạn có nên sử dụng rgba (0, 0, 0, 0) hoặc rgba (255, 255, 255, 0) để minh bạch trong CSS không?
- 22. Tại sao ~ 0 là -1?
- 23. Math.floor() | 0
- 24. Tại sao `null> = 0 && null <= 0` nhưng không phải` null == 0`?
- 25. 0-1 Knapsack thuật toán
- 26. Sự khác nhau giữa -0 và 0 là gì?
- 27. unsigned long 0 <-1?
- 28. 1/252 = 0 trong C#?
- 29. Sự khác biệt giữa mảng.GetLength (0) và mảng.GetUpperBound (0)
- 30. get_selectedItems() [0] trên RadGrid trả về null
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
Cảm ơn @Makky bạn có biết sự khác biệt giữa 2 lệnh đó không? – yaylitzis
'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()). –