J'essaie d'obtenir mon adresse IP Internet en Java mais je continue à obtenir mon adresse locale (c'est-à-dire: 127.0.0.1), lorsque mon adresse IP est 192.168.0.xxx.
J'utilise la ligne:
InetAddress.getLocalHost().getHostAddress();
ce qui semble standard pour obtenir l'adresse IP, mais ce n'est pas ce que je recherche. Chaque tutoriel dit d'utiliser cette ligne, donc je suis un peu confus.
Quelqu'un pourrait-il me dire s'il vous plaît comment je peux obtenir mon adresse IP correcte, s'il vous plaît?
J'utilise un appareil connecté au WiFi et je n'utilise aucun câble. Je me connecte à un serveur en utilisant l'adresse IP donnée par ifconfig inet addr, et je cherche à obtenir l'inet inr du périphérique. Je pouvais vérifier l'adresse IP de la prise côté serveur, mais je pensais que ce serait plus agréable si le périphérique (client) indique au serveur l'adresse IP à laquelle il s'attend à ce que les autres périphériques se connectent.
La classe NetworkInterface
contient toutes les méthodes pertinentes, mais sachez qu'il n'y a rien de tel que "mon IP". Une machine peut avoir plusieurs interfaces et chaque interface peut avoir plusieurs adresses IP.
Vous pouvez tous les lister avec cette classe, mais l'interface et l'adresse IP que vous choisissez dans la liste dépendent de l'utilisation que vous souhaitez en faire.
(InetAddress.getLocalHost()
ne consulte pas vos interfaces, il renvoie simplement la constante 127.0.0.1 (pour IPv4))
String ip;
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
// filters out 127.0.0.1 and inactive interfaces
if (iface.isLoopback() || !iface.isUp())
continue;
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while(addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
ip = addr.getHostAddress();
System.out.println(iface.getDisplayName() + " " + ip);
}
}
} catch (SocketException e) {
throw new RuntimeException(e);
}
URL url = new URL("http://checkip.amazonaws.com/");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
System.out.println(br.readLine());
MODIFIER
Avant de voter, je suis conscient que ce n’est pas une solution Java. C'est une solution générale pour n'importe quel langage de programmation. Les autres solutions ne fonctionnent pas aussi bien pour moi. De plus, je pense que le moyen le plus simple de connaître votre IP est d’aller sur Internet. Il peut s'agir de n'importe quel site, le serveur peut renvoyer votre adresse IP client qu'il a reçue dans la requête. Vous pouvez configurer votre propre noeud final pour cela.
Une autre option pour l'interface réseau par défaut, je viens d'essayer il y a 5 min et vu votre question :)
InetAddress[] localaddr;
try {
localaddr = InetAddress.getAllByName("Host.name");
for(int i = 0; i < localaddr.length; i++){
System.out.println("\n" + localaddr[i].getHostAddress());
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
Voici mon approche pour obtenir l'adresse IP.
S'il vous plaît voir ci-dessous pour le code de travail complet.
import Java.io.BufferedReader;
import Java.io.IOException;
import Java.io.InputStreamReader;
import Java.net.InetAddress;
import Java.net.NetworkInterface;
import Java.net.SocketException;
import Java.util.Enumeration;
import Java.util.Iterator;
import Java.util.StringTokenizer;
import Java.util.TreeSet;
public class MyIpAddress {
public static void main(String[] args) {
// doPortForwarding();
MyIpAddress myIpAddress = new MyIpAddress();
// get default address
String yourIp = myIpAddress.getYourIp(myIpAddress
.getDefaultGateWayAddress());
System.out.println(yourIp);
// get
} // amin
// return ip address for which u need to do port forwarding
private String getYourIp(String defaultAddress) {
String temp = defaultAddress.substring(0, 11);
String ipToForward = "";
TreeSet<String> ipAddrs = getIpAddressList();
for (Iterator<String> iterator = ipAddrs.iterator(); iterator.hasNext();) {
String tempIp = iterator.next();
if (tempIp.contains(temp)) {
ipToForward = tempIp;
break;
}
}
return ipToForward;
}// ipForPortForwarding
// get the ipaddress list
private TreeSet<String> getIpAddressList() {
TreeSet<String> ipAddrs = new TreeSet<String>();
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface
.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
// filters out 127.0.0.1 and inactive interfaces
if (iface.isLoopback() || !iface.isUp())
continue;
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
ipAddrs.add(addr.getHostAddress());
}// 2 nd while
}// 1 st while
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ipAddrs;
}// getIpAddressList
// get default gateway address in Java
private String getDefaultGateWayAddress() {
String defaultAddress = "";
try {
Process result = Runtime.getRuntime().exec("netstat -rn");
BufferedReader output = new BufferedReader(new InputStreamReader(
result.getInputStream()));
String line = output.readLine();
while (line != null) {
if (line.contains("0.0.0.0")) {
StringTokenizer stringTokenizer = new StringTokenizer(line);
stringTokenizer.nextElement();// first string is 0.0.0.0
stringTokenizer.nextElement();// second string is 0.0.0.0
defaultAddress = (String) stringTokenizer.nextElement(); // this is our default address
break;
}
line = output.readLine();
}// while
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return defaultAddress;
}// getDefaultAddress
}
Ma solution qui ne retourne qu'une adresse IP4:
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
if (iface.isLoopback() || !iface.isUp() || iface.isVirtual() || iface.isPointToPoint())
continue;
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while(addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
final String ip = addr.getHostAddress();
if(Inet4Address.class == addr.getClass()) return ip;
}
}
} catch (SocketException e) {
throw new RuntimeException(e);
}
return null;
//This program is find your exact LAN(Local Machine on which your are //runing this program) IP Address
import Java.net.InetAddress;
import Java.net.NetworkInterface;
import Java.net.SocketException;
import Java.util.Enumeration;
public class GetMyIPAddress {
public static void main(String gks[]) throws SocketException{
Enumeration e = NetworkInterface.getNetworkInterfaces();
int ctr=0;
while(e.hasMoreElements())
{
NetworkInterface n = (NetworkInterface) e.nextElement();
Enumeration ee = n.getInetAddresses();
while (ee.hasMoreElements() && ctr<3)
{ ctr++;
if(ctr==3)
break;
InetAddress i = (InetAddress) ee.nextElement();
if(ctr==2)
System.out.println(i.getHostAddress());
}
}
}
}
Avait le même problème, trouvé la solution sur cette page: http://mrhawy.blogspot.it/2012/05/how-to-get-your-external-ip-address-in.html
public String getIpAddress() throws MalformedURLException, IOException {
URL myIP = new URL("http://api.externalip.net/ip/");
BufferedReader in = new BufferedReader(
new InputStreamReader(myIP.openStream())
);
return in.readLine();
}
eu quelques problèmes avec ce code sur le long terme, plusieurs fois dans une semaine, le serveur ne répondra tout simplement pas.
nouvelle solution:
public static String getIpAddress()
{
URL myIP;
try {
myIP = new URL("http://api.externalip.net/ip/");
BufferedReader in = new BufferedReader(
new InputStreamReader(myIP.openStream())
);
return in.readLine();
} catch (Exception e)
{
try
{
myIP = new URL("http://myip.dnsomatic.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(myIP.openStream())
);
return in.readLine();
} catch (Exception e1)
{
try {
myIP = new URL("http://icanhazip.com/");
BufferedReader in = new BufferedReader(
new InputStreamReader(myIP.openStream())
);
return in.readLine();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
return null;
}
Vous devez obtenir le fichier jar de jsoup ici Ajouter le fichier jar de jsoup dans votre projet Java et interpréter ces lignes de code et vous obtiendrez votre adresse IP,
Document doc = Jsoup.connect("https://whatismyipaddress.com/").timeout(10000).get() ;
Elements el = doc.select("div#section_left") ;
Element e = el.select("a").get(
System.out.println(e.text());