netsh to set IP address on vista..

P

pdabak

Hello,

I need to set the IP address of the network adapter given it's MAC
address.

To do this I use GetAdaptersInfo API from IPHLPAPI.DLL to enumerate
network adapters and then compare IP_ADAPTER_INFO.Address to the MAC
address I am looking for. Once I get a match, I extract
IP_ADAPTER_INFO.AdapterName and then I pass it to netsh command as
follows

netsh interface ip set address IP_ADAPTER_INFO.AdapterName static
10.6.36.159 255.255.0.0 10.6.0.1 1

The IP_ADAPTER_INFO.AdapterName is in the form of a GUID viz.
{650B810A-0C51-4147-B1C4-0076A36B1C5A}

This all works fine on Windows 2000/2003/XP. However on Vista, it
fails with the following error.

"The filename, directory name, or volume label syntax is incorrect."

It seems that vista only supports specifying connection name viz.
"Local Area Connection" and is not backward compatible.

Now the question I have is:

Is there any other way to map the MAC address OR AdapterName in GUID
format to connection name? I know that its possible to do so through
WMI, I want avoid using WMI. Since WMI is able to provide this
mapping, there must be some way to do it.

Thanks.
-Prasad
 
K

Kerry Brown

Hello,

I need to set the IP address of the network adapter given it's MAC
address.

To do this I use GetAdaptersInfo API from IPHLPAPI.DLL to enumerate
network adapters and then compare IP_ADAPTER_INFO.Address to the MAC
address I am looking for. Once I get a match, I extract
IP_ADAPTER_INFO.AdapterName and then I pass it to netsh command as
follows

netsh interface ip set address IP_ADAPTER_INFO.AdapterName static
10.6.36.159 255.255.0.0 10.6.0.1 1

The IP_ADAPTER_INFO.AdapterName is in the form of a GUID viz.
{650B810A-0C51-4147-B1C4-0076A36B1C5A}

This all works fine on Windows 2000/2003/XP. However on Vista, it
fails with the following error.

"The filename, directory name, or volume label syntax is incorrect."

It seems that vista only supports specifying connection name viz.
"Local Area Connection" and is not backward compatible.

Now the question I have is:

Is there any other way to map the MAC address OR AdapterName in GUID
format to connection name? I know that its possible to do so through
WMI, I want avoid using WMI. Since WMI is able to provide this
mapping, there must be some way to do it.


I'm not sure but I think you'd need to add the ipv4 parameter in there
somewhere. At a command prompt type "netsh interface ?" for details.
 
P

pdabak

I'm not sure but I think you'd need to add the ipv4 parameter in there
somewhere. At a command prompt type "netshinterface ?" for details.

--
Kerry Brown
Microsoft MVP - Shell/Userhttp://www.vistahelp.ca/phpBB2/- Hide quoted text -

- Show quoted text -

Hello,

I tried specifying ipv4 instead of ip as follows, however, it still
failed with the same error.

netsh interface ipv4 set address IP_ADAPTER_INFO.AdapterName static
10.6.36.159 255.255.0.0 10.6.0.1 1

I think that "netsh interface ip" is same as "netsh interface ipv4"
i.e. The default is always ipv4.

However, I noticed one interesting thing. On vista, one can specify
interface name OR interface index to "netsh interface ip set address"
command. So when I used following command, it worked.

netsh interface ip set address IP_ADAPTER_INFO.Index static
10.6.36.159 255.255.0.0 10.6.0.1 1

So basically I specified IP_ADAPTER_INFO.Index instead of
IP_ADAPTER_INFO.AdapterName and it worked. However, I am not sure if
this is the right way to do it?

I find adapter and interface terms being used interchangably and I
find it very confusing.

Thanks.
-Prasad
 
K

Kerry Brown

I'm not sure but I think you'd need to add the ipv4 parameter in there
somewhere. At a command prompt type "netshinterface ?" for details.

--
Kerry Brown
Microsoft MVP - Shell/Userhttp://www.vistahelp.ca/phpBB2/- Hide quoted
text -

- Show quoted text -

Hello,

I tried specifying ipv4 instead of ip as follows, however, it still
failed with the same error.

netsh interface ipv4 set address IP_ADAPTER_INFO.AdapterName static
10.6.36.159 255.255.0.0 10.6.0.1 1

I think that "netsh interface ip" is same as "netsh interface ipv4"
i.e. The default is always ipv4.

However, I noticed one interesting thing. On vista, one can specify
interface name OR interface index to "netsh interface ip set address"
command. So when I used following command, it worked.

netsh interface ip set address IP_ADAPTER_INFO.Index static
10.6.36.159 255.255.0.0 10.6.0.1 1

So basically I specified IP_ADAPTER_INFO.Index instead of
IP_ADAPTER_INFO.AdapterName and it worked. However, I am not sure if
this is the right way to do it?

I find adapter and interface terms being used interchangably and I
find it very confusing.


Interesting. Have you tried this on an XP computer to see if it's backwards
compatible?
 
P

pdabak

Hello,

I tried specifying ipv4 instead of ip as follows, however, it still
failed with the same error.

netshinterface ipv4 set address IP_ADAPTER_INFO.AdapterName static
10.6.36.159 255.255.0.0 10.6.0.1 1

I think that "netshinterface ip" is same as "netshinterface ipv4"
i.e. The default is always ipv4.

However, I noticed one interesting thing. Onvista, one can specify
interface name OR interface index to "netshinterface ip set address"
command. So when I used following command, it worked.

netshinterface ip set address IP_ADAPTER_INFO.Index static
10.6.36.159 255.255.0.0 10.6.0.1 1

So basically I specified IP_ADAPTER_INFO.Index instead of
IP_ADAPTER_INFO.AdapterName and it worked. However, I am not sure if
this is the right way to do it?

I find adapter and interface terms being used interchangably and I
find it very confusing.

Interesting. Have you tried this on an XP computer to see if it's backwards
compatible?

--
Kerry Brown
Microsoft MVP - Shell/Userhttp://www.vistahelp.ca/phpBB2/- Hide quoted text -

- Show quoted text -

Yes, there is no issue on XP. The "netsh interface ip set address
IP_ADAPTER_INFO.AdapterName static 10.6.36.159 255.255.0.0 10.6.0.1 1"
command works fine in XP.

Thanks.
-Prasad
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top