मैं एक साधारण नेटवर्किंग ऐप लिख रहा हूं ... मुझे नेटवर्क पर मेरी मशीन का असली आईपी जानना होगा, जैसे कि 1 9 2.168.1.3। getLocalHost 127.0.0.1 देता है (लिनक्स पर, अगर यह विंडोज़ पर समान है) यह कैसे करें ?;जावा InetAddress.getLocalHost(); 127.0.0.1 देता है ... वास्तविक आईपी कैसे प्राप्त करें?
उत्तर
आपके कंप्यूटर में कई आईपी हो सकते हैं। आप कैसे जानते हैं कि कौन सा? जिस तरह से मैं करता हूं वह एक और मशीन पर चलने वाला एक बहुत ही सरल सीजीआई है जो आईपी को वापस देखता है, और मैंने इसे तब मारा जब मुझे पता होना चाहिए कि मेरा आईपी बाहरी दुनिया की तरह दिखता है।
चूंकि मशीन में कई पते हो सकते हैं, यह निर्धारित करना मुश्किल है कि आपके लिए कौन सा एक है। आम तौर पर, आप चाहते हैं कि सिस्टम अपनी रूटिंग तालिका के आधार पर आईपी असाइन करे। परिणाम आईपी पर निर्भर करता है के रूप में आप से कनेक्ट करना चाहते हैं, तो इसे आसानी चाल है: बस एक कनेक्शन बना सकते हैं और देखते हैं कि क्या आप ओएस से मिल गया है पता:
// output on my machine: "192.168.1.102"
Socket s = new Socket("192.168.1.1", 80);
System.out.println(s.getLocalAddress().getHostAddress());
s.close();
// output on my machine: "127.0.1.1"
System.out.println(InetAddress.getLocalHost().getHostAddress());
मैं कि क्या यकीन नहीं है यद्यपि कनेक्शन स्थापित किए बिना ऐसा करना संभव है। मुझे लगता है कि मैंने एक बार पर्ल (या सी?) के साथ ऐसा करने में कामयाब रहा है, लेकिन मुझे जावा के बारे में मत पूछो। मुझे लगता है कि वास्तव में इसे कनेक्ट किए बिना यूडीपी सॉकेट (डेटाग्राम सॉकेट) बनाना संभव हो सकता है।
यदि कोई एनएटी राउटर है जिस तरह से आप आईपी प्राप्त नहीं कर पाएंगे कि रिमोट होस्ट हालांकि देखेंगे। हालांकि, जैसा कि आपने 1 9 2 दिया था। * उदाहरण के तौर पर, मुझे लगता है कि आपको परवाह नहीं है।
यदि आप वास्तव में मशीन पर सभी आईपी पते के साथ काम करना चाहते हैं तो आप उन्हें नेटवर्कइंटरफेस क्लास के साथ प्राप्त कर सकते हैं। बेशक, आपको उस व्यक्ति की आवश्यकता है जिसे आप वास्तव में उपयोग करना चाहते हैं, लेकिन यह उस पर निर्भर करता है कि आप इसका उपयोग किस प्रकार कर रहे हैं, या आपको एकाधिक पते के लिए इसका उपयोग करने के तरीके का विस्तार करने की आवश्यकता हो सकती है।
import java.net.*;
import java.util.*;
public class ShowInterfaces
{
public static void main(String[] args) throws Exception
{
System.out.println("Host addr: " + InetAddress.getLocalHost().getHostAddress()); // often returns "127.0.0.1"
Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
for (; n.hasMoreElements();)
{
NetworkInterface e = n.nextElement();
System.out.println("Interface: " + e.getName());
Enumeration<InetAddress> a = e.getInetAddresses();
for (; a.hasMoreElements();)
{
InetAddress addr = a.nextElement();
System.out.println(" " + addr.getHostAddress());
}
}
}
}
'जबकि (x.hasMoreElements()) {}' '(x.hasMoreElements();) {}' – sync
इसे ठीक करने के लिए:
अपने होस्ट नाम का पता लगाएं। टाइप करें:
hostname
। उदाहरण के लिए, आप पाते हैं कि आपका होस्टनामmycomputer.xzy.com
अपना होस्ट नाम अपनी मेजबान फ़ाइल में रखें।
/etc/hosts
।10.50.16.136 mycomputer.xzy.com
के रूप में इस तरह के यहाँ एक तरह से आईपीवी 6 और लूपबैक परिणाम से बचना है।
public InetAddress getCurrentIp() {
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface
.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) networkInterfaces
.nextElement();
Enumeration<InetAddress> nias = ni.getInetAddresses();
while(nias.hasMoreElements()) {
InetAddress ia= (InetAddress) nias.nextElement();
if (!ia.isLinkLocalAddress()
&& !ia.isLoopbackAddress()
&& ia instanceof Inet4Address) {
return ia;
}
}
}
} catch (SocketException e) {
LOG.error("unable to get current IP " + e.getMessage(), e);
}
return null;
}
वर्तमान उदाहरण से वर्तमान अनुरोध प्राप्त
HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
तो अनुरोध
ip = httpServletRequest.getRemoteAddr();
के लिए 'neater' होगा, कोड/समाधान के बारे में संक्षिप्त समेत यह उत्तर एक पूर्ण होगा! –
यह उत्तर सही की तरह लगता है। मैं अपने सर्वर पर एक smpp अनुरोध पर क्लाइंट अनुरोध पता की तलाश में हूं – PhillipMwaniki
मामले में आप अपने पीसी के आईपी पते प्राप्त करना चाहते से पता मिलता है, आप "InetAddress" ऑब्जेक्ट का उपयोग करना होगा, जो "java.net.InetAddress" लाइब्रेरी में मौजूद है।
निम्नलिखित विधि आपके आईपी रिटर्न:
public String getIp() {
String myIp = "";
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
myIp = ip.getHostAddress(); // This method returns the IP.
} catch (UnknownHostException e) {
e.printStackTrace();
}
return myIp;
}
...
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
private String[] getHostAddresses() {
Set<String> HostAddresses = new HashSet<>();
try {
for (NetworkInterface ni : Collections.list(NetworkInterface.getNetworkInterfaces())) {
if (!ni.isLoopback() && ni.isUp() && ni.getHardwareAddress() != null) {
for (InterfaceAddress ia : ni.getInterfaceAddresses()) {
if (ia.getBroadcast() != null) { //If limited to IPV4
HostAddresses.add(ia.getAddress().getHostAddress());
}
}
}
}
} catch (SocketException e) { }
return HostAddresses.toArray(new String[0]);
}
यह जाँच करें:
/**
* Returns this host's non-loopback IPv4 addresses.
*
* @return
* @throws SocketException
*/
private static List<Inet4Address> getInet4Addresses() throws SocketException {
List<Inet4Address> ret = new ArrayList<Inet4Address>();
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets)) {
Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
if (inetAddress instanceof Inet4Address && !inetAddress.isLoopbackAddress()) {
ret.add((Inet4Address)inetAddress);
}
}
}
return ret;
}
/**
* Returns this host's first non-loopback IPv4 address string in textual
* representation.
*
* @return
* @throws SocketException
*/
private static String getHost4Address() throws SocketException {
List<Inet4Address> inet4 = getInet4Addresses();
return !inet4.isEmpty()
? inet4.get(0).getHostAddress()
: null;
}
मैं इस कोड लिखा है!
मेरे लिए:
- लूपबैक नहीं होना चाहिए!
- यूपी होना चाहिए!
- मैक पता होना आवश्यक है (शून्य नहीं है)
- 1. InetAddress.getLocalHost()। GetHostAddress() एंड्रॉइड में 127.0.0.1 देता है
- 2. विज़िटर से वास्तविक आईपी कैसे प्राप्त करें?
- 3. InetAddress.getLocalHost() अज्ञातहोस्टएक्सप्शन
- 4. Django आईपी केवल रिटर्न 127.0.0.1
- 5. आईपी पता जावा
- 6. क्लाइंट आईपी कैसे प्राप्त करें?
- 7. InetAddress.getLocalHost() गलत परिणाम देता है जब होस्ट नाम 64 वर्ण
- 8. आईपी पता कैसे प्राप्त करें?
- 9. InetAddress.getLocalHost()। GetHostName() bash "hostname" से अलग मान क्यों देता है?
- 10. UserHostAddress गलत आईपी देता है
- 11. जावा में डोमेन नाम से आईपी पता कैसे प्राप्त करें?
- 12. लोकलहोस्ट बनाम 127.0.0.1
- 13. वास्तविक प्रकार का वास्तविक प्रकार कैसे प्राप्त करें?
- 14. डेल्फी XE2 - निर्दिष्ट वेबसाइट का आईपी कैसे प्राप्त करें?
- 15. सर्वर आईपी पता कैसे प्राप्त करें?
- 16. वास्तविक जेपीनल आकार कैसे प्राप्त करें?
- 17. यूआरएल स्ट्रिंग के साथ आईपी पता प्राप्त करें? (जावा)
- 18. जावा में आईपी स्पूफ कैसे करें
- 19. फ्लास्क request.remote_addr वेबफैक्शन पर गलत है और वास्तविक उपयोगकर्ता आईपी नहीं दिखा रहा है
- 20. DNS tracker.thepiratebay.org को 127.0.0.1
- 21. उपयोगकर्ता आईपी पता ढूँढना
- 22. रेल और Nginx के साथ ग्राहक का वास्तविक आईपी पता प्राप्त करें?
- 23. वास्तविक डिवाइस से मोबाइल नंबर प्राप्त करें
- 24. वास्तविक ऑब्जेक्ट पैरामीटर का वास्तविक प्रकार प्राप्त करें
- 25. जावा एप्लेट
- 26. वास्तविक [यूआईस्क्रीन मुख्य स्क्रीन] फ्रेम आकार कैसे प्राप्त करें?
- 27. मशीन पर सभी आईपी पते प्राप्त करें
- 28. आगंतुकों का आईपी पता प्राप्त करें
- 29. आईओएस व्यू के वास्तविक आयाम प्राप्त करें
- 30. मल्टीकास्ट पैकेट से प्रेषक आईपी प्राप्त करें
मेरी खिड़की में, println (InetAddress.getLocalHost() getHostAddress()।); प्रिंट 10.50.16.136 –
127.0.1.1 मेरे लिए (उबंटू) – sfussenegger
दिलचस्प ... सही जवाब हालांकि यह काम नहीं कर रहा है? – sfussenegger