⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datastruct.cpp

📁 IPScan 这是一段简单的IP扫描代码
💻 CPP
字号:
#include "Stdafx.h"
#include "DataStruct.h"

WCHAR		AdapterList[Max_Num_Adapter][256];	// 网卡的名称集合
UCHAR		MACAddress[6];						// MAC地址
PARASEND	pmSend;								// 用作线程间的参数传递
int			iHostCount = 0;						// 局域网内的主机个数

typedef int (CALLBACK* DHCPNOTIFYPROC)(LPWSTR, LPWSTR, BOOL, DWORD, DWORD, DWORD, int);

BOOL WideCharToANSI(char *pDst, USHORT *pSrc)
{
	USHORT	*p;
	char	*q;		
	for (p = pSrc, q = pDst; *p != '\0'; p++, q++)
	{
		if (*p > 127)
			return FALSE;
		else
			*q = (char)(*p);
	}
	*q = '\0';
	return TRUE;
}

void ULToString(TCHAR *pDst, ULONG *pUL)
{
	UCHAR *pSrc = (UCHAR *)pUL;
	_stprintf(pDst, _T("%d.%d.%d.%d"), pSrc[0], pSrc[1], pSrc[2], pSrc[3]);
}

// 将网卡名称转换成描述,若成功,返回TRUE,否则返回FALSE;
BOOL NameToDesc(TCHAR *pDsc, WCHAR *pName)
{
	TCHAR	szTemp[256] = _T("\\Device\\");
	WCHAR	*p = pName;
	TCHAR	AdapName[256];
	TCHAR	szBuffer[256];
	LONG	Status;
	DWORD	dim;
	HKEY	AdapKey, OneAdapKey, LinkageKey;
	int		i = 0;
	
	while (*p != '{')
		p++;
#ifdef _UNICODE
	lstrcat(szTemp, p);
#else
	TCHAR szANSITemp[256];
	WideCharToANSI(szANSITemp, p);
	lstrcat(szTemp, szANSITemp);

#endif
	Status = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		_T("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"),
		0, KEY_READ, &AdapKey);
	if (Status != ERROR_SUCCESS)
		return FALSE;
	
	// 枚举Adapkey下面的所有键
	while (RegEnumKey(AdapKey, i, AdapName, sizeof(AdapName) / 2) == ERROR_SUCCESS)
	{
		Status = RegOpenKeyEx(AdapKey, AdapName, 0, KEY_READ, &OneAdapKey);
		if (Status != ERROR_SUCCESS)
		{
			RegCloseKey(AdapKey);
			return FALSE;
		}
		Status = RegOpenKeyEx(OneAdapKey, _T("Linkage"), 0, KEY_READ, &LinkageKey);
		if (Status != ERROR_SUCCESS)
		{
			RegCloseKey(OneAdapKey);
			RegCloseKey(AdapKey);
			return FALSE;
		}
		dim = sizeof(szBuffer);
		Status = RegQueryValueEx(LinkageKey, _T("Export"), NULL, NULL, (UCHAR *)szBuffer, &dim);
		if (Status != ERROR_SUCCESS || lstrcmp(szTemp, szBuffer) != 0)
		{
			RegCloseKey(LinkageKey);
			RegCloseKey(OneAdapKey);
			i++;
			continue;
		}
		else
		{
			dim = sizeof(szBuffer);
			Status = RegQueryValueEx(OneAdapKey, _T("DriverDesc"), NULL, NULL, (UCHAR *)szBuffer, &dim);
			if (Status != ERROR_SUCCESS)
			{
				RegCloseKey(LinkageKey);
				RegCloseKey(OneAdapKey);
				RegCloseKey(AdapKey);
				return FALSE;
			}
			else
			{
				RegCloseKey(LinkageKey);
				RegCloseKey(OneAdapKey);
				RegCloseKey(AdapKey);
				lstrcpy(pDsc, szBuffer);
				return TRUE;
			}
		}
	}
	RegCloseKey(AdapKey);
	return FALSE;
}

// 设置本地主机的IP地址
BOOL SetLocalIP(WCHAR *pAdapterName, ULONG ulIP, ULONG ulMask)
{
	TCHAR	szKeyName[256] = _T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\");
	WCHAR	*p = pAdapterName;
	TCHAR	szIP[17];
	HKEY	hKey;

	// 将IP地址转化为字符串
	memset(szIP, 0, sizeof(szIP));
	ULToString(szIP, &ulIP);
	// 找到注册表位置
	while (*p != '{')
		p++;
#ifndef _UNICODE
	TCHAR	szTemp[256];
	WideCharToANSI(szTemp, p);
	lstrcat(szKeyName, szTemp);
#else
	lstrcat(szKeyName, p);
#endif
	// 在注册表中设置IP地址
	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKeyName, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
		return FALSE;
	if (RegSetValueEx(hKey, _T("IPAddress"), 0, REG_MULTI_SZ, (PUCHAR)szIP, lstrlen(szIP) * 2 + 4) != ERROR_SUCCESS)
	{
		RegCloseKey(hKey);
		return FALSE;
	}
	RegCloseKey(hKey);

	// 调用DhcpNotifyConfigChange函数设置IP地址
	BOOL			bResult = FALSE;
	HINSTANCE		hDhcpDll;
	DHCPNOTIFYPROC	pDhcpNotifyProc;
	
	if ((hDhcpDll = LoadLibrary(_T("dhcpcsvc"))) == NULL)
		return FALSE;
	
	if ((pDhcpNotifyProc = (DHCPNOTIFYPROC)GetProcAddress(hDhcpDll, "DhcpNotifyConfigChange")) != NULL)
		if ((pDhcpNotifyProc)(NULL, p, TRUE, 0, ulIP, ulMask, 0) == ERROR_SUCCESS)
			bResult = TRUE;
	FreeLibrary(hDhcpDll);
	return bResult;
}

void GetMacFromString(UCHAR *pDst, TCHAR* pSrc)
{
	UCHAR	*q = pDst;
	TCHAR	*p = pSrc;
	while (*p != '\0')
	{
		if (*p == '-')
		{
			p++;
			continue;
		}
		switch(*p)
		{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			*q = (*p - '0') << 4;
			break;
		case 'a':
			*q = 10 * 16;
			break;
		case 'b':
			*q = 11 * 16;
			break;
		case 'c':
			*q = 12 * 16;
			break;
		case 'd':
			*q = 13 * 16;
			break;
		case 'e':
			*q = 14 * 16;
			break;
		case 'f':
			*q = 15 * 16;
			break;
		}
		p++;
		switch(*p)
		{
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			*q += (*p - '0');
			break;
		case 'a':
			*q += 10;
			break;
		case 'b':
			*q += 11;
			break;
		case 'c':
			*q += 12;
			break;
		case 'd':
			*q += 13;
			break;
		case 'e':
			*q += 14;
			break;
		case 'f':
			*q += 15;
			break;
		}
		p++;
		q++;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -