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