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

📄 myfunctions.h

📁 应用ARP结构的知识与WinPcap的发送和捕获功能
💻 H
字号:
/*******************************************************************************
 *	文件名称:myFunction.cpp
 *	摘    要:自定义的一些函数
 *	单    位:软件学院
 *	作    者:姚旺
 *	学    号:2120070369
 *	完成日期:2007年11月8日
 *******************************************************************************/




/******************
 * 定义常量:
 ******************/
#define IPTOSBUFFERS    12

namespace ArpWinPcap {
	using namespace System;

	/******************************
	 *摘自范例的转换值时用的函数
	 *****************************/
	char *iptos(u_long in)
{
	static char output[IPTOSBUFFERS][3*4+3+1];
	static short which;
	u_char *p;

	p = (u_char *)∈
	which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
	sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
	return output[which];
}




	/******************************
	 *摘自范例的转换值时用的函数
	 *****************************/
	char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)
	{
		socklen_t sockaddrlen;

		#ifdef WIN32
		sockaddrlen = sizeof(struct sockaddr_in6);
		#else
		sockaddrlen = sizeof(struct sockaddr_storage);
		#endif


		if(getnameinfo(sockaddr, 
			sockaddrlen, 
			address, 
			addrlen, 
			NULL, 
			0, 
			NI_NUMERICHOST) != 0) address = NULL;

		return address;
	}


	/**************************************************************************
	 * 本函数功能:分析用户输入的IP地址的合法性
	 * 输入参数: 
	 *		strIPAddr:	用户输入的IP地址
	 * 输出变量:
	 *		bool:		指示是否合法
	 *************************************************************************/
	bool fnAnalyzeIP(System::String ^strIPAddr)
	{
		array<System::String ^>^ strTmp={"."};
		unsigned char cTmp[4];
		strTmp=strIPAddr->Split(strTmp,System::StringSplitOptions::None);
		if(strTmp->Length!=4)
			return false;

		for(int i=0;i<4;i++)
		{
			try
			{
				System::Convert::ToByte(strTmp[i]);
			}
			catch(System::Exception^ e)
			{
				return false;
			}
		}
		return true;
	}


	/**************************************************************************
	 * 本函数功能:比较两IP地址大小
	 * 输入参数: 
	 *		strFir:	第一个IP地址
	 *		strSec:	第二个IP地址
	 * 输出变量:
	 *		bool:		指示是否第一个大于等于第二个
	 *************************************************************************/
	bool fnCompareNotLess(System::String ^strFir,System::String ^strSec)
	{
		array<System::String ^>^ strTmp1={"."};
		array<System::String ^>^ strTmp2={"."};
		array<System::Byte,2>^ cTmp=gcnew array<System::Byte,2>(2,4);
		array<System::UInt32>^ iTmp=gcnew array<System::UInt32>(2);
		strTmp1=strFir->Split(strTmp1,System::StringSplitOptions::None);
		strTmp2=strSec->Split(strTmp2,System::StringSplitOptions::None);
		for(int i=0,j=3;i<4;i++,j--)
		{
			cTmp[0,i]=System::Convert::ToByte(strTmp1[i]);
			cTmp[1,i]=System::Convert::ToByte(strTmp2[i]);
			iTmp[0]+=Convert::ToUInt32(cTmp[0,i])*Convert::ToUInt32(System::Math::Pow(256.0,(double)j));
			iTmp[1]+=Convert::ToUInt32(cTmp[1,i])*Convert::ToUInt32(System::Math::Pow(256.0,(double)j));
		}
		if(iTmp[0]>=iTmp[1])
			return true;
		else
			return false;
	}


	/**************************************************************************
	 * 本函数功能:使IP加一
	 * 输入参数: 
	 *		strIPAddr:	IP地址
	 * 输出变量:
	 *		String:	加一后的IP地址
	 *************************************************************************/
	System::String ^fnIncreIP(String ^strIPAddr)
	{
		array<System::String^>^ strTmp={"."};
		array<int>^ iIPAddr=gcnew array<int>(4);
		strTmp=strIPAddr->Split(strTmp,System::StringSplitOptions::RemoveEmptyEntries);
		bool bCarry=true;
		for(int i=3;i>=0;i--)
		{
			iIPAddr[i]=Convert::ToInt32(strTmp[i]);
			if(bCarry)
			{
				iIPAddr[i]++;
				if(iIPAddr[i]==256)
					iIPAddr[i]=0;
				else
					bCarry=false;
			}
			
		}
		return String::Format("{0}.{1}.{2}.{3}",iIPAddr[0],iIPAddr[1],iIPAddr[2],iIPAddr[3]);
	}






	/******************************************************
	 * 本函数用来在人为错误等非程序错误情况时弹出错误信息:
	 *****************************************************/
	System::Void fnErrorMsg(String ^strDescription)
	{
		System::Windows::Forms::MessageBox::Show(strDescription,"错误");
			
	}
}

⌨️ 快捷键说明

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