Wie bekomme ich Subnet
Mask-Adresse des lokalen Systems mit Java-Programmierung?Wie Subnetzmaske des lokalen Systems mit Java erhalten?
Antwort
java.net.InterfaceAddress in SE6 hat eine getNetworkPrefixLength-Methode, die, wie der Name schon sagt, die Netzwerkpräfixlänge zurückgibt. Sie können die Subnetzmaske daraus berechnen, wenn Sie es lieber in diesem Format haben möchten. java.net.InterfaceAddress unterstützt sowohl IPv4 als auch IPv6.
getSubnetMask() in mehrere Netzwerkanwendung gibt APIs Subnetzmaske in java.net.InetAddress Form zur angegebenen IP-Adresse (eine lokale System kann viele lokalen IP-Adressen hat)
die Netmask der ersten Adresse des lokalen Host Schnittstelle:
InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
eine vollständigere Ansatz:
InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
System.out.println(address.getNetworkPrefixLength());
}
/24 bedeutet 255.255.255.
FWIW, in der Vergangenheit habe ich versucht mit InterfaceAddress.getNetworkPrefixLength() und InterfaceAddress.getBroadcast(), aber sie geben keine genauen Informationen (das ist unter Windows, mit Sun JDK 1.6.0 Update 10). Die Netzwerkpräfixlänge ist 128 (nicht 24, die es in meinem Netzwerk ist), und die Broadcastadresse, die zurückgegeben wird, ist 255.255.255.255 (nicht 192.168.1.255, das es in meinem Netzwerk ist).
James
Update: Ich habe gerade die Lösung hier gepostet:
http://forums.sun.com/thread.jspa?threadID=5277744
Sie benötigen Java, um zu verhindern IPv6 verwenden, so dass es nicht zu IPv4 über IPv6 zu bekommen. Das Hinzufügen von -Djava.net.preferIPv4Stack = true zur Befehlszeile korrigiert die Ergebnisse von InterfaceAddress.getNetworkPrefixLength() und InterfaceAddress.getBroadcast() für mich.
Ich entwickelte eine IPv4-Lösung, die einfach genug ist. Ich brauchte das, um hier eine Netzmaske für Subnetze zu erzeugen, um diese Subnetze korrekt zu delegieren. Ich weiß, ich hätte eine Tabelle der 32 möglichen Masken erstellen können, aber ich zog es vor, sie jedes Mal zu berechnen.
Also hier ist meine Lösung.
/*
* Get network mask for the IP address and network prefix specified...
* The network mask will be returned has an IP, thus you can
* print it out with .getHostAddress()...
*/
public static InetAddress getIPv4LocalNetMask(InetAddress ip, int netPrefix) {
try {
// Since this is for IPv4, it's 32 bits, so set the sign value of
// the int to "negative"...
int shiftby = (1<<31);
// For the number of bits of the prefix -1 (we already set the sign bit)
for (int i=netPrefix-1; i>0; i--) {
// Shift the sign right... Java makes the sign bit sticky on a shift...
// So no need to "set it back up"...
shiftby = (shiftby >> 1);
}
// Transform the resulting value in xxx.xxx.xxx.xxx format, like if
/// it was a standard address...
String maskString = Integer.toString((shiftby >> 24) & 255) + "." + Integer.toString((shiftby >> 16) & 255) + "." + Integer.toString((shiftby >> 8) & 255) + "." + Integer.toString(shiftby & 255);
// Return the address thus created...
return InetAddress.getByName(maskString);
}
catch(Exception e){e.printStackTrace();
}
// Something went wrong here...
return null;
}
Sie nennen es nur mit dem IP und das Präfix, das Sie verwenden möchten, wird es die Netzmaske für Sie generieren.
Ich habe gerade mit der Arbeit an einer API für das Subnetting von Netzwerken mit Java abgeschlossen.
https://launchpad.net/subnettingapi
hat diese Funktionalität und vieles mehr.
fand ich, dass:
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
Um subnetmask für ipv6 bekommen wir verwenden können:
networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
Um subnetmask für IPv4- bekommen wir verwenden können:
networkInterface.getInterfaceAddresses().get(1).getNetworkPrefixLength();
Hier ist ein Antwort, wie man eine Untermaske von der WIFI Verbindung erhält: link
Ich passte es für meine Bedürfnisse, und hier ist es:
private static String intToIP(int ipAddress) {
String ret = String.format("%d.%d.%d.%d", (ipAddress & 0xff),
(ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff),
(ipAddress >> 24 & 0xff));
return ret;
}
public static String GetSubnetMask_WIFI() {
WifiManager wifiManager = (WifiManager) Global.getMainActivity()
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
DhcpInfo dhcp = wifiManager.getDhcpInfo();
String mask = intToIP(dhcp.netmask);
return mask;
}
Dies ist Android spezifisch, die die Frage nicht angegeben. – WouterH
String local=InetAddress.getLocalHost().getHostAddress();
String[] ip_component = local.split("\\.");
String subnet=ip_component[0]+"."+ip_component[1]+"."+ip_component[2]+".";
Das ist für mich gearbeitet. Hier hat das variable Subnetz die Subnetzadresse.
Sie können den erhaltenen Wert in den Standard-Textformat wie folgt konvertieren:
short prflen=...getNetworkPrefixLength();
int shft = 0xffffffff<<(32-prflen);
int oct1 = ((byte) ((shft&0xff000000)>>24)) & 0xff;
int oct2 = ((byte) ((shft&0x00ff0000)>>16)) & 0xff;
int oct3 = ((byte) ((shft&0x0000ff00)>>8)) & 0xff;
int oct4 = ((byte) (shft&0x000000ff)) & 0xff;
String submask = oct1+"."+oct2+"."+oct3+"."+oct4;
- 1. Wie Subnetzmaske mit .net erhalten?
- 2. Wie können wir das Passwort des Systems mit Java erhalten?
- 3. IP- und MAC-Adresse des Systems erhalten
- 4. erhalten Subnetzmaske und Gateway von IP-Adresse
- 5. Gesamtspeicherverbrauch des Systems
- 6. Android So erhalten Sie die installierten Gebietsschemas des Systems
- 7. Wie finde ich die IP-Adresse des Systems (Server) im lokalen Netzwerk?
- 8. So erhalten Sie die Systemstartzeit des Android-Systems
- 9. Nicht blockierende Version des Systems()
- 10. Scopes des Systems in Systemanalyse
- 11. Erhalte die MAC-Adresse des Systems in Java
- 12. Wie mit dem Abschluss des Systems UIAlertController in iOS umgehen?
- 13. Stoppen des Logback-Systems für sauberes Herunterfahren
- 14. So erhalten Sie Subnetzmaske und Broadcast-Adresse des persönlichen Hotspot in iOS
- 15. Wie man Übergang wie Einstellung des Systems iOS sieht?
- 16. Schauspieler die Lebensdauer des Systems in WPF
- 17. So erfassen Sie die Ausgabe des Systems()
- 18. Wie programmgesteuert die Auflösung eines Fensters und das des Systems in Linux erhalten?
- 19. Abrufen des Hostnamens einer lokalen IP-Adresse (Java)
- 20. Flask for Python - Architekturfrage bezüglich des Systems
- 21. Grenzen der Verwendung des semantischen Grid-Systems?
- 22. Wie erfassen Sie den Netzwerkverkehr des Remote-Systems?
- 23. Wie kann die Konfiguration des Spring-Boot-Systems überschrieben werden?
- 24. erhalten spezifisches Element des Objekts im lokalen Speicher
- 25. Wie man chmod beim Booten des Systems laufen lässt
- 26. Unterbrechen des Herunterfahrens des Systems in Adobe Air
- 27. Löschen des lokalen Speichers
- 28. Ermitteln des DRM-Systems, das vom Browser unterstützt wird
- 29. Pfad des lokalen Verzeichnisses
- 30. Android - Aktivierung des Systems Tastensperre (aka Lock Screen)
, warum diese Methode auf Android private IP-Informationen nicht angezeigt. Es funktioniert auf einem Computer, aber nicht auf Android. es gibt mir private Informationen auf ipv6 und localhost. Aber nicht ipv4 04-04 14: 16: 02.269 1570-1630/com.beispiel.android.droidscanner V/INET:/:: 1% 1% 1/128 [null] 04-04 14: 16: 02.269 1570- 1630/com.beispiel.android.droidscanner V/INET: /127.0.0.1/8 [null] – miatech