programmatically determine if ip address is assigned via dhcp or manually set in java

Title sums it up. Is there any way to discover if a local network interface has it's address assigned via DHCP or if it is statically set through java?

Answers


So, as you requested Win NT 'solution' only, here is my code.It lists network interfaces with current configured values.

Note EnableDHCP registry key value, I think this is the point.

As I already mentioned in comment under your question, you need as least simple JNI wrapper.

Hope this helps.

more info here : 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;
}

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

Sorry,No, I don't think so. you cannot do it via JAVA, since java's interface with the network of the OS is just the JVM. A jni can be summed up to do the task maybe.


Need Your Help

execvp failing with multiple or no arguments

c shell arguments exec execvp

I'm working on a pretty basic UNIX shell in C. In this project I am attempting to use fork() and execvp() to execute the actual shell commands. I'm running into an issue though, where it seems to w...

MIDIPacketList, numPackets is always 1

cocoa ipad midi sysex coremidi

I'm processing Midi on the iPad and everything is working fine and I can log everything that comes in and all works as expected. However, in trying to recieve long messages (ie Sysex), I can only ...