设为首页 加入收藏

TOP

VC++实现获取所有的TCP与UDP链接(二)
2014-11-23 19:26:24 来源: 作者: 【 】 浏览:59
Tags:实现 获取 有的 TCP UDP 链接
);
for(UINT i = 0; i < pTcpTable->dwNumEntries; ++i)
{
// 状态
switch (pTcpTable->table[i].dwState)
{
case MIB_TCP_STATE_CLOSED:
strcpy(strState, "CLOSED");
break;
case MIB_TCP_STATE_TIME_WAIT:
strcpy(strState, "TIME_WAIT");
break;
case MIB_TCP_STATE_LAST_ACK:
strcpy(strState, "LAST_ACK");
break;
case MIB_TCP_STATE_CLOSING:
strcpy(strState, "CLOSING");
break;
case MIB_TCP_STATE_CLOSE_WAIT:
strcpy(strState, "CLOSE_WAIT");
break;
case MIB_TCP_STATE_FIN_WAIT1:
strcpy(strState, "FIN_WAIT1");
break;
case MIB_TCP_STATE_ESTAB:
strcpy(strState, "ESTAB");
break;
case MIB_TCP_STATE_SYN_RCVD:
strcpy(strState, "SYN_RCVD");
break;
case MIB_TCP_STATE_SYN_SENT:
strcpy(strState, "SYN_SENT");
break;
case MIB_TCP_STATE_LISTEN:
strcpy(strState, "LISTEN");
break;
case MIB_TCP_STATE_DELETE_TCB:
strcpy(strState, "DELETE");
break;
default:
printf("Error: unknown state!\n");
break;
}
// 本地地址
inadLocal.s_addr = pTcpTable->table[i].dwLocalAddr;

// 远程端口
if (strcmp(strState, "LISTEN") != 0)
{
dwRemotePort = pTcpTable->table[i].dwRemotePort;
}
else
dwRemotePort = 0;
// 远程IP地址
inadRemote.s_addr = pTcpTable->table[i].dwRemoteAddr;

strcpy(szLocalIp, inet_ntoa(inadLocal));
strcpy(szRemIp, inet_ntoa(inadRemote));
printf("%20s %10u %20s %10u %s\n",
szLocalIp, ntohs((unsigned short)(0x0000FFFF & pTcpTable->table[i].dwLocalPort)),
szRemIp, ntohs((unsigned short)(0x0000FFFF & dwRemotePort)),
strState);
}
MyFreeTcpTable(pTcpTable);
}

printf(" \n\n");

// 打印UDP监听表信息
PMIB_UDPTABLE pUdpTable = MyGetUdpTable(TRUE);
if(pUdpTable != NULL)
{
struct in_addr inadLocal;
printf("UDP TABLE\n");

printf("%20s %10s\n", "Loc Addr", "Loc Port");
for (UINT i = 0; i < pUdpTable->dwNumEntries; ++i)
{
inadLocal.s_addr = pUdpTable->table[i].dwLocalAddr;
// 打印出此入口的信息
printf("%20s %10u \n",
inet_ntoa(inadLocal), ntohs((unsigned short)(0x0000FFFF & pUdpTable->table[i].dwLocalPort)));
}

MyFreeUdpTable(pUdpTable);
}

return 0;
}


PMIB_TCPTABLE MyGetTcpTable(BOOL bOrder)
{
PMIB_TCPTABLE pTcpTable = NULL;
DWORD dwActualSize = 0;


// 查询所需缓冲区的大小
if(::GetTcpTable(pTcpTable, &dwActualSize, bOrder) == ERROR_INSUFFICIENT_BUFFER)
{
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇FatFS中的FILINFO介绍 下一篇VC获取默认浏览器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: