Jak zdobyć Subnet
adres maski lokalnego systemu za pomocą programowania Java?Jak uzyskać maskę podsieci lokalnego systemu za pomocą java?
Odpowiedz
java.net.InterfaceAddress w SE6 ma metodę getNetworkPrefixLength, która zwraca, jak sama nazwa wskazuje, długość prefiksu sieci. Możesz obliczyć maskę podsieci z tego, jeśli wolisz ją mieć w tym formacie. java.net.InterfaceAddress obsługuje zarówno IPv4, jak i IPv6.
getSubnetMask() w kilku aplikacji sieciowych API zwraca maskę podsieci w postaci java.net.InetAddress dla określonego adresu IP (system lokalny może mieć wiele lokalnych adresów IP)
maskę sieci pierwszego adres localhost interfejs:
InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
pełniejsze podejście:
InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
System.out.println(address.getNetworkPrefixLength());
}
/24 oznacza 255.255.255.
FWIW, w przeszłości próbowałem używać InterfaceAddress.getNetworkPrefixLength() i InterfaceAddress.getBroadcast(), ale nie zwracają dokładnych informacji (jest to w systemie Windows, z Sun JDK 1.6.0 aktualizacja 10). Długość prefiksu sieci wynosi 128 (nie 24, która jest w mojej sieci), a zwracany adres transmisji to 255.255.255.255 (nie 192.168.1.255, który znajduje się w mojej sieci).
James
Update: Właśnie znalazłem rozwiązanie zamieszczone tutaj:
http://forums.sun.com/thread.jspa?threadID=5277744
Trzeba zapobiec Java z użyciem protokołu IPv6, tak że nie jest dotarcie do IPv4 przez IPv6. Dodawanie -Djava.net.preferIPv4Stack = true do wiersza poleceń naprawia dla mnie wyniki z InterfaceAddress.getNetworkPrefixLength() i InterfaceAddress.getBroadcast().
Opracowałem proste rozwiązanie IPv4. Potrzebowałem tego do wygenerowania maski sieci dla podsieci tutaj, aby poprawnie delegować te podsieci. Wiem, że mogłem wygenerować tabelę z 32 możliwymi maskami, ale wolałem ją obliczać za każdym razem.
Oto moje rozwiązanie.
/*
* 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;
}
po prostu nazwać to z IP i prefiks chcesz użyć, będzie generować maskę dla Ciebie.
Właśnie skończyłem pracę nad API do podsieci sieci z Javą.
https://launchpad.net/subnettingapi
ma tę funkcjonalność i więcej.
znalazłem, że:
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);
Aby uzyskać SubnetMask IPv6 możemy użyć:
networkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
Aby uzyskać SubnetMask dla IPv4 możemy użyć:
networkInterface.getInterfaceAddresses().get(1).getNetworkPrefixLength();
Oto odpowiedź, jak uzyskać submask z połączenia WIFI: link
ja go dostosowany do moich potrzeb, i to jest tutaj:
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;
}
Jest to specyficzne dla Androida, którego pytanie nie zostało określone. – WouterH
String local=InetAddress.getLocalHost().getHostAddress();
String[] ip_component = local.split("\\.");
String subnet=ip_component[0]+"."+ip_component[1]+"."+ip_component[2]+".";
Ten pracował dla mnie. Tutaj podsieć o zmiennej ma adres podsieci.
Można konwertować uzyskaną wartość w standardowym formacie tekstowym jak poniżej:
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. Jak uzyskać maskę podsieci za pomocą .net?
- 2. Jak uzyskać maskę podsieci i adres emisji osobistego punktu aktywnego w systemie iOS
- 3. Jak uzyskać dostęp do lokalnego systemu plików z przeglądarek WebKit za pomocą JavaScript?
- 4. Jak uzyskać wczorajszą datę za pomocą czasu lokalnego?
- 5. Jak uzyskać adres ethernetowy za pomocą Java?
- 6. Używanie lokalnego systemu plików jako źródła Flume
- 7. Jak uzyskać datetime lokalnego systemu użytkownika w asp.net mvc?
- 8. Jak ustawić właściwość systemu za pomocą gradle?
- 9. Jak uzyskać przyjazną nazwę systemu operacyjnego za pomocą Pythona 2.5?
- 10. Dostęp do lokalnego komputera lokalnego za pośrednictwem usb
- 11. Jak uzyskać procent wykorzystania procesora systemu operacyjnego z poziomu java
- 12. Jak uzyskać dane z formularza za pomocą programu iskra java?
- 13. Jak uzyskać połączenie URL za pomocą proxy w java?
- 14. Jak uzyskać favicon.ico ze strony internetowej za pomocą Java?
- 15. Jak uzyskać dostęp do urządzenia Kinect za pomocą Java?
- 16. Załaduj UIWebView za pomocą lokalnego pliku CSS
- 17. Opracowanie dla Cloudant za pomocą lokalnego CouchDB
- 18. Zamykanie systemu Windows za pomocą Javy
- 19. Jak uzyskać wartość zmiennoprzecinkową za pomocą SqlDataReader?
- 20. Jak zapisać dane z formularza za pomocą lokalnego magazynu HTML5?
- 21. Jak obliczyć histogramy lokalnego kodu binarnego za pomocą OpenCV?
- 22. Jak utworzyć certyfikat rozwoju lokalnego za pomocą SSL?
- 23. Jak wykonać transfer lokalnego portu za pomocą iptables
- 24. Jak uzyskać statystyki systemowe za pomocą node.js
- 25. Tekstury OpenGL systemu Android z non-lokalnego źródła za pomocą Rajawali3D?
- 26. Jak odczytać właściwości Androida za pomocą Java
- 27. Jak uzyskać dane z lokalnego JSON, do strony HTML za pomocą jonowego 2 maszynopisu
- 28. Uzyskiwanie lokalnego adresu IP za pomocą funkcji getaddrinfo() C?
- 29. jak odkodować kody html za pomocą Java?
- 30. SCP w/ssh: kopiowanie lokalnego pliku z systemu Windows na serwer zdalny za pomocą scp
dlaczego ta metoda nie wyświetla informacje prywatne IP na Androida. działa na komputerze, ale nie na Androidzie. daje mi prywatne informacje na temat ipv6 i localhost. Ale nie ipv4 04-04 14: 16: 02.269 1570-1630/com.example.android.droidscanner V/INET:/:: 1% 1% 1/128 [null] 04-04 14: 16: 02.269 1570- 1630/com.example.android.droidscanner V/INET: /127.0.0.1/8 [null] – miatech