#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <Iphlpapi.h>
#include<time.h>
#include <locale.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib,"Iphlpapi.lib")
#define HOSTNAMELEN 256
#define PORTNAMELEN 256
#define ADDRESSLEN HOSTNAMELEN+PORTNAMELEN
#define FLAG_ALL_ENDPOINTS 1
#define FLAG_SHOW_NUMBERS 2
void PROcessAndPort();
PCHAR GetPort(unsigned int port, char* pPort)
{
wsprintfA(pPort,"%d",htons((WORD)port));
return pPort;
}
PCHAR GetIp(unsigned int ipaddr, char* pIP)
{
in_addr nipaddr;
nipaddr.S_un.S_addr= ipaddr;
strcpy(pIP,inet_ntoa(nipaddr));
return pIP;
}
TCHAR* ProcessPidToName(HANDLE hProcessSnap,DWORD ProcessId,TCHAR ProcessName[20])
{
PROCESSENTRY32 processEntry;
processEntry.dwSize=sizeof(processEntry);
lstrcpy(ProcessName,L"..");
if(!Process32First(hProcessSnap,&processEntry))
{ MessageBox(0,L"",L"",MB_OK);
return ProcessName;
}
do {
if(processEntry.th32ProcessID==ProcessId)
{
lstrcpy(ProcessName,processEntry.szExeFile);
return ProcessName;
}
} while( Process32Next(hProcessSnap,&processEntry));
//printf("")
return ProcessName;
}
typedef struct {
DWORD dwNumEntries;
MIB_TCPROW_OWNER_MODULE table[100];
} D_MIB_TCPTABLE_OWNER_MODULE, *D_PMIB_TCPTABLE_OWNER_MODULE;
typedef struct {
DWORD dwNumEntries;
MIB_UDPROW_OWNER_MODULE table[100];
} D_MIB_UDPTABLE_OWNER_MODULE, *D_PMIB_UDPTABLE_OWNER_MODULE;
static char TcpState[][32] = {
"???",
"CLOSED",
"LISTENING",
"SYN_SENT",
"SYN_RCVD",
"ESTABLISHED",
"FIN_WAIT1",
"FIN_WAIT2",
"CLOSE_WAIT",
"CLOSING",
"LAST_ACK",
"TIME_WAIT",
"DELETE_TCB"
};
int main(int argc, char* argv[])
{
PROcessAndPort();
}
void PROcessAndPort()
{int nRetCode;
DWORD i;
WSADATA WSAData;
HANDLE hProcessSnap;
D_MIB_TCPTABLE_OWNER_MODULE TCPExTable;
D_MIB_UDPTABLE_OWNER_MODULE UDPExTable;
DWORD UdpCount=sizeof(D_MIB_TCPTABLE_OWNER_MODULE);
DWORD TcpCount=sizeof(D_MIB_UDPTABLE_OWNER_MODULE);
TCHAR szProcessName[MAX_PATH];
char szLocalName[HOSTNAMELEN], szRemoteName[HOSTNAMELEN];
char szRemotePort[PORTNAMELEN], szLocalPort[PORTNAMELEN];
char szLocalAddress[ADDRESSLEN], szRemoteAddress[ADDRESSLEN];
if( WSAStartup(MAKEWORD(1, 1), &WSAData ))
{
//printf("WSAStartup error!/n");
return ;
}
nRetCode= GetExtendedTcpTable(&TCPExTable,&TcpCount, TRUE,AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0);
if( nRetCode )
{
//printf("GetExtendedTcpTable!/n");
return ;
}
nRetCode = GetExtendedUdpTable(&UDPExTable,&UdpCount,TRUE,AF_INET,UDP_TABLE_OWNER_MODULE,0);
if( nRetCode )
{
//printf("GetExtendedUdpTable./n");
return ;
}
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
//printf("CreateToolhelp32Snapshot Error!/n");
}
//printf("%-6s%-20s%-20s%-11s%s%-6s/n","协议","本地地址","外部地址", "连接状态","进程","pid");
for(i=0;i<TCPExTable.dwNumEntries;i++)
{
wsprintfA(szLocalAddress,"%s:%s",GetIp(TCPExTable.table[i].dwLocalAddr, szLocalName),GetPort(TCPExTable.table[i].dwLocalPort, szLocalPort));
wsprintfA(szRemoteAddress,"%s:%s",GetIp(TCPExTable.table[i].dwRemoteAddr, szRemoteName),GetPort(TCPExTable.table[i].dwRemotePort, szRemotePort));
setlocale(LC_ALL,"chs");
//这里需要替换
printf("%-6s%-20s%-20s%-11s%ws:%d/n", "TCP",
szLocalAddress, szRemoteAddress,TcpState[TCPExTable.table[i].dwState],ProcessPidToName(hProcessSnap,TCPExTable.table[i].dwOwningPid,szProcessName),
TCPExTable.table[i].dwOwningPid);
}
for( i = 0; i < UDPExTable.dwNumEntries; i++ )
{
sprintf( szLocalAddress, "%s:%s",
GetIp(UDPExTable.table[i].dwLocalAddr, szLocalName),
GetPort(UDPExTable.table[i].dwLocalPort, szLocalPort));
sprintf( szRemoteAddress, "%s", "*:*");
setlocale(LC_ALL,"chs");
//这里需要替换
printf("%-6s%-20s%-33s%ws:%d/n", "UDP",
szLocalAddress, szRemoteAddress,
ProcessPidToName(hProcessSnap,UDPExTable.table[i].dwOwningPid,szProcessName),
UDPExTable.table[i].dwOwningPid
);
}
WSACleanup();
getchar();
return ;
}