以编程方式确定是通过dhcp分配IP地址还是在java中手动设置

前端之家收集整理的这篇文章主要介绍了以编程方式确定是通过dhcp分配IP地址还是在java中手动设置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
标题总结了它.有没有办法发现本地网络接口是否通过DHCP分配了它的地址,还是通过 java静态设置?

解决方法

因此,正如您仅请求Win NT’解决方案’,这是我的代码.它列出了具有当前配置值的网络接口.

注意EnableDHCP注册表键值,我认为这是重点.

正如我在你的问题评论中已经提到的,你需要至少简单的JNI包装器.

希望这可以帮助.

更多信息:http://support.microsoft.com/kb/314053

  1. #include <windows.h>
  2.  
  3. #define NETCARD_ROOT L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"
  4. #define TCPIP_ROOT L"SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces"
  5.  
  6. int _tmain(int argc,_TCHAR* argv[])
  7. {
  8.  
  9. //First enumerate all network adapters
  10.  
  11. HKEY hNetCardsKey;
  12. LSTATUS lStatus = ERROR_SUCCESS;
  13.  
  14. lStatus = RegOpenKey(HKEY_LOCAL_MACHINE,NETCARD_ROOT,&hNetCardsKey);
  15.  
  16. if(ERROR_SUCCESS == lStatus)
  17. {
  18. DWORD dwCards = 0L;
  19. DWORD dwMaxSubkeyNameLen = 0L;
  20. lStatus = RegQueryInfoKey(hNetCardsKey,NULL,&dwCards,&dwMaxSubkeyNameLen,NULL);
  21.  
  22. if(ERROR_SUCCESS == lStatus && dwCards)
  23. {
  24. for(DWORD i = 0; i < dwCards; i++)
  25. {
  26. TCHAR wszCurrentCardIdxName[MAX_PATH];
  27. wszCurrentCardIdxName[0] = '\0';
  28. lStatus = RegEnumKey(hNetCardsKey,i,wszCurrentCardIdxName,MAX_PATH);
  29.  
  30. if(ERROR_SUCCESS == lStatus)
  31. {
  32. TCHAR wszAdapterKeyName[MAX_PATH];
  33. wszAdapterKeyName[0] = '\0';
  34.  
  35. wsprintf(wszAdapterKeyName,L"%s\\%s",wszCurrentCardIdxName);
  36.  
  37. HKEY hCardNameKey;
  38.  
  39. lStatus = RegOpenKey(
  40. HKEY_LOCAL_MACHINE,wszAdapterKeyName,&hCardNameKey);
  41.  
  42. if(ERROR_SUCCESS == lStatus)
  43. {
  44. TCHAR wszServiceNameGuid[MAX_PATH];
  45. TCHAR wszAdapterName[MAX_PATH];
  46.  
  47. DWORD dwSize = sizeof(wszServiceNameGuid);
  48. wszServiceNameGuid[0] = '\0';
  49. RegQueryValueEx(
  50. hCardNameKey,L"ServiceName",(LPBYTE)wszServiceNameGuid,&dwSize);
  51.  
  52. dwSize = sizeof(wszAdapterName);
  53. RegQueryValueEx(
  54. hCardNameKey,L"Description",(LPBYTE)wszAdapterName,&dwSize);
  55.  
  56. OutputDebugStringW(wszServiceNameGuid);
  57. OutputDebugStringW(L"\n");
  58.  
  59. RegCloseKey(hCardNameKey);
  60.  
  61. //Get parameters
  62. TCHAR wszCardParamKey[MAX_PATH];
  63. wszCardParamKey[0] = '\0';
  64. wsprintf(wszCardParamKey,TCPIP_ROOT,wszServiceNameGuid);
  65.  
  66. HKEY hParamKey = NULL;
  67.  
  68. lStatus = RegOpenKey(
  69. HKEY_LOCAL_MACHINE,wszCardParamKey,&hParamKey);
  70.  
  71. if(ERROR_SUCCESS == lStatus)
  72. {
  73. DWORD dwEnabledDHCP = 0L;
  74. DWORD dwDWSize = sizeof(DWORD);
  75. TCHAR wszStaticIP[32];
  76. TCHAR wszDHCPIP[32];
  77. DWORD dwIPSize = sizeof(wszDHCPIP);
  78.  
  79. ZeroMemory(wszDHCPIP,dwIPSize);
  80. ZeroMemory(wszStaticIP,dwIPSize);
  81.  
  82. lStatus = RegQueryValueEx(
  83. hParamKey,L"EnableDHCP",(LPBYTE)&dwEnabledDHCP,&dwDWSize);
  84.  
  85. if(SUCCEEDED(lStatus))
  86. {
  87. wprintf_s(L"Adapter : %s [%s] \n\tDHCP : %s\n",wszServiceNameGuid,wszAdapterName,dwEnabledDHCP
  88. ? L"Yes" : L"No");
  89. }
  90.  
  91. lStatus = RegQueryValueEx(
  92. hParamKey,L"IPAddress",(LPBYTE)&wszStaticIP,&dwIPSize);
  93.  
  94. if(SUCCEEDED(lStatus))
  95. {
  96. wprintf_s(L"\tConfigured IP Address : %s\n",wszStaticIP);
  97. }
  98.  
  99. dwIPSize = sizeof(wszDHCPIP);
  100. lStatus = RegQueryValueEx(
  101. hParamKey,L"DhcpIPAddress",(LPBYTE)&wszDHCPIP,&dwIPSize);
  102.  
  103. if(SUCCEEDED(lStatus))
  104. {
  105. wprintf_s(L"\tDHCP IP Address : %s\n",wszDHCPIP);
  106. }
  107.  
  108. wprintf_s(L"\n");
  109.  
  110. RegCloseKey(hParamKey);
  111. }
  112.  
  113. }
  114. }
  115. }
  116. }
  117.  
  118.  
  119. RegCloseKey(hNetCardsKey);
  120. }
  121.  
  122.  
  123. return 0;
  124. }

输出简单:

  1. Adapter : {6EC2554F-3359-43A2-AADB-57F427DC72FC} [Marvell Yukon 88E8072 PCI-E Gigabit Ethernet Controller]
  2. DHCP : No
  3. Configured IP Address : 192.168.5.10
  4. DHCP IP Address : 192.168.1.102
  5.  
  6. Adapter : {2A28BDA8-ED1D-4E6E-8990-485EE1836828} [Sony Ericsson Device 0016 USB Ethernet Emulation (NDIS 5)]
  7. DHCP : Yes
  8. Configured IP Address :
  9. DHCP IP Address : 0.0.0.0
  10.  
  11. Adapter : {491DC095-155F-4572-B975-2E1703C17632} [Microsoft Windows Mobile Remote Adapter]
  12. DHCP : Yes
  13. Configured IP Address :
  14. DHCP IP Address : 169.254.2.2
  15.  
  16. Adapter : {5F987E64-E804-42DA-9453-8E479B6FC835} [Broadcom 802.11b/g Network adapter]
  17. DHCP : Yes
  18. Configured IP Address :
  19. DHCP IP Address : 192.168.1.14

猜你在找的Java相关文章