怎么修改IP地址?

时间:2022-05-08 22:39:33
准备一把百多台电脑重新设置固定IP,并记录下MAC地址,因一台一台地改的话太耗时间,想做个按顺序分配IP软件,但用什么方法可以改变IP并固定下来?

18 个解决方案

#1


没听说有过此类软件

#2


我是想做一个能在本机运行后,就能修改本机IP的软件,不知有没有这个函数。
以前记得在dos下好像有一个netsh能改变

#3


山寨的方法就是调用netsh来修改IP的。

#4


用system调用ipconfig命令修改ip

#5


楼上的,能详细些吗?

#6


可以参考
http://www.vckbase.com/document/viewdoc/?id=851

#7




Dim Num
Num=Inputbox ("请输入本机编号:"+chr(10)&chr(13)+"必须是1-244之间的三位'半角'数字!","IP修改器")
Dim Ipnum
Ipnum=Num 'IP为机器号(ip叠加100,不加就去掉+100)
Dim SubnetMask
SubnetMask="255.255.255.0" '子网掩码 按需更换
Dim Gateway
Gateway="192.168.1." '网关前3位 按需更换
Dim gatewayip
gatewayip="1" '网关最后1位 按需更换
dim Dns1
Dns1="219.149.194.55" '主DNS 按需更换
dim Dns2
Dns2="202.98.0.68" '次DNS 按需更换
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress = Array(Gateway&Ipnum)
strSubnetMask = Array(SubnetMask)
strGateway = Array(gateway&gatewayip)
strGatewayMetric = Array(1)
arrDNSServers = Array(Dns1,Dns2)
For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
errDNS=objNetAdapter.SetDNSServerSearchOrder(arrDNSServers)
 
Next
Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapterConfiguration")
objNetworkSettings.SetIPXVirtualNetworkNumber(Num)

把以上代码 另存为.VBS 
具体当地的DNS参数自己修改下 应该没问题吧
--reply by  CSDN Study Trial V1.0.1 (starts_2000)

#8


引用 6 楼 keiy 的回复:
可以参考
http://www.vckbase.com/document/viewdoc/?id=851


看了,源码是这样:


1.1 调用IP helper API取得适配器名称

ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大
{
delete pAdapterInfo;
pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
pAdapterInfoBkp = pAdapterInfo;
}
if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
{
do{ // 遍历所有适配器
if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) // 判断是否为以太网接口
{
// pAdapterInfo->Description 是适配器描述
// pAdapterInfo->AdapterName 是适配器名称
}
pAdapterInfo = pAdapterInfo->Next;
}while(pAdapterInfo);
}
delete pAdapterInfoBkp;


------------------------------------------------------------------------------------------------
第一句就搞不掂了,那个IP_ADAPTER_INFO 出错?要包含什么头文件才有它?

#9


引用 7 楼 danxiaogui0513 的回复:
VB code


Dim Num
Num=Inputbox ("请输入本机编号:"+chr(10)&chr(13)+"必须是1-244之间的三位'半角'数字!","IP修改器")
Dim Ipnum
Ipnum=Num 'IP为机器号(ip叠加100,不加就去掉+100)
Dim SubnetMask
SubnetMask="255.255.255.0" '子网掩码 按需更换
Dim……


是VB的代码吗?保存后运行就行了么?在windows7中可不可以?

#10


引用 8 楼 mmfeng 的回复:
第一句就搞不掂了,那个IP_ADAPTER_INFO 出错?要包含什么头文件才有它?


#include <iphlpapi.h>

链接的时候需要iphlpapi.lib

#11


多谢一下老妖先。
终于在网上找到了一份c++builder的代码,但有很多不明,请教一下各位。以下把所有代码都贴上:

typedef int (CALLBACK* DHCPNOTIFYPROC)(LPWSTR, LPWSTR, BOOL, DWORD, DWORD, DWORD, int);
typedef struct tagAdapterInfo
{
AnsiString strName;// 适配器名称
AnsiString strDriverDesc;// 适配器描述
AnsiString strIP;// IP地址
AnsiString strNetMask;// 子网掩码
AnsiString strNetGate;// 网关
}ADAPTER_INFO;
ADAPTER_INFO * AdapterInfoVector;
ADAPTER_INFO *pAI = new ADAPTER_INFO;
bool NotifyIPChange(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask)
{
bool bResult = false;
HINSTANCE hDhcpDll;
DHCPNOTIFYPROC pDhcpNotifyProc;
WCHAR wcAdapterName[256];
MultiByteToWideChar(CP_ACP, 0, lpszAdapterName, -1, wcAdapterName,256);
if((hDhcpDll = LoadLibrary("dhcpcsvc")) == NULL)
return false;

if((pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, "DhcpNotifyConfigChange")) != NULL)
if((pDhcpNotifyProc)(NULL, wcAdapterName, TRUE, nIndex, inet_addr(pIPAddress), inet_addr(pNetMask), 0) == ERROR_SUCCESS)
bResult = true;
 FreeLibrary(hDhcpDll);
return bResult;
};
//---------------------------------------------------------- -------
//   得到注册表中的IP信息
//   nIndex暂时未处理
//---------------------------------------------------------- -------
bool RegGetIP(ADAPTER_INFO *pAI, LPCTSTR lpszAdapterName)
{
//ASSERT(pAI);
HKEY hKey;
AnsiString strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Int erfaces\\";
strKeyName += lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName.c_str(),
0,
KEY_READ,
&hKey) != ERROR_SUCCESS)
return false;
unsigned char szData[256];
DWORD dwDataType, dwBufSize;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "IPAddress", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
pAI->strIP = (LPCTSTR)szData;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "SubnetMask", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
pAI->strNetMask = (LPCTSTR)szData;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "DefaultGateway", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
pAI->strNetGate = (LPCTSTR)szData;
RegCloseKey(hKey);
return true;
}

//---------------------------------------------------------- -------
//   设置注册表中的IP信息
//---------------------------------------------------------- -------

bool RegSetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
HKEY hKey;
AnsiString strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Int erfaces\\";
strKeyName += lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName.c_str(),
0,
KEY_WRITE,
&hKey) != ERROR_SUCCESS)
return false;
char mszIPAddress[100];
char mszNetMask[100];
char mszNetGate[100];
strncpy(mszIPAddress, pIPAddress, 98);
strncpy(mszNetMask, pNetMask, 98);
strncpy(mszNetGate, pNetGate, 98);
int nIP, nMask, nGate;
nIP = strlen(mszIPAddress);
nMask = strlen(mszNetMask);
nGate = strlen(mszNetGate);
*(mszIPAddress + nIP + 1) = 0x00;
nIP += 2;
*(mszNetMask + nMask + 1) = 0x00;
nMask += 2;
*(mszNetGate + nGate + 1) = 0x00;
nGate += 2;
RegSetValueEx(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char*)mszIPAddress, nIP);
RegSetValueEx(hKey, "SubnetMask", 0, REG_MULTI_SZ, (unsigned char*)mszNetMask, nMask);
RegSetValueEx(hKey, "DefaultGateway", 0, REG_MULTI_SZ, (unsigned char*)mszNetGate, nGate);
RegCloseKey(hKey);
return true;
};



bool GetAdapterInfo()
{
// 这里的代码适合WINDOWS2000,对于NT需要读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards
HKEY hKey, hSubKey, hNdiIntKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}",
0,KEY_READ,&hKey) != ERROR_SUCCESS)
return false;
DWORD dwIndex = 0;
DWORD dwBufSize = 256;
DWORD dwDataType;
char szSubKey[256];
unsigned char szData[256];
while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
   {
   if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
 {
dwBufSize = 256;
if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
if(strcmp((char*)szData, "ethernet") == 0)//   判断是不是以太网卡
{
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{//ADAPTER_INFO *pAI = new ADAPTER_INFO;
pAI->strDriverDesc = (LPCTSTR)szData;
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
pAI->strName = (LPCTSTR)szData;
 RegGetIP(pAI, (LPCTSTR)szData);
}
//ShowMessage(pAI->strName+","+pAI->strDriverDesc+","+pAI->strIP+","+pAI->strNetMask+","+pAI->strNetGate);
AdapterInfoVector=pAI;// 加入到容器中
}
}
}
RegCloseKey(hNdiIntKey);
}
RegCloseKey(hSubKey);
}
dwBufSize = 256;
}/* end of while */
RegCloseKey(hKey);
return true;
};
//---------------------------------------------------------- -------
//   设置IP地址
//   如果只绑定一个IP,nIndex = 0,暂时未处理一个网卡绑定多个地址
//---------------------------------------------------------- -------

bool SetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
if(!RegSetIP(lpszAdapterName, nIndex, pIPAddress, pNetMask, pNetGate))
return false;
if(!NotifyIPChange(lpszAdapterName, nIndex, pIPAddress, pNetMask))
 return false;
 return true;
};



#12


最后是调用

code=C/C++]
if(GetAdapterInfo())
{
pAI->strIP.c_str();
pAI->strNetMask.c_str();
pAI->strNetGate="10.10.0.253";
if(SetIP(pAI->strName.c_str(), 0, pAI->strIP.c_str(),
pAI->strNetMask.c_str(), pAI->strNetGate.c_str()) == TRUE)
ShowMessage("设置IP地址成功!");
else
ShowMessage("设置IP地址失败!");
}
else
{
 ShowMessage("清检查是否有网卡");
};[[/code]


现先问一个问题,在windows7中这段代码可以用吗?最后这个调用好像不能设置DNS,如果要设置DNS、子网掩码、网关要如何做?

#13


从管理的角度而言,这样编程开发工具有点不太好。
你可以自己架设一个DNS,或者考虑使用域模式。

#14


这样让IP绑定MAC,通过路由可以读取到所在局域网的电脑MAC地址,然后进行顺利分配绑定地址

#15


访问了注册表,Win7下需要以管理员权限运行才可以

#16


从路由器里面设置 DHCP 就行了,   然后就是1个1个自动改了。。


路由器里面设置IP地址与MAC 绑定。。


#17


我要指定机器的IP的啊,让每台机都设定后不能再改IP。

#18


引用 17 楼 mmfeng 的回复:
我要指定机器的IP的啊,让每台机都设定后不能再改IP。


有权限一样还是可以改,弄个域服务器控制管理下,很方便的。
每个用户只给普通权限登录,本机只是USER用户,很方便。

#1


没听说有过此类软件

#2


我是想做一个能在本机运行后,就能修改本机IP的软件,不知有没有这个函数。
以前记得在dos下好像有一个netsh能改变

#3


山寨的方法就是调用netsh来修改IP的。

#4


用system调用ipconfig命令修改ip

#5


楼上的,能详细些吗?

#6


可以参考
http://www.vckbase.com/document/viewdoc/?id=851

#7




Dim Num
Num=Inputbox ("请输入本机编号:"+chr(10)&chr(13)+"必须是1-244之间的三位'半角'数字!","IP修改器")
Dim Ipnum
Ipnum=Num 'IP为机器号(ip叠加100,不加就去掉+100)
Dim SubnetMask
SubnetMask="255.255.255.0" '子网掩码 按需更换
Dim Gateway
Gateway="192.168.1." '网关前3位 按需更换
Dim gatewayip
gatewayip="1" '网关最后1位 按需更换
dim Dns1
Dns1="219.149.194.55" '主DNS 按需更换
dim Dns2
Dns2="202.98.0.68" '次DNS 按需更换
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress = Array(Gateway&Ipnum)
strSubnetMask = Array(SubnetMask)
strGateway = Array(gateway&gatewayip)
strGatewayMetric = Array(1)
arrDNSServers = Array(Dns1,Dns2)
For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
errDNS=objNetAdapter.SetDNSServerSearchOrder(arrDNSServers)
 
Next
Set objNetworkSettings = objWMIService.Get("Win32_NetworkAdapterConfiguration")
objNetworkSettings.SetIPXVirtualNetworkNumber(Num)

把以上代码 另存为.VBS 
具体当地的DNS参数自己修改下 应该没问题吧
--reply by  CSDN Study Trial V1.0.1 (starts_2000)

#8


引用 6 楼 keiy 的回复:
可以参考
http://www.vckbase.com/document/viewdoc/?id=851


看了,源码是这样:


1.1 调用IP helper API取得适配器名称

ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大
{
delete pAdapterInfo;
pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
pAdapterInfoBkp = pAdapterInfo;
}
if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
{
do{ // 遍历所有适配器
if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) // 判断是否为以太网接口
{
// pAdapterInfo->Description 是适配器描述
// pAdapterInfo->AdapterName 是适配器名称
}
pAdapterInfo = pAdapterInfo->Next;
}while(pAdapterInfo);
}
delete pAdapterInfoBkp;


------------------------------------------------------------------------------------------------
第一句就搞不掂了,那个IP_ADAPTER_INFO 出错?要包含什么头文件才有它?

#9


引用 7 楼 danxiaogui0513 的回复:
VB code


Dim Num
Num=Inputbox ("请输入本机编号:"+chr(10)&amp;chr(13)+"必须是1-244之间的三位'半角'数字!","IP修改器")
Dim Ipnum
Ipnum=Num 'IP为机器号(ip叠加100,不加就去掉+100)
Dim SubnetMask
SubnetMask="255.255.255.0" '子网掩码 按需更换
Dim……


是VB的代码吗?保存后运行就行了么?在windows7中可不可以?

#10


引用 8 楼 mmfeng 的回复:
第一句就搞不掂了,那个IP_ADAPTER_INFO 出错?要包含什么头文件才有它?


#include <iphlpapi.h>

链接的时候需要iphlpapi.lib

#11


多谢一下老妖先。
终于在网上找到了一份c++builder的代码,但有很多不明,请教一下各位。以下把所有代码都贴上:

typedef int (CALLBACK* DHCPNOTIFYPROC)(LPWSTR, LPWSTR, BOOL, DWORD, DWORD, DWORD, int);
typedef struct tagAdapterInfo
{
AnsiString strName;// 适配器名称
AnsiString strDriverDesc;// 适配器描述
AnsiString strIP;// IP地址
AnsiString strNetMask;// 子网掩码
AnsiString strNetGate;// 网关
}ADAPTER_INFO;
ADAPTER_INFO * AdapterInfoVector;
ADAPTER_INFO *pAI = new ADAPTER_INFO;
bool NotifyIPChange(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask)
{
bool bResult = false;
HINSTANCE hDhcpDll;
DHCPNOTIFYPROC pDhcpNotifyProc;
WCHAR wcAdapterName[256];
MultiByteToWideChar(CP_ACP, 0, lpszAdapterName, -1, wcAdapterName,256);
if((hDhcpDll = LoadLibrary("dhcpcsvc")) == NULL)
return false;

if((pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, "DhcpNotifyConfigChange")) != NULL)
if((pDhcpNotifyProc)(NULL, wcAdapterName, TRUE, nIndex, inet_addr(pIPAddress), inet_addr(pNetMask), 0) == ERROR_SUCCESS)
bResult = true;
 FreeLibrary(hDhcpDll);
return bResult;
};
//---------------------------------------------------------- -------
//   得到注册表中的IP信息
//   nIndex暂时未处理
//---------------------------------------------------------- -------
bool RegGetIP(ADAPTER_INFO *pAI, LPCTSTR lpszAdapterName)
{
//ASSERT(pAI);
HKEY hKey;
AnsiString strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Int erfaces\\";
strKeyName += lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName.c_str(),
0,
KEY_READ,
&hKey) != ERROR_SUCCESS)
return false;
unsigned char szData[256];
DWORD dwDataType, dwBufSize;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "IPAddress", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
pAI->strIP = (LPCTSTR)szData;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "SubnetMask", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
pAI->strNetMask = (LPCTSTR)szData;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "DefaultGateway", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
pAI->strNetGate = (LPCTSTR)szData;
RegCloseKey(hKey);
return true;
}

//---------------------------------------------------------- -------
//   设置注册表中的IP信息
//---------------------------------------------------------- -------

bool RegSetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
HKEY hKey;
AnsiString strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Int erfaces\\";
strKeyName += lpszAdapterName;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName.c_str(),
0,
KEY_WRITE,
&hKey) != ERROR_SUCCESS)
return false;
char mszIPAddress[100];
char mszNetMask[100];
char mszNetGate[100];
strncpy(mszIPAddress, pIPAddress, 98);
strncpy(mszNetMask, pNetMask, 98);
strncpy(mszNetGate, pNetGate, 98);
int nIP, nMask, nGate;
nIP = strlen(mszIPAddress);
nMask = strlen(mszNetMask);
nGate = strlen(mszNetGate);
*(mszIPAddress + nIP + 1) = 0x00;
nIP += 2;
*(mszNetMask + nMask + 1) = 0x00;
nMask += 2;
*(mszNetGate + nGate + 1) = 0x00;
nGate += 2;
RegSetValueEx(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char*)mszIPAddress, nIP);
RegSetValueEx(hKey, "SubnetMask", 0, REG_MULTI_SZ, (unsigned char*)mszNetMask, nMask);
RegSetValueEx(hKey, "DefaultGateway", 0, REG_MULTI_SZ, (unsigned char*)mszNetGate, nGate);
RegCloseKey(hKey);
return true;
};



bool GetAdapterInfo()
{
// 这里的代码适合WINDOWS2000,对于NT需要读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards
HKEY hKey, hSubKey, hNdiIntKey;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}",
0,KEY_READ,&hKey) != ERROR_SUCCESS)
return false;
DWORD dwIndex = 0;
DWORD dwBufSize = 256;
DWORD dwDataType;
char szSubKey[256];
unsigned char szData[256];
while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
   {
   if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
 {
dwBufSize = 256;
if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
if(strcmp((char*)szData, "ethernet") == 0)//   判断是不是以太网卡
{
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{//ADAPTER_INFO *pAI = new ADAPTER_INFO;
pAI->strDriverDesc = (LPCTSTR)szData;
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
{
pAI->strName = (LPCTSTR)szData;
 RegGetIP(pAI, (LPCTSTR)szData);
}
//ShowMessage(pAI->strName+","+pAI->strDriverDesc+","+pAI->strIP+","+pAI->strNetMask+","+pAI->strNetGate);
AdapterInfoVector=pAI;// 加入到容器中
}
}
}
RegCloseKey(hNdiIntKey);
}
RegCloseKey(hSubKey);
}
dwBufSize = 256;
}/* end of while */
RegCloseKey(hKey);
return true;
};
//---------------------------------------------------------- -------
//   设置IP地址
//   如果只绑定一个IP,nIndex = 0,暂时未处理一个网卡绑定多个地址
//---------------------------------------------------------- -------

bool SetIP(LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate)
{
if(!RegSetIP(lpszAdapterName, nIndex, pIPAddress, pNetMask, pNetGate))
return false;
if(!NotifyIPChange(lpszAdapterName, nIndex, pIPAddress, pNetMask))
 return false;
 return true;
};



#12


最后是调用

code=C/C++]
if(GetAdapterInfo())
{
pAI->strIP.c_str();
pAI->strNetMask.c_str();
pAI->strNetGate="10.10.0.253";
if(SetIP(pAI->strName.c_str(), 0, pAI->strIP.c_str(),
pAI->strNetMask.c_str(), pAI->strNetGate.c_str()) == TRUE)
ShowMessage("设置IP地址成功!");
else
ShowMessage("设置IP地址失败!");
}
else
{
 ShowMessage("清检查是否有网卡");
};[[/code]


现先问一个问题,在windows7中这段代码可以用吗?最后这个调用好像不能设置DNS,如果要设置DNS、子网掩码、网关要如何做?

#13


从管理的角度而言,这样编程开发工具有点不太好。
你可以自己架设一个DNS,或者考虑使用域模式。

#14


这样让IP绑定MAC,通过路由可以读取到所在局域网的电脑MAC地址,然后进行顺利分配绑定地址

#15


访问了注册表,Win7下需要以管理员权限运行才可以

#16


从路由器里面设置 DHCP 就行了,   然后就是1个1个自动改了。。


路由器里面设置IP地址与MAC 绑定。。


#17


我要指定机器的IP的啊,让每台机都设定后不能再改IP。

#18


引用 17 楼 mmfeng 的回复:
我要指定机器的IP的啊,让每台机都设定后不能再改IP。


有权限一样还是可以改,弄个域服务器控制管理下,很方便的。
每个用户只给普通权限登录,本机只是USER用户,很方便。