📄 inetthread.cpp
字号:
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 + -