Programmatically determine whether to assign IP addresses through DHCP or manually set them in Java

The title summarizes it Is there any way to find out whether the local network interface has its address assigned through DHCP or statically set through Java?

Solution

Therefore, just as you only request win NT 'solution', this is my code It lists the network interfaces with the current configuration values

Note the DHCP registry key. I think that's the point

As I mentioned in your question comments, you need at least a simple JNI wrapper

I hope this will help

More information: 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,&dwCards,&dwMaxSubkeyNameLen,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",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",(LPBYTE)wszServiceNameGuid,&dwSize);

                        dwSize = sizeof(wszAdapterName);
                        RegQueryValueEx(
                            hCardNameKey,L"Description",(LPBYTE)wszAdapterName,&dwSize);

                        OutputDebugStringW(wszServiceNameGuid);
                        OutputDebugStringW(L"\n");

                        RegCloseKey(hCardNameKey);

                        //Get parameters
                        TCHAR wszCardParamKey[MAX_PATH];
                        wszCardParamKey[0] = '\0';
                        wsprintf(wszCardParamKey,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",(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",(LPBYTE)&wszStaticIP,&dwIPSize);

                            if(SUCCEEDED(lStatus))
                            {
                                wprintf_s(L"\tConfigured IP Address : %s\n",wszStaticIP);
                            }

                            dwIPSize = sizeof(wszDHCPIP);
                            lStatus = RegQueryValueEx(
                                hParamKey,L"DhcpIPAddress",(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;
}

Simple output:

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
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>