vc 不重启改ip
来源:互联网 发布:广东环保网络问政平台 编辑:程序博客网 时间:2024/06/03 22:56
//--------要是不重启就能更改外网ip那就爽歪歪了#include "stdafx.h"#include <windows.h>#include <string>#include <iostream>#include <Winsock2.h>#pragma comment(lib,"Ws2_32.lib")using namespace std;void GetLanAdapterName( char* szLanAdapterName );BOOL RegIP( LPCTSTR lpszAdapterName, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate, LPCTSTR pDNSServer1, LPCTSTR pDNSServer2 );BOOL NotifyIPChange( LPCTSTR lpszAdapterName, int nIndex, LPCTSTR pIPAddress, LPCTSTR pNetMask );int main(){ char AdapterName[ MAX_PATH ] =""; GetLanAdapterName( AdapterName ); RegIP( AdapterName, "192.168.1.109","255.255.255.0", "192.168.1.1", "202.103.224.68", "202.103.225.68" ); NotifyIPChange( AdapterName, 0, "192.168.1.109", "192.168.1.1" ); return 0;}//读取注册表取得适配器名称 void GetLanAdapterName(char* szLanAdapterName){ 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; 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 ) { // szData 中便是适配器详细描述 dwBufSize = 256; if( ::RegQueryValueEx( hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize ) == ERROR_SUCCESS ) { //szData中便是适配器名称 strcpy( szLanAdapterName, (const char *)szData ); break; } } } } ::RegCloseKey( hNdiIntKey ); } ::RegCloseKey(hSubKey); } dwBufSize = 256; } /* end of while */ ::RegCloseKey(hKey);}BOOL RegIP( LPCTSTR lpszAdapterName, LPCTSTR pIPAddress, LPCTSTR pNetMask, LPCTSTR pNetGate, LPCTSTR pDNSServer1, LPCTSTR pDNSServer2 ){ HKEY hKey; string strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\"; strKeyName += lpszAdapterName; if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, strKeyName.c_str(), 0, KEY_WRITE, &hKey ) != ERROR_SUCCESS ) return FALSE; string DNSServer = pDNSServer1; DNSServer += ","; DNSServer += pDNSServer2; char mszIPAddress[ 100 ]; char mszNetMask[ 100 ]; char mszNetGate[ 100 ]; char mszDNSServer[ 100 ]; strncpy( mszIPAddress, pIPAddress, 98 ); strncpy( mszNetMask, pNetMask, 98 ); strncpy( mszNetGate, pNetGate, 98 ); strncpy( mszDNSServer, DNSServer.c_str(), 98 ); int nIP, nMask, nGate, nDNSServer; nIP = strlen( mszIPAddress ); nMask = strlen( mszNetMask ); nGate = strlen( mszNetGate ); nDNSServer = strlen( mszDNSServer ); *( mszIPAddress + nIP + 1 ) = 0x00; // REG_MULTI_SZ数据需要在后面再加个0 nIP += 2; *( mszNetMask + nMask + 1 ) = 0x00; nMask += 2; *( mszNetGate + nGate + 1 ) = 0x00; nGate += 2; *( mszDNSServer + nDNSServer + 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 ); ::RegSetValueEx( hKey, "NameServer", 0, REG_SZ, (unsigned char*)mszDNSServer, nDNSServer ); ::RegCloseKey(hKey); return TRUE;}//未公开函数DhcpNotifyConfigChange位于 dhcpcsvc.dll中. //原型声明typedef BOOL ( CALLBACK* DHCPNOTIFYPROC) ( LPWSTR lpwszServerName, // 本地机器为NULL LPWSTR lpwszAdapterName, // 适配器名称 BOOL bNewIpAddress, // TRUE表示更改IP DWORD dwIpIndex, // 指明第几个IP地址,如果只有该接口只有一个IP地址则为0 DWORD dwIpAddress, // IP地址 DWORD dwSubNetMask, // 子网掩码 int nDhcpAction // 对DHCP的操作 0:不修改, 1:启用 DHCP,2:禁用 DHCP); 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.dll") ) == 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;}
0 0
- vc 不重启改ip
- vc TCP/IP
- VC++ Ping IP地址
- VC 设置代理IP
- VC++IP控件赋值
- vc获取本地IP
- VC++ IP地址
- VC 获取域名IP
- VC获取IP地址
- vc 不重启切换IP地址
- VC++ 简单TCP/IP客户端
- VC 根据域名获取IP
- VC++ 获得主机名与IP
- vc下不重启改ip、网关、dns
- VC 获取IP host name
- VC++实现ip数据包分析
- VC获取外网IP
- VC获取外网IP
- python实现模拟按键,自动翻页看u17漫画
- 字符串的展开
- JAVA设计模式--代理模式(动态)(二)
- ListView的使用方法总结
- 关于editText.setOnFocusChangeListener不起作用
- vc 不重启改ip
- AspectJ学习过程
- 【LoadRunner】Web(HTTP/HTML)协议的关联
- 快学Scala第18章----高级类型
- 安卓中文组
- Java-1.5新特性之注解
- Codeforces Round #324 (Div. 2)C. Marina and Vasya
- C语言实现图的邻接矩阵和BFS DFS
- 搭建Spring MVC+ jdbcTemplate框架