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

📄 inetthread.cpp

📁 一些网络工具的源程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		// the ports are int values.
		//
		

		dispstate = tcplist[0].value.asnValue.number;    // State 

		
		// local address
		routes = tcplist[1].value.asnValue.string.stream;

		//
		// convert to ULONG leave net order in tact
		//

		localaddr = (*routes<<24) | (*(routes+1)<<16) |
							 (*(routes+2)<<8) | *(routes+3);
					
		//values1 = list[1].value.asnValue.;
		// local port
		localport = tcplist[2].value.asnValue.number;

		// remote address

		routes = tcplist[3].value.asnValue.string.stream;
		remoteaddr = (*routes<<24) | (*(routes+1)<<16) |
							 (*(routes+2)<<8) | *(routes+3);
		

		localaddr = ntohl(localaddr);
		remoteaddr = ntohl(remoteaddr);

		convaddr.s_addr = localaddr;
		szTempName = inet_ntoa(convaddr);
		strcpy(szlocaladdr,szTempName);

		convaddr.s_addr = remoteaddr;
		szTempName = inet_ntoa(convaddr);
		strcpy(szremoteaddr,szTempName);

		if (inetparms->resolveaddrs)
		{
			rc = strncmp(szlocaladdr,"127",3);
			if ((localaddr == INADDR_ANY) ||  //0.0.0.0
				(rc == 0))
				 
			{
	     		 gethostname(szlocalhost,sizeof(szlocalhost));
				 strcpy(szlocaladdr,szlocalhost);
			}
			else
			{
				resolve_addr = gethostbyaddr((CHAR *)&localaddr,
												4,AF_INET);
				if (resolve_addr)
					strcpy(szlocaladdr,resolve_addr->h_name);
			}

			if (remoteaddr != INADDR_ANY)
			{
				remoteport = tcplist[4].value.asnValue.number;
				resolve_addr = gethostbyaddr((CHAR *)&remoteaddr,
												4,AF_INET);
			    if (resolve_addr)
					strcpy(szremoteaddr,resolve_addr->h_name);
			}
			else
				remoteport = 0;


		}
			// remote port
		
		


		

		wsprintf(textbuf,"TCP     %s:%d \t%s:%d \t%s",
			szlocaladdr,
			localport,
			szremoteaddr,
			remoteport,
			StateTable[dispstate - 1].state);

		PrintLine(inetparms,textbuf);

			
		for(int x=0; x<tcpvarbinds; x++)
		Free_Var(&tcplist[x]);

		return TRUE;
	} // end if TCP

	rc = strcmp(conntype,"UDP");
	if (rc == 0)
	
	{
		for(q = 0; q<udpvarbinds; q++)   // for for #of var binds
		{
			
			Make_Oid(&udplist[q].name,obj->idLength,obj->ids);
			udplist[q].name.ids[9] = q+1;
			udplist[q].value.asnType = ASN_NULL;
		}
	
	  
		rc = (*SnmpExtensionQuery)(ASN_RFC1157_GETREQUEST,
						&udpbindlist,
						&errorStatus,
						&errorIndex);


		if (!rc)

            {
            // The API is indicating an error.

            wsprintf(textbuf,"SNMP Error Status = %d Index = %d",
						errorStatus,errorIndex);

            PrintLine(inetparms,textbuf);

            return FALSE;
            }
		// local address
		routes = udplist[0].value.asnValue.string.stream;

		//
		// convert to ULONG leave net order in tact
		//

		localaddr = (*routes<<24) | (*(routes+1)<<16) |
							 (*(routes+2)<<8) | *(routes+3);
					

		// local port
		localport = udplist[1].value.asnValue.number;

		

		localaddr = ntohl(localaddr);
		

		convaddr.s_addr = localaddr;
		szTempName = inet_ntoa(convaddr);
		strcpy(szlocaladdr,szTempName);

		strcpy(szremoteaddr,"*:*");

		if (inetparms->resolveaddrs)
		{
			rc = strncmp(szlocaladdr,"127",3);
			if ((localaddr == INADDR_ANY) ||  //0.0.0.0
				(rc == 0))
				 
			{
	     		 gethostname(szlocalhost,sizeof(szlocalhost));
				 strcpy(szlocaladdr,szlocalhost);
			}
			else
			{
				resolve_addr = gethostbyaddr((CHAR *)&localaddr,
												4,AF_INET);
				if (resolve_addr)
					strcpy(szlocaladdr,resolve_addr->h_name);
			}
		}
		

		wsprintf(textbuf,"UDP    %s:%i\t%s",
			szlocaladdr,
			localport,
			szremoteaddr);
		

		PrintLine(inetparms,textbuf);

			
		for(int x=0; x<udpvarbinds; x++)
		Free_Var(&udplist[x]);

		return TRUE;
	} // end if UDP

	// no type 
	return FALSE;

}

BOOL CInetThread::PrintLine(CInetThreadParms *inetparms,
							CHAR * line)
{
	::SendMessage(inetparms->m_hwndNotifyInetDone,
				WM_USER_INET_PRINT, 0, (LONG)line);

	return TRUE;
}

BOOL CInetThread::DoIcmpStats(CInetThreadParms *inetparms)
{

	int numvarbinds = 26;
	DWORD value1;
	DWORD value2;
	DWORD values;
	CHAR textbuf[256];
	int startpt = 0;  // start 1 less makes logic better
	


	AsnInteger errorStatus;
	AsnInteger errorIndex;
	
	RFC1157VarBind list[26];
	RFC1157VarBindList bindlist = {list,26};
	UINT ids_icmpstats[9] = {1,3,6,1,2,1,5,0,0};
	int q;
	int rc;
	
	
    for(q = 0; q<numvarbinds; q++)   // for for #of var binds
	{
		ids_icmpstats[7] = ++startpt;  // plug byte 7
		Make_Oid(&list[q].name,9,ids_icmpstats);
		list[q].value.asnType = ASN_NULL;
		
	}
	
	

	
	  
	rc = (*SnmpExtensionQuery)(ASN_RFC1157_GETREQUEST,
						&bindlist,
						&errorStatus,
						&errorIndex);

	if (!rc)
		{
            // The API is indicating an error.

            wsprintf(textbuf,"SNMP Error Status = %d Index = %d",
						errorStatus,errorIndex);

            PrintLine(inetparms,textbuf);

            return FALSE;
        }

	  
	wsprintf(textbuf,"ICMP Statistics:\tSend\tRecv");  
	PrintLine(inetparms,textbuf);

	value1 = list[13].value.asnValue.counter;
	value2 = list[0].value.asnValue.counter;
	wsprintf(textbuf,"MSGS \t%d\t%d",
			 value1,
			 value2);
	PrintLine(inetparms,textbuf);

	
		
	value1 = list[14].value.asnValue.counter;
	value2 = list[1].value.asnValue.counter;
	
	wsprintf(textbuf,"Errors \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	
	value1 = list[15].value.asnValue.counter;	
	value2 = list[2].value.asnValue.counter;
	wsprintf(textbuf,"Dest Unreach \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	value1 = list[16].value.asnValue.counter;	 
	value2 = list[3].value.asnValue.counter;
	wsprintf(textbuf,"Time Exceeded \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);


	values = list[17].value.asnValue.counter;	
	values = list[4].value.asnValue.counter;
	wsprintf(textbuf,"Parm Problems \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	
	value1 = list[18].value.asnValue.counter;
	value2 = list[5].value.asnValue.counter;
	wsprintf(textbuf,"Source Quenches \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	
	value1 = list[19].value.asnValue.counter;	
	value2 = list[6].value.asnValue.counter;
	wsprintf(textbuf,"Redirects \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);


	value1 = list[20].value.asnValue.counter; 	  
	value2 = list[7].value.asnValue.counter;
	wsprintf(textbuf,"Echos \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	value1 = list[21].value.asnValue.counter;
	value2 = list[8].value.asnValue.counter;
	wsprintf(textbuf,"Echo Replies \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	value1 = list[22].value.asnValue.counter;
	value2 = list[9].value.asnValue.counter;
	wsprintf(textbuf,"Timestamps \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	value1 = list[23].value.asnValue.counter;
	value2 = list[10].value.asnValue.counter;
	wsprintf(textbuf,"Timestamp Replies \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);
	
	value1 = list[24].value.asnValue.counter;
	value2 = list[11].value.asnValue.counter;
	wsprintf(textbuf,"Addr Mask Req \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	value1 = list[25].value.asnValue.counter;
	value2 = list[12].value.asnValue.counter;
	wsprintf(textbuf,"Addr Mask Replies \t%d\t%d",
			value1,
			value2);
	PrintLine(inetparms,textbuf);

	
	PrintLine(inetparms,":");
	
	for(int x=0; x<numvarbinds; x++)
		Free_Var(&list[x]);

	return TRUE;

}

BOOL CInetThread::DoIfStats(CInetThreadParms *inetparms)
{
	int numvarbinds = 12;
	AsnCounter values1;
	AsnCounter values2;
	AsnInteger numofinterfaces;
	CHAR textbuf[256];
	CHAR catbuf[256];
	int startpt = 9;  // start 1 less makes logic better
	
	UINT reqids[12] = {2,10,16,11,17,12,18,13,19,14,20,15};


	AsnInteger errorStatus;
	AsnInteger errorIndex;
	
	RFC1157VarBind list[12];
	RFC1157VarBindList bindlist = {list,12};

	//
	UINT ids_ifstats[11] = {1,3,6,1,2,1,2,2,1,0,0};
	//                                        x n
	//                           where x = mibtype (offset =9) 
	//                                 n = interface # (off = 10)
	UINT ifstatlen = 11;

	UINT ids_ifnumber[9] = {1,3,6,1,2,1,2,1,0};
	RFC1157VarBind Singlelist[1];
	RFC1157VarBindList Singlebindlist = {Singlelist,1};
	int q;
	int rc;
	

	//
	// get number of interfaces
	//

	Make_Oid(&Singlelist[0].name,9,ids_ifnumber);
	Singlelist[0].value.asnType = ASN_NULL;

	rc = (*SnmpExtensionQuery)(ASN_RFC1157_GETREQUEST,
						&Singlebindlist,
						&errorStatus,
						&errorIndex);
	

	if (!rc)
		{
            // The API is indicating an error.

            wsprintf(textbuf,"SNMP Error Status = %d Index = %d",
						errorStatus,errorIndex);

            PrintLine(inetparms,textbuf);

            return FALSE;
        }
	numofinterfaces = Singlelist[0].value.asnValue.number;
	Free_Var(&Singlelist[0]);

	wsprintf(textbuf,"Interface Statistics:");  
	PrintLine(inetparms,textbuf);
	
	while(numofinterfaces)
	{

	

		for(q = 0; q<numvarbinds; q++)   // for for #of var binds
		{
			ids_ifstats[9] = reqids[q];
			ids_ifstats[10] = numofinterfaces;  
			Make_Oid(&list[q].name,ifstatlen,ids_ifstats);
			list[q].value.asnType = ASN_NULL;
		}
	
	  
		rc = (*SnmpExtensionQuery)(ASN_RFC1157_GETREQUEST,
						&bindlist,
						&errorStatus,
						&errorIndex);

		if (!rc)
			{
            // The API is indicating an error.

            wsprintf(textbuf,"SNMP Error Status = %d Index = %d",
						errorStatus,errorIndex);

            PrintLine(inetparms,textbuf);

            return FALSE;
            }



	
		
		lstrcpyn(textbuf,
				(LPCTSTR)list[0].value.asnValue.string.stream,
				list[0].value.asnValue.string.length+1);
		wsprintf(catbuf,"%s\tSend\tRecv",textbuf);
		PrintLine(inetparms,catbuf);
		PrintLine(inetparms," ");
	
	
		values1 = list[1].value.asnValue.counter;
		values2 = list[2].value.asnValue.counter;
		wsprintf(textbuf,"Bytes \t%d\t%d",
			values2,
			values1);
		
		PrintLine(inetparms,textbuf);

		
		values1 = list[3].value.asnValue.counter;
		values2 = list[4].value.asnValue.counter;
		wsprintf(textbuf,"Unicast \t%d\t%d",
			values2,
			values1);
		PrintLine(inetparms,textbuf);

		values1 = list[5].value.asnValue.counter;
		values2 = list[6].value.asnValue.counter;
		wsprintf(textbuf,"Non-Unicast \t%d\t%d",
			values2,
			values1);
		
		PrintLine(inetparms,textbuf);

		values1 = list[7].value.asnValue.counter;
		values2 = list[8].value.asnValue.counter;
		wsprintf(textbuf,"Discards \t%d\t%d",
			values2,
			values1);
		
		PrintLine(inetparms,textbuf);

		values1 = list[9].value.asnValue.counter;
		values2 = list[10].value.asnValue.counter;
		wsprintf(textbuf,"Errors \t%d\t%d",
			values2,
			values1);
		
		PrintLine(inetparms,textbuf);

		values1 = list[11].value.asnValue.counter;
		values2 = 0;
		wsprintf(textbuf,"UnknownProtos \t%d\t%d",
			values2,
			values1);
			
		PrintLine(inetparms,textbuf);
	
		for (int x=0;x<numvarbinds;x++)
		{
			Free_Var(&list[x]);
		}

		PrintLine(inetparms,":");
		numofinterfaces--;

	} // end WHILE

	return TRUE;

}

BOOL CInetThread::DoIpStats(CInetThreadParms *inetparms)
{

	int numvarbinds = 17;
	DWORD values;
	CHAR textbuf[256];
	int startpt = 0;  // start 1 less makes logic better
	
	int rc;

	AsnInteger errorStatus;
	AsnInteger errorIndex;
	
	RFC1157VarBind list[17];
	RFC1157VarBindList bindlist = {list,17};
	UINT ids_ipstats[9] = {1,3,6,1,2,1,4,0,0};
	UINT ids_ipvals[17] = {3,4,5,6,7,8,9,10,11,12,14,15,
						   16,17,18,19,23};
	int q;
	
	
    for(q = 0; q<numvarbinds; q++)   // for for #of var binds
	{
		ids_ipstats[7] = ids_ipvals[q];  // plug byte 7
		Make_Oid(&list[q].name,9,ids_ipstats);
		list[q].value.asnType = ASN_NULL;
		
	}
	
	

	
	  
	rc = (*SnmpExtensionQuery)(ASN_RFC1157_GETREQUEST,
						&bindlist,
						&errorStatus,
						&errorIndex);

	if (!rc)
		{
            // The API is indicating an error.

            wsprintf(textbuf,"SNMP Error Status = %d Index = %d",
						errorStatus,errorIndex);

            PrintLine(inetparms,textbuf);

            return FALSE;
        }
	  
	  
	PrintLine(inetparms,"IP Statistics:");
	values = list[0].value.asnValue.counter;
	wsprintf(textbuf,"Packets Received \t%d",values);

⌨️ 快捷键说明

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