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

📄 inetthread.cpp

📁 一些网络工具的源程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	PrintLine(inetparms,textbuf);

		
	values = list[1].value.asnValue.counter;
	wsprintf(textbuf,"Received HDR Errors \t%d",values);
	PrintLine(inetparms,textbuf);

		
	values = list[2].value.asnValue.counter;
	wsprintf(textbuf,"Received ADDR Errors \t%d",values);
	PrintLine(inetparms,textbuf);

	values = list[3].value.asnValue.counter;
	wsprintf(textbuf,"Datagrams Forwarded \t%d",values);
	PrintLine(inetparms,textbuf);
	

	values = list[4].value.asnValue.counter;
	wsprintf(textbuf,"Unknown Protos Received \t%d",values);
	PrintLine(inetparms,textbuf);

	
	values = list[5].value.asnValue.counter;
	wsprintf(textbuf,"Received Packets Discarded \t%d",values);
	PrintLine(inetparms,textbuf);

	
	values = list[6].value.asnValue.counter;
	wsprintf(textbuf,"Received Packets Delivered \t%d",values);
	PrintLine(inetparms,textbuf);

	
	values = list[7].value.asnValue.counter;
	wsprintf(textbuf,"Output Requests \t%d",values);
	PrintLine(inetparms,textbuf);

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

	
	values = list[9].value.asnValue.counter;
	wsprintf(textbuf,"Discarded Output Packets \t%d",values);
	PrintLine(inetparms,textbuf);

	
	values = list[10].value.asnValue.counter;
	wsprintf(textbuf,"Output Packet No Route \t%d",values);
	PrintLine(inetparms,textbuf);

	values = list[11].value.asnValue.counter;
	wsprintf(textbuf,"Reassembly Required \t%d",values);
	PrintLine(inetparms,textbuf);


	values = list[12].value.asnValue.counter;
	wsprintf(textbuf,"Reassembly Successful \t%d",values);
	PrintLine(inetparms,textbuf);

	values = list[13].value.asnValue.counter;
	wsprintf(textbuf,"Reassembly Failures \t%d",values);
	PrintLine(inetparms,textbuf);
//
	values = list[14].value.asnValue.counter;
	wsprintf(textbuf,"Successfully Fragmented \t%d",values);
	PrintLine(inetparms,textbuf);
//
	values = list[15].value.asnValue.counter;
	wsprintf(textbuf,"Failing Fragmentation \t%d",values);
	PrintLine(inetparms,textbuf);

	values = list[16].value.asnValue.counter;
	wsprintf(textbuf,"Fragments Created \t%d",values);
	PrintLine(inetparms,textbuf);

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

}

BOOL CInetThread::DoRouteTable(CInetThreadParms *inetparms)
{
	int requestType;
	AsnInteger errorStatus;
	AsnInteger errorIndex;
	UINT ids_iproutes[8] = {1,3,6,1,2,1,4,21};
	AsnObjectIdentifier saveobj;
	RFC1157VarBind Getnextlist[1];
	RFC1157VarBindList Getnextbindlist = {Getnextlist,1};


	BOOL rc;
	CHAR textbuf[255];



	// pick up all the tcp connections
	Make_Oid(&Getnextlist[0].name,8,ids_iproutes);

    Getnextlist[0].value.asnType = ASN_NULL;
   
      
    requestType = ASN_RFC1157_GETNEXTREQUEST;

	strcpy(textbuf,"Routing Table Information");
	PrintLine(inetparms,textbuf);
	PrintLine(inetparms,":");
	strcpy(textbuf,
	"Net Address\tMask Address\tGateway Address\tInterface");
	PrintLine(inetparms,textbuf);

   
    while(1)
	{

        
        rc = (*SnmpExtensionQuery)(requestType, &Getnextbindlist,
                           &errorStatus, &errorIndex);

		if (!rc)

            {
            // The API is indicating an error.

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

            PrintLine(inetparms,textbuf);

            break;
            }
        else
            {
            // The API succeeded, errors may be indicated from the remote
            // agent.


            // Test for end of subtree or end of MIB.

            if (errorStatus == SNMP_ERRORSTATUS_NOSUCHNAME)
			{
			
				break;
			}
			
			if (Getnextlist[0].value.asnType == 
				ASN_INTEGER)
			{
				
				break;

			}



            // Test for general error conditions or sucesss.

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

				PrintLine(inetparms,textbuf);
				break;
			}
            else
			{
				PrintRouteInfo(inetparms,&Getnextlist[0].name);
				
			}

		} // end if

		if (bKill)
		{
			Free_Var(&Getnextlist[0]);
			PrintLine(inetparms,"Netstat Interupt!");
			break;
		}
		SnmpUtilOidCpy(&saveobj,&Getnextlist[0].name);
			         
		Free_Var(&Getnextlist[0]);
	
		Make_Oid(&Getnextlist[0].name,saveobj.idLength,saveobj.ids);	
		

		Getnextlist[0].value.asnType = ASN_NULL;
		SnmpUtilOidFree(&saveobj);
	
        
	} // end while()

	PrintLine(inetparms,":");
	return TRUE;

}

BOOL CInetThread::PrintRouteInfo(CInetThreadParms *inetparms,AsnObjectIdentifier *obj)
{
	//struct hostent *resolve_addr;
	INT ipvarbinds = 5;
	
	INT q;
	AsnInteger metric;
	

	AsnInteger errorStatus;
	AsnInteger errorIndex;

	RFC1157VarBind iplist[5];
	RFC1157VarBindList ipbindlist = {iplist,ipvarbinds};
	RFC1157VarBind iflist[1];
	RFC1157VarBindList ifbindlist = {iflist,1};
	UINT ifreq[11] = {1,3,6,1,2,1,2,2,1,6,0};
	INT reqids[5] = {1,2,3,7,11};
	CHAR textbuf[255];
	BYTE *routes;
	u_long interfaceaddr;
	u_long gatewayaddr;
	u_long netaddr;
	u_long maskaddr;
	CHAR szinterfaceaddr[128];
	CHAR szgatewayaddr[128];
	CHAR sznetaddr[128];
	CHAR szmaskaddr[128];
	CHAR *szTempName;
	struct in_addr convaddr;
	int rc;



	for(q = 0; q<ipvarbinds; q++)   // for for #of var binds
	{
		
		Make_Oid(&iplist[q].name,obj->idLength,obj->ids);
		iplist[q].name.ids[9] = reqids[q];
		iplist[q].value.asnType = ASN_NULL;
	}

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


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

        PrintLine(inetparms,textbuf);

        return FALSE;
	}
	//
	// set up call for interface mib physaddr
	//

	ifreq[10] = iplist[1].value.asnValue.number;
	Make_Oid(&iflist[0].name,11,ifreq);
	iflist[0].value.asnType = ASN_NULL;

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


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

        PrintLine(inetparms,textbuf);

        return FALSE;
	}

	//
	// if physaddr exists use it else use gateway
	//
	if (iflist[0].value.asnValue.string.length != 0)
	{
		routes = iflist[0].value.asnValue.string.stream;
		
	}
	else
	{
		routes = iplist[3].value.asnValue.string.stream;
		
	}
	interfaceaddr = (*routes<<24) | (*(routes+1)<<16) |
						 (*(routes+2)<<8) | *(routes+3);


	//
	// build connstate table to look up the name. 
	// convert the ip addr from BYTE* to u_long then inet_ntoa
	// the ports are int values.
	//
	

	

	
	// local address
	routes = iplist[0].value.asnValue.string.stream;

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

	netaddr = (*routes<<24) | (*(routes+1)<<16) |
						 (*(routes+2)<<8) | *(routes+3);
				
	
	// gateway address

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

	// mask address

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

	 
	metric = iplist[2].value.asnValue.number;

	gatewayaddr = ntohl(gatewayaddr);
	maskaddr = ntohl(maskaddr);
	netaddr = ntohl(netaddr);
	interfaceaddr = ntohl(interfaceaddr);

	convaddr.s_addr = maskaddr;
	szTempName = inet_ntoa(convaddr);
	strcpy(szmaskaddr ,szTempName);

	//
	
		
	convaddr.s_addr = gatewayaddr;
	szTempName = inet_ntoa(convaddr);
	strcpy(szgatewayaddr,szTempName);

	convaddr.s_addr = netaddr;
	szTempName = inet_ntoa(convaddr);
	strcpy(sznetaddr ,szTempName);

	convaddr.s_addr = interfaceaddr;
	szTempName = inet_ntoa(convaddr);
	strcpy(szinterfaceaddr ,szTempName);



		

	wsprintf(textbuf,"%s \t%s \t%s \t%s",
		sznetaddr,
		szmaskaddr,
		szgatewayaddr,
		szinterfaceaddr);
		//metric);

	PrintLine(inetparms,textbuf);

		
	for(int x=0; x<ipvarbinds; x++)
	{
		Free_Var(&iplist[x]);
	}

	Free_Var(&iflist[0]);
	return TRUE;

}

BOOL CInetThread::DoTcpStats(CInetThreadParms *inetparms)
{
	int numvarbinds = 8;
	DWORD values;
	CHAR textbuf[256];
	int startpt = 4;  // start 1 less makes logic better



	AsnInteger errorStatus;
	AsnInteger errorIndex;
	
	RFC1157VarBind list[8];
	RFC1157VarBindList bindlist = {list,8};
	UINT ids_tcpstats[9] = {1,3,6,1,2,1,6,0,0};
	int rc;

     
	
    for(int q = 0; q<numvarbinds; q++)   // for for #of var binds
	{
		ids_tcpstats[7] = ++startpt;  // plug byte 7
		Make_Oid(&list[q].name,9,ids_tcpstats);
		list[q].value.asnType = ASN_NULL;
	}

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

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

        PrintLine(inetparms,textbuf);

        return FALSE;
	}
	
	PrintLine(inetparms,"TCP Statistics:");
	  // Set the value "active opens"
	values = list[0].value.asnValue.counter;
	  
	wsprintf(textbuf,"Active opens \t%d",values);
	PrintLine(inetparms,textbuf);
	  
	
	// Set the value "passive opens"
	values = list[1].value.asnValue.counter;
	wsprintf(textbuf,"Passive opens \t%d",values);
	PrintLine(inetparms,textbuf);

	  

	  // Set the value "attempts failed
	values = list[2].value.asnValue.counter;
	wsprintf(textbuf,"Attempts Failed \t%d",values);
	PrintLine(inetparms,textbuf);
	

	  // set the value "ressets established"
	values = list[3].value.asnValue.counter;
	wsprintf(textbuf,"Resets Established \t%d",values);
	PrintLine(inetparms,textbuf);
	
	  
	// Set  value "connections currently established"
	// check guage
	values = list[4].value.asnValue.counter;
	wsprintf(textbuf,"Current Sessions Established \t%d",values);
	PrintLine(inetparms,textbuf);
	

	  // Set value "tcp in segs"
	values = list[5].value.asnValue.counter;
	wsprintf(textbuf,"Segments Received \t%d",values);
	PrintLine(inetparms,textbuf);
	

	// Set the "tcp out segs".
	values = list[6].value.asnValue.counter;
	wsprintf(textbuf,"Segments Sent \t%d",values);
	PrintLine(inetparms,textbuf);
	
  
	  // set retrans
	values = list[7].value.asnValue.counter;
	wsprintf(textbuf,"Retransmitted Segments \t%d",values);
	PrintLine(inetparms,textbuf);
	
	PrintLine(inetparms,":");

	for(int x=0; x<numvarbinds; x++)
		Free_Var(&list[x]);

	return TRUE;

}

BOOL CInetThread::DoUdpStats(CInetThreadParms *inetparms)
{
	int numvarbinds = 4;
	DWORD values;
	CHAR textbuf[256];
	int startpt = 0;  // start 1 less makes logic better
	

	int rc;

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

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

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

        PrintLine(inetparms,textbuf);

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

		
	values = list[1].value.asnValue.counter;
	wsprintf(textbuf,"No Ports \t%d",values);
	PrintLine(inetparms,textbuf);

		
	values = list[2].value.asnValue.counter;
	wsprintf(textbuf,"Receive Errors \t%d",values);
	PrintLine(inetparms,textbuf);

	values = list[3].value.asnValue.counter;
	wsprintf(textbuf,"Datagrams Sent \t%d",values);
	PrintLine(inetparms,textbuf);
	

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

	return TRUE;

	

}

BOOL CInetThread::CleanUp()
{
	FreeLibrary(inetdll);
	WSACleanup();
	return TRUE;


}

void CInetThread::Kill()
{
	bKill = TRUE;

}

⌨️ 快捷键说明

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