Título lo resume. ¿Hay alguna manera de descubrir si una interfaz de red local tiene su dirección asignada a través de DHCP o si está establecida estáticamente a través de Java?determina programáticamente si la dirección IP se asigna mediante dhcp o se establece manualmente en java
Respuesta
Por lo tanto, como solicitó la 'solución' Win NT solamente, aquí está mi código. Enumera las interfaces de red con los valores configurados actuales.
Nota Valor de clave de registro EnableDHCP, creo que este es el punto.
Como ya mencioné en el comentario bajo su pregunta, necesita al menos el envoltorio JNI simple.
Espero que esto ayude.
información más aquí: http://support.microsoft.com/kb/314053
#include <windows.h>
#define NETCARD_ROOT L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"
#define TCPIP_ROOT L"SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces"
int _tmain(int argc, _TCHAR* argv[])
{
//First enumerate all network adapters
HKEY hNetCardsKey;
LSTATUS lStatus = ERROR_SUCCESS;
lStatus = RegOpenKey(HKEY_LOCAL_MACHINE,
NETCARD_ROOT,
&hNetCardsKey);
if(ERROR_SUCCESS == lStatus)
{
DWORD dwCards = 0L;
DWORD dwMaxSubkeyNameLen = 0L;
lStatus = RegQueryInfoKey(hNetCardsKey, NULL, NULL, NULL, &dwCards,
&dwMaxSubkeyNameLen, NULL, NULL, NULL, NULL, NULL, NULL);
if(ERROR_SUCCESS == lStatus && dwCards)
{
for(DWORD i = 0; i < dwCards; i++)
{
TCHAR wszCurrentCardIdxName[MAX_PATH];
wszCurrentCardIdxName[0] = '\0';
lStatus = RegEnumKey(hNetCardsKey, i,
wszCurrentCardIdxName, MAX_PATH);
if(ERROR_SUCCESS == lStatus)
{
TCHAR wszAdapterKeyName[MAX_PATH];
wszAdapterKeyName[0] = '\0';
wsprintf(wszAdapterKeyName, L"%s\\%s", NETCARD_ROOT,
wszCurrentCardIdxName);
HKEY hCardNameKey;
lStatus = RegOpenKey(
HKEY_LOCAL_MACHINE,
wszAdapterKeyName,
&hCardNameKey);
if(ERROR_SUCCESS == lStatus)
{
TCHAR wszServiceNameGuid[MAX_PATH];
TCHAR wszAdapterName[MAX_PATH];
DWORD dwSize = sizeof(wszServiceNameGuid);
wszServiceNameGuid[0] = '\0';
RegQueryValueEx(
hCardNameKey,
L"ServiceName",
NULL,
NULL,
(LPBYTE)wszServiceNameGuid,
&dwSize);
dwSize = sizeof(wszAdapterName);
RegQueryValueEx(
hCardNameKey,
L"Description",
NULL,
NULL,
(LPBYTE)wszAdapterName,
&dwSize);
OutputDebugStringW(wszServiceNameGuid);
OutputDebugStringW(L"\n");
RegCloseKey(hCardNameKey);
//Get parameters
TCHAR wszCardParamKey[MAX_PATH];
wszCardParamKey[0] = '\0';
wsprintf(wszCardParamKey,L"%s\\%s", TCPIP_ROOT, wszServiceNameGuid);
HKEY hParamKey = NULL;
lStatus = RegOpenKey(
HKEY_LOCAL_MACHINE,
wszCardParamKey,
&hParamKey);
if(ERROR_SUCCESS == lStatus)
{
DWORD dwEnabledDHCP = 0L;
DWORD dwDWSize = sizeof(DWORD);
TCHAR wszStaticIP[32];
TCHAR wszDHCPIP[32];
DWORD dwIPSize = sizeof(wszDHCPIP);
ZeroMemory(wszDHCPIP, dwIPSize);
ZeroMemory(wszStaticIP, dwIPSize);
lStatus = RegQueryValueEx(
hParamKey,
L"EnableDHCP",
NULL, NULL,
(LPBYTE)&dwEnabledDHCP,
&dwDWSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"Adapter : %s [%s] \n\tDHCP : %s\n",
wszServiceNameGuid,
wszAdapterName,
dwEnabledDHCP
? L"Yes" : L"No");
}
lStatus = RegQueryValueEx(
hParamKey,
L"IPAddress",
NULL,
NULL,
(LPBYTE)&wszStaticIP,
&dwIPSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"\tConfigured IP Address : %s\n", wszStaticIP);
}
dwIPSize = sizeof(wszDHCPIP);
lStatus = RegQueryValueEx(
hParamKey,
L"DhcpIPAddress",
NULL,
NULL,
(LPBYTE)&wszDHCPIP,
&dwIPSize);
if(SUCCEEDED(lStatus))
{
wprintf_s(L"\tDHCP IP Address : %s\n", wszDHCPIP);
}
wprintf_s(L"\n");
RegCloseKey(hParamKey);
}
}
}
}
}
RegCloseKey(hNetCardsKey);
}
return 0;
}
salida simple:
Adapter : {6EC2554F-3359-43A2-AADB-57F427DC72FC} [Marvell Yukon 88E8072 PCI-E Gigabit Ethernet Controller]
DHCP : No
Configured IP Address : 192.168.5.10
DHCP IP Address : 192.168.1.102
Adapter : {2A28BDA8-ED1D-4E6E-8990-485EE1836828} [Sony Ericsson Device 0016 USB Ethernet Emulation (NDIS 5)]
DHCP : Yes
Configured IP Address :
DHCP IP Address : 0.0.0.0
Adapter : {491DC095-155F-4572-B975-2E1703C17632} [Microsoft Windows Mobile Remote Adapter]
DHCP : Yes
Configured IP Address :
DHCP IP Address : 169.254.2.2
Adapter : {5F987E64-E804-42DA-9453-8E479B6FC835} [Broadcom 802.11b/g Network adapter]
DHCP : Yes
Configured IP Address :
DHCP IP Address : 192.168.1.14
maravilloso, gracias. – Patrick
Lo siento, no, no lo creo.
no puede hacerlo a través de JAVA, ya que la interfaz de Java con la red del sistema operativo es solo la JVM.
Un jni se puede resumir para hacer la tarea tal vez.
no podría hacerlo a través de un jni significa que puede hacerlo a través de Java? ¿O quiso decir que no está disponible la información de forma nativa? – Patrick
quiero decir, java no puede acceder a la información que está pidiendo, tal vez un código c puede darle java. ¡por supuesto, una biblioteca puede hacer lo mismo, pero eso también sería un OS específico! –
- 1. ¿Cómo se determina si una dirección IP es privada en Python?
- 2. Establecer IP estática si no se obtiene de DHCP (secuencia de comandos)
- 3. Haga ping o indique si un dispositivo se encuentra en la red mediante MAC en C#
- 4. Verificando programáticamente si se establece un código de bloqueo
- 5. UITextView selectedRange no se muestra cuando se establece mediante programación
- 6. Verifique si una variable URL se establece mediante JQuery
- 7. Detecta si la dirección IP pública es dinámica o estática
- 8. ¿Cómo establecer mi dirección de IP programáticamente?
- 9. ¿Cómo detectar el cambio de dirección IP programáticamente en Linux?
- 10. ¿dónde se asigna la pila de Java?
- 11. Calcular si una dirección IP se encuentra en un rango especificado en Java
- 12. ¿Cómo se determina si SqlConnection se alistó en un System.Transactions 'tx o no?
- 13. Obtener la dirección IP 'externa' en Java
- 14. ¿Por qué se ofrecen DHCP Offer y Ack?
- 15. ¿Cómo obtener una dirección IP desde la dirección Mac mediante programación en Android?
- 16. ¿Cómo se establece programáticamente Excepción Proxy en IE?
- 17. ¿Cómo se determina si CKEditor está cargado?
- 18. Configurar Android IP, DNS, configuración GATEWAY programáticamente
- 19. En Java, ¿cómo se determina si se está ejecutando un subproceso?
- 20. C# HttpWebRequest - ¿Cómo se determina si se realizó HTTP 301?
- 21. ¿Cómo obtener la dirección IP cuando se crea una sesión?
- 22. Dirección IP no obtenida en java
- 23. Consultando un servidor DHCP en C#
- 24. Java user.home se establece en% userprofile% y no se resuelve
- 25. TcpListener: Escuche en cada dirección, incluida la dirección IP GPRS
- 26. Compruebe si la dirección IP está en el rango privado
- 27. ¿Cómo cambio la dirección IP en Oracle 10g
- 28. ¿Cómo se determina programáticamente si una computadora con Windows es miembro de un dominio?
- 29. Mongoid, alcance si se establece un valor?
- 30. .htaccess/.htpasswd bypass si se encuentra en una determinada dirección IP
interesante. ¿Cómo te va con out java? – Jayan
Está preguntando sobre la determinación de si una dirección IP se asigna a través de DHCP ... ¿se refiere a la dirección IP de una interfaz de red local, o cualquier dirección IP arbitraria? Si es lo primero, siempre puede raspar la salida de 'ipconfig' o' ifconfig' (aunque probablemente sea mejor encontrar la llamada al sistema apropiada). –
Solo intento determinar la interfaz de red local. Estoy buscando una forma de plataforma cruzada para hacerlo. Si no hay nadie que ya esté contento de profundizar en mí mismo, solo quería evitar reinventar la rueda. – Patrick