2012-09-22 11 views
7

Başlık, toplamları toplar. Yerel ağ arabiriminin DHCP üzerinden atanmış adresi olup olmadığını veya statik olarak java ile ayarlanmış olup olmadığını keşfetmenin herhangi bir yolu var mı?, ip adresinin dhcp ile atanıp atanmadığını veya manüel olarak java olarak ayarlanıp ayarlanmadığını belirler.

+0

İlginç. Out java ile nasılsınız? – Jayan

+0

DHCP aracılığıyla bir IP adresinin atanıp atanmadığını belirlemek istiyor musunuz? Yerel ağ arabiriminin IP adresi mi, yoksa herhangi bir IP adresi mi? Eğer eskiyse, her zaman "ipconfig" veya "ifconfig" çıktısını alabilirsiniz (yine de uygun sistem çağrısını bulmak daha iyi olabilir). –

+0

Sadece yerel ağ arayüzünü belirlemeye çalışıyor. Bunu yapmak için çapraz platform bir yol arıyorum. Eğer zaten kimliği olmayan biri varsa, kendimi kazmaktan mutlu olurum, sadece tekerleği yeniden icat etmekten kaçınmak istedim. – Patrick

cevap

3

Bu nedenle, yalnızca Win NT 'çözümünü istedikçe, benim kodum burada. Geçerli yapılandırılmış değerler ile ağ arabirimlerini listeler.

Not EnableDHCP kayıt defteri anahtarının değeri, bunun önemli olduğunu düşünüyorum.

Sorunuz altında daha önce bahsettiğim gibi, en az basit JNI sarıcısına ihtiyacınız var.

Bu yardımcı olur umarım. Burada

fazla bilgi: 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; 
} 

Basit çıkışı:

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 
+0

harika - teşekkürler. – Patrick

0

Üzgünüm, Hayır, sanmıyorum.
, JAVA, aracılığıyla yapamazsınız, çünkü java'nın işletim sistemi ile ağ arabirimi sadece JVM'dir.
Bir jni, görevi yapmak için toplanabilir.

+0

bunu bir java aracılığıyla yapmak mümkün olmazdı java aracılığıyla yapabilirsiniz? Ya da demek ki, bu bilgi doğal olarak mevcut değildir. – Patrick

+0

Yani, java sorduğunuz bilgilere erişemiyor, belki bir c kodu java verebilir. bir kütüphane aynı şeyi yapabilir, fakat bu da OS'ye özeldir! –

İlgili konular