利用函数来获得本机所有的端口
2015-07-20 15:46
375 查看
#include <windows.h> #include <tchar.h> #include <iphlpapi.h> #include <stdlib.h> #pragma comment(lib, "iphlpapi.lib") #pragma comment(lib, "user32.lib") #pragma comment(lib, "ws2_32.lib") /* typedef enum { TCP_TABLE_BASIC_LISTENER, TCP_TABLE_BASIC_CONNECTIONS, TCP_TABLE_BASIC_ALL, TCP_TABLE_OWNER_PID_LISTENER, TCP_TABLE_OWNER_PID_CONNECTIONS, TCP_TABLE_OWNER_PID_ALL, TCP_TABLE_OWNER_MODULE_LISTENER, TCP_TABLE_OWNER_MODULE_CONNECTIONS, TCP_TABLE_OWNER_MODULE_ALL } TCP_TABLE_CLASS, *PTCP_TABLE_CLASS; typedef enum { UDP_TABLE_BASIC, UDP_TABLE_OWNER_PID, UDP_TABLE_OWNER_MODULE, } UDP_TABLE_CLASS, *PUDP_TABLE_CLASS; */ typedef DWORD(WINAPI * PFN_GET_EXTENDED_TCP_TABLE) ( PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved ); typedef DWORD(WINAPI * PFN_GET_EXTENDED_UDP_TABLE) ( PVOID pUdpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved ); BOOL printTcp() { int iErrno; PMIB_TCPTABLE_OWNER_PID pMibTcpTableOwnerPid; DWORD dwSize = 0; TCHAR szBuffer[1024]; int i; HMODULE hModule; PFN_GET_EXTENDED_TCP_TABLE GetExtendedTcpTable; hModule = LoadLibrary(_T("iphlpapi.dll")); GetExtendedTcpTable = (PFN_GET_EXTENDED_TCP_TABLE)GetProcAddress(hModule, "GetExtendedTcpTable"); if ((iErrno = GetExtendedTcpTable(NULL, &dwSize, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0)) != NO_ERROR) { if (iErrno != ERROR_INSUFFICIENT_BUFFER) { wsprintf(szBuffer, _T("GetExtendedTcpTable Error: %d\n"), iErrno); OutputDebugString(szBuffer); return FALSE; } } pMibTcpTableOwnerPid = (PMIB_TCPTABLE_OWNER_PID)malloc(dwSize); if (pMibTcpTableOwnerPid == NULL) { OutputDebugString(_T("malloc Error!\n")); return FALSE; } if ((iErrno = GetExtendedTcpTable(pMibTcpTableOwnerPid, &dwSize, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0)) != NO_ERROR) { wsprintf(szBuffer, _T("GetExtendedTcpTable Error: %d\n"), iErrno); OutputDebugString(szBuffer); return FALSE; } for (i = 0; i < (int)pMibTcpTableOwnerPid->dwNumEntries; i++) { IN_ADDR localAddr; IN_ADDR remoteAddr; TCHAR szLocalAddr[1024]; TCHAR szRemoteAddr[1024]; USHORT usLocalPort; USHORT usRemotePort; TCHAR szState[1024]; DWORD dwWriteNum; TCHAR szLocal[1024]; TCHAR szRemote[1024]; localAddr.S_un.S_addr = pMibTcpTableOwnerPid->table[i].dwLocalAddr; remoteAddr.S_un.S_addr = pMibTcpTableOwnerPid->table[i].dwRemoteAddr; MultiByteToWideChar(CP_ACP, 0, inet_ntoa(localAddr), -1, szLocalAddr, 1024); MultiByteToWideChar(CP_ACP, 0, inet_ntoa(remoteAddr), -1, szRemoteAddr, 1024); switch (pMibTcpTableOwnerPid->table[i].dwState) { case MIB_TCP_STATE_CLOSED: wsprintf(szState, _T("%s"), _T("CLOSED")); break; case MIB_TCP_STATE_LISTEN: wsprintf(szState, _T("%s"), _T("LISTENING")); break; case MIB_TCP_STATE_SYN_SENT: wsprintf(szState, _T("%s"), _T("SYN_SENT")); break; case MIB_TCP_STATE_SYN_RCVD: wsprintf(szState, _T("%s"), _T("SYN_RCVD")); break; case MIB_TCP_STATE_ESTAB: wsprintf(szState, _T("%s"), _T("ESTABLISHED")); break; case MIB_TCP_STATE_FIN_WAIT1: wsprintf(szState, _T("%s"), _T("FIN_WAIT_1")); break; case MIB_TCP_STATE_FIN_WAIT2: wsprintf(szState, _T("%s"), _T("FIN_WAIT_2")); break; case MIB_TCP_STATE_CLOSE_WAIT: wsprintf(szState, _T("%s"), _T("CLOSE_WAIT")); break; case MIB_TCP_STATE_CLOSING: wsprintf(szState, _T("%s"), _T("CLOSING")); break; case MIB_TCP_STATE_LAST_ACK: wsprintf(szState, _T("%s"), _T("LAST_ACK")); break; case MIB_TCP_STATE_TIME_WAIT: wsprintf(szState, _T("%s"), _T("TIME_WAIT")); break; case MIB_TCP_STATE_DELETE_TCB: wsprintf(szState, _T("%s"), _T("DELETE_TCB")); break; } usLocalPort = ntohs((USHORT)pMibTcpTableOwnerPid->table[i].dwLocalPort); usRemotePort = _tcscmp(szState, _T("LISTENING")) == 0 ? 0 : ntohs((USHORT)pMibTcpTableOwnerPid->table[i].dwRemotePort); wsprintf(szLocal, _T("%s:%d"), szLocalAddr, usLocalPort); wsprintf(szRemote, _T("%s:%d"), szRemoteAddr, usRemotePort); wsprintf(szBuffer, _T(" %-7s%-23s%-23s%-16s%d\n"), _T("TCP"), szLocal, szRemote, szState, pMibTcpTableOwnerPid->table[i].dwOwningPid); WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuffer, (DWORD)_tcslen(szBuffer), &dwWriteNum, NULL); } free(pMibTcpTableOwnerPid); FreeLibrary(hModule); return TRUE; } BOOL printUdp() { int iErrno; PMIB_UDPTABLE_OWNER_PID pMibUdpTableOwnerPid; DWORD dwSize = 0; TCHAR szBuffer[1024]; int i; HMODULE hModule; PFN_GET_EXTENDED_UDP_TABLE GetExtendedUdpTable; hModule = LoadLibrary(_T("iphlpapi.dll")); GetExtendedUdpTable = (PFN_GET_EXTENDED_UDP_TABLE)GetProcAddress(hModule, "GetExtendedUdpTable"); if ((iErrno = GetExtendedUdpTable(NULL, &dwSize, TRUE, AF_INET, UDP_TABLE_OWNER_PID, 0)) != NO_ERROR) { if (iErrno != ERROR_INSUFFICIENT_BUFFER) { wsprintf(szBuffer, _T("GetExtendedUdpTable Error: %d\n"), iErrno); OutputDebugString(szBuffer); return FALSE; } } pMibUdpTableOwnerPid = (PMIB_UDPTABLE_OWNER_PID)malloc(dwSize); if (pMibUdpTableOwnerPid == NULL) { OutputDebugString(_T("malloc Error!")); return FALSE; } if ((iErrno = GetExtendedUdpTable(pMibUdpTableOwnerPid, &dwSize, TRUE, AF_INET, UDP_TABLE_OWNER_PID, 0)) != NO_ERROR) { wsprintf(szBuffer, _T("GetExtendedUdpTable Error: %d\n"), iErrno); OutputDebugString(szBuffer); return FALSE; } for (i = 0; i < (int)pMibUdpTableOwnerPid->dwNumEntries; i++) { IN_ADDR localAddr; TCHAR szLocalAddr[1024]; USHORT usLocalPort; TCHAR szLocal[1024]; TCHAR szRemote[1024]; TCHAR szState[1024]; DWORD dwWriteNum; localAddr.S_un.S_addr = pMibUdpTableOwnerPid->table[i].dwLocalAddr; usLocalPort = ntohs((USHORT)pMibUdpTableOwnerPid->table[i].dwLocalPort); MultiByteToWideChar(CP_ACP, 0, inet_ntoa(localAddr), -1, szLocalAddr, 1024); wsprintf(szLocal, _T("%s:%d"), szLocalAddr, usLocalPort); wsprintf(szRemote, _T("*:*")); wsprintf(szState, _T("")); wsprintf(szBuffer, _T(" %-7s%-23s%-23s%-16s%d\n"), _T("UDP"), szLocal, szRemote, szState, pMibUdpTableOwnerPid->table[i].dwOwningPid); WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuffer, (DWORD)_tcslen(szBuffer), &dwWriteNum, NULL); } free(pMibUdpTableOwnerPid); FreeLibrary(hModule); return TRUE; } int _tmain() { TCHAR szBuffer[1024]; DWORD dwWriteNum; wsprintf(szBuffer, _T(" %-7s%-23s%-23s%-16s%-s\n"), _T("Proto"), _T("Local Address"), _T("Foreign Address"), _T("State"), _T("PID")); WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuffer, (DWORD)_tcslen(szBuffer), &dwWriteNum, NULL); printTcp(); printUdp(); return 0; }
相关文章推荐
- RGB888 TO BT1120 转换
- java io流
- SQLite数据库的使用
- 百度在线语音识别接入经验
- ul li a active jquery.cookie.js
- NOIP2012-普及组复赛-第一题-质因数分解
- 茅台高管年薪200多万
- zabbix监控系统的实际应用(客户端安装-基本应用设置-报警提醒篇)
- python的私有化
- 手机是如何泄密个人隐私的
- HMM MEMM CRF 区别 联系
- hibernate二级缓存ehcache.xml文件配置的几条心得
- 左侧显示信息选项卡的样式控制
- 4Sum
- 可伸缩Web架构与分布式系统2
- 深入集合框架之HashMap源码剖析
- POJ 2109 巧妙解法
- [Effective C++]让自己习惯C++
- 免费下载,ShopNC电商平台系统(+手机版)
- 【阅读】《head first html5》第二章——javascript和DOM