ReactOS 0.4.16-dev-2610-ge2c92c0
netstat.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS netstat utility
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: display IP stack statistics
5 * COPYRIGHT: Copyright 2005 Ged Murphy <gedmurphy@gmail.com>
6 */
7/*
8 * TODO:
9 * implement -b, -t, -v
10 * clean up GetIpHostName
11 */
12
13#include <stdio.h>
14#include <stdlib.h>
15#include <wchar.h>
16
17#include <windef.h>
18#include <winbase.h>
19#include <winsock2.h>
20#include <iphlpapi.h>
21
22#include <conutils.h>
23
24#include "netstat.h"
25#include "resource.h"
26
28DWORD Interval; /* time to pause between printing output */
29
30/* TCP endpoint states */
32 L"???",
33 L"CLOSED",
34 L"LISTENING",
35 L"SYN_SENT",
36 L"SYN_RCVD",
37 L"ESTABLISHED",
38 L"FIN_WAIT1",
39 L"FIN_WAIT2",
40 L"CLOSE_WAIT",
41 L"CLOSING",
42 L"LAST_ACK",
43 L"TIME_WAIT",
44 L"DELETE_TCB"
45};
46
47/*
48 * format message string and display output
49 */
51{
53 return;
54
57}
58
60{
65 else
66 ConPuts(StdOut, L"\n");
67}
68
69/*
70 * Parse command line parameters and set any options
71 */
72BOOL ParseCmdline(int argc, wchar_t* argv[])
73{
74 LPWSTR Proto;
75 WCHAR c;
76 INT i;
77
78 if ((argc == 1) || (iswdigit(*argv[1])))
80
81 /* Parse command line for options we have been given. */
82 for (i = 1; i < argc; i++)
83 {
84 if ((argc > 1) && (argv[i][0] == L'-' || argv[i][0] == L'/'))
85 {
86 while ((c = *++argv[i]) != L'\0')
87 {
88 switch (towlower(c))
89 {
90 case L'a':
92 break;
93 case L'b':
94 // UNIMPLEMENTED.
95 ConPuts(StdErr, L"'b' option is FIXME (Accepted option though unimplemented feature).\n");
97#if (_WIN32_WINNT < _WIN32_WINNT_VISTA)
99#endif
100 break;
101 case L'e':
103 break;
104 case L'n':
106 break;
107 case L'o':
109 break;
110 case L'p':
112 if (i+1 >= argc)
113 {
115 return TRUE;
116 }
117
118 Proto = argv[i+1];
119 if (!_wcsicmp(L"IP", Proto))
120 Protocol = IP;
121 else if (!_wcsicmp(L"ICMP", Proto))
122 Protocol = ICMP;
123 else if (!_wcsicmp(L"TCP", Proto))
124 Protocol = TCP;
125 else if (!_wcsicmp(L"UDP", Proto))
126 Protocol = UDP;
127 else
128 goto StopParsingAndShowUsageHelp;
129 break;
130 case L'r':
132 break;
133 case L's':
135 break;
136 case L't':
137 // UNIMPLEMENTED.
138 ConPuts(StdErr, L"'t' option is FIXME (Accepted option though unimplemented feature).\n");
139 break;
140 case L'v':
141 // UNIMPLEMENTED.
142 ConPuts(StdErr, L"'v' option is FIXME (Accepted option though unimplemented feature).\n");
144 break;
145 default:
146StopParsingAndShowUsageHelp:
148 return FALSE;
149 }
150 }
151 }
152 else if (iswdigit(*argv[i]) != 0)
153 {
154 if (swscanf(argv[i], L"%lu", &Interval) != EOF)
156 else
157 return FALSE;
158 }
159 }
160
161 return TRUE;
162}
163
165{
166 if (bNoOptions)
167 {
169 return ShowTcpTable();
170 }
171
173 {
174 if (_wsystem(L"route print") == -1)
175 {
177 return FALSE;
178 }
179 return TRUE;
180 }
181
182 if (bDoShowEthStats)
183 {
185 return TRUE;
186 }
187
189 {
190 switch (Protocol)
191 {
192 case IP:
195 return TRUE;
196 case ICMP:
199 return TRUE;
200 case TCP:
204 return ShowTcpTable();
205 case UDP:
209 return (bDoShowAllCons ? ShowUdpTable() : TRUE);
210 default:
211 break;
212 }
213 }
214 else if (bDoShowProtoStats)
215 {
220 return TRUE;
221 }
222 else
223 {
226 ShowUdpTable();
227 }
228
229 return TRUE;
230}
231
233{
234 MIB_IPSTATS IpStats;
235 DWORD dwRetVal;
236
237 if ((dwRetVal = GetIpStatistics(&IpStats)) == NO_ERROR)
238 {
257 }
258 else
259 {
260 DoFormatMessage(dwRetVal);
261 }
262}
263
265{
266 MIB_ICMP IcmpStats;
267 DWORD dwRetVal;
268
269 if ((dwRetVal = GetIcmpStatistics(&IcmpStats)) == NO_ERROR)
270 {
274 IcmpStats.stats.icmpInStats.dwMsgs, IcmpStats.stats.icmpOutStats.dwMsgs);
276 IcmpStats.stats.icmpInStats.dwErrors, IcmpStats.stats.icmpOutStats.dwErrors);
288 IcmpStats.stats.icmpInStats.dwEchos, IcmpStats.stats.icmpOutStats.dwEchos);
299 }
300 else
301 {
302 DoFormatMessage(dwRetVal);
303 }
304}
305
307{
309 DWORD dwRetVal;
310
311 if ((dwRetVal = GetTcpStatistics(&tcpStats)) == NO_ERROR)
312 {
322 }
323 else
324 {
325 DoFormatMessage(dwRetVal);
326 }
327}
328
330{
332 DWORD dwRetVal;
333
334 if ((dwRetVal = GetUdpStatistics(&udpStats)) == NO_ERROR)
335 {
341 }
342 else
343 {
344 DoFormatMessage(dwRetVal);
345 }
346}
347
349{
350 PMIB_IFTABLE pIfTable;
351 DWORD dwSize = 0;
352 DWORD dwRetVal = 0;
353
354 pIfTable = (MIB_IFTABLE*)HeapAlloc(GetProcessHeap(), 0, sizeof(MIB_IFTABLE));
355
356 if (GetIfTable(pIfTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
357 {
358 HeapFree(GetProcessHeap(), 0, pIfTable);
359 pIfTable = (MIB_IFTABLE*)HeapAlloc(GetProcessHeap(), 0, dwSize);
360
361 if ((dwRetVal = GetIfTable(pIfTable, &dwSize, 0)) == NO_ERROR)
362 {
366 pIfTable->table[0].dwInOctets, pIfTable->table[0].dwOutOctets);
368 pIfTable->table[0].dwInUcastPkts, pIfTable->table[0].dwOutUcastPkts);
370 pIfTable->table[0].dwInNUcastPkts, pIfTable->table[0].dwOutNUcastPkts);
372 pIfTable->table[0].dwInDiscards, pIfTable->table[0].dwOutDiscards);
374 pIfTable->table[0].dwInErrors, pIfTable->table[0].dwOutErrors);
376 pIfTable->table[0].dwInUnknownProtos);
377 }
378 else
379 {
380 DoFormatMessage(dwRetVal);
381 }
382 }
383 HeapFree(GetProcessHeap(), 0, pIfTable);
384}
385
387{
390 DWORD i;
391 CHAR HostIp[HOSTNAMELEN], HostPort[PORTNAMELEN];
392 CHAR RemoteIp[HOSTNAMELEN], RemotePort[PORTNAMELEN];
393 CHAR Host[ADDRESSLEN];
394 CHAR Remote[ADDRESSLEN];
395 CHAR PID[64];
396
397 /* Get the table of TCP endpoints */
399 /* Should also work when we get new connections between 2 GetTcpTable()
400 * calls: */
401 do
402 {
405 if (error != NO_ERROR)
406 HeapFree(GetProcessHeap(), 0, tcpTable);
407 }
409
410 if (error != NO_ERROR)
411 {
414 return FALSE;
415 }
416
417 /* Dump the TCP table */
418 for (i = 0; i < tcpTable->dwNumEntries; i++)
419 {
420 /* If we aren't showing all connections, only display established, close wait
421 * and time wait. This is the default output for netstat */
422 if (bDoShowAllCons || (tcpTable->table[i].dwState == MIB_TCP_STATE_ESTAB)
423 || (tcpTable->table[i].dwState == MIB_TCP_STATE_CLOSE_WAIT)
424 || (tcpTable->table[i].dwState == MIB_TCP_STATE_TIME_WAIT))
425 {
426 /* I've split this up so it's easier to follow */
427 GetIpHostName(TRUE, tcpTable->table[i].dwLocalAddr, HostIp, sizeof(HostIp));
428 GetPortName(tcpTable->table[i].dwLocalPort, "tcp", HostPort, sizeof(HostPort));
429 sprintf(Host, "%s:%s", HostIp, HostPort);
430
431 if (tcpTable->table[i].dwState == MIB_TCP_STATE_LISTEN)
432 {
433 sprintf(Remote, "%s:0", HostIp);
434 }
435 else
436 {
437 GetIpHostName(FALSE, tcpTable->table[i].dwRemoteAddr, RemoteIp, sizeof(RemoteIp));
438 GetPortName(tcpTable->table[i].dwRemotePort, "tcp", RemotePort, sizeof(RemotePort));
439 sprintf(Remote, "%s:%s", RemoteIp, RemotePort);
440 }
441
443 {
444 sprintf(PID, "%ld", tcpTable->table[i].dwOwningPid);
445 }
446 else
447 {
448 PID[0] = 0;
449 }
450
451 ConPrintf(StdOut, L" %-6s %-22S %-22S %-11s %S\n", L"TCP",
452 Host, Remote, TcpState[tcpTable->table[i].dwState], PID);
453 }
454 }
455
456 HeapFree(GetProcessHeap(), 0, tcpTable);
457 return TRUE;
458}
459
461{
464 DWORD i;
465 CHAR HostIp[HOSTNAMELEN], HostPort[PORTNAMELEN];
466 CHAR Host[ADDRESSLEN];
467 CHAR PID[64];
468
469 /* Get the table of UDP endpoints */
470 dwSize = 0;
473 {
476 return FALSE;
477 }
480 if (error)
481 {
485 return FALSE;
486 }
487
488 /* Dump the UDP table */
489 for (i = 0; i < udpTable->dwNumEntries; i++)
490 {
491 /* I've split this up so it's easier to follow */
492 GetIpHostName(TRUE, udpTable->table[i].dwLocalAddr, HostIp, sizeof(HostIp));
493 GetPortName(udpTable->table[i].dwLocalPort, "udp", HostPort, sizeof(HostPort));
494
495 sprintf(Host, "%s:%s", HostIp, HostPort);
496
498 {
499 sprintf(PID, "%ld", udpTable->table[i].dwOwningPid);
500 }
501 else
502 {
503 PID[0] = 0;
504 }
505
506 ConPrintf(StdOut, L" %-6s %-22S %-34s %S\n", L"UDP", Host, L"*:*", PID);
507 }
508
510 return TRUE;
511}
512
513/*
514 * Translate port numbers into their text equivalent if there is one
515 */
516PCHAR
517GetPortName(UINT Port, PCSTR Proto, CHAR Name[], INT NameLen)
518{
519 struct servent *pServent;
520
521 if (bDoShowNumbers)
522 {
523 sprintf(Name, "%d", htons((WORD)Port));
524 return Name;
525 }
526 /* Try to translate to a name */
527 if ((pServent = getservbyport(Port, Proto)))
528 strcpy(Name, pServent->s_name);
529 else
530 sprintf(Name, "%d", htons((WORD)Port));
531 return Name;
532}
533
534/*
535 * convert addresses into dotted decimal or hostname
536 */
537PCHAR
538GetIpHostName(BOOL Local, UINT IpAddr, CHAR Name[], INT NameLen)
539{
540// struct hostent *phostent;
541 UINT nIpAddr;
542
543 /* display dotted decimal */
544 nIpAddr = htonl(IpAddr);
545 if (bDoShowNumbers) {
546 sprintf(Name, "%d.%d.%d.%d",
547 (nIpAddr >> 24) & 0xFF,
548 (nIpAddr >> 16) & 0xFF,
549 (nIpAddr >> 8) & 0xFF,
550 (nIpAddr) & 0xFF);
551 return Name;
552 }
553
554 Name[0] = '\0';
555
556 /* try to resolve the name */
557 if (!IpAddr) {
558 if (!Local) {
559 sprintf(Name, "%d.%d.%d.%d",
560 (nIpAddr >> 24) & 0xFF,
561 (nIpAddr >> 16) & 0xFF,
562 (nIpAddr >> 8) & 0xFF,
563 (nIpAddr) & 0xFF);
564 } else {
565 if (gethostname(Name, NameLen) != 0)
567 }
568 } else if (IpAddr == 0x0100007f) {
569 if (Local) {
570 if (gethostname(Name, NameLen) != 0)
572 } else {
573 strncpy(Name, "localhost", 10);
574 }
575// } else if (phostent = gethostbyaddr((char*)&ipaddr, sizeof(nipaddr), PF_INET)) {
576// strcpy(name, phostent->h_name);
577 } else {
578 sprintf(Name, "%d.%d.%d.%d",
579 ((nIpAddr >> 24) & 0x000000FF),
580 ((nIpAddr >> 16) & 0x000000FF),
581 ((nIpAddr >> 8) & 0x000000FF),
582 ((nIpAddr) & 0x000000FF));
583 }
584 return Name;
585}
586
587/*
588 * Parse command line parameters and set any options
589 * Run display output, looping over set interval if a number is given
590 */
591int wmain(int argc, wchar_t *argv[])
592{
594 WSADATA wsaData;
595
596 /* Initialize the Console Standard Streams */
598
599 if (!ParseCmdline(argc, argv))
600 return EXIT_FAILURE;
601
602 if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
603 {
605 return EXIT_FAILURE;
606 }
607
609 while (bLoopOutput && Success)
610 {
611 Sleep(Interval*1000);
613 }
614
615 WSACleanup();
616 return (Success ? EXIT_SUCCESS : EXIT_FAILURE);
617}
#define IDS_USAGE
Definition: resource.h:3
#define IDS_UDP_IP4_HEADER
Definition: resource.h:59
#define IDS_TCP_RESET_CONNECT
Definition: resource.h:53
#define IDS_ETHERNET_NON_UNICAST_PACKET
Definition: resource.h:69
#define IDS_IP_DATAG_FRAG_CREATE
Definition: resource.h:34
#define IDS_DISPLAY_THEADER
Definition: resource.h:4
#define IDS_IP_OUT_REQUEST
Definition: resource.h:25
#define IDS_ICMP_MSG
Definition: resource.h:36
#define IDS_ETHERNET_BYTES
Definition: resource.h:67
#define IDS_ETHERNET_DISCARD
Definition: resource.h:70
#define IDS_ICMP_DEST_UNREACH
Definition: resource.h:38
#define IDS_UDP_RECEIVE_ERROR
Definition: resource.h:62
#define IDS_ICMP_ECHO_REPLY
Definition: resource.h:44
#define IDS_ICMP_ADDRESSS_MASK
Definition: resource.h:47
#define IDS_ERROR_UDP_ENDPOINT
Definition: resource.h:15
#define IDS_IP_DATAG_FRAG_SUCCESS
Definition: resource.h:32
#define IDS_ERROR_WSA_START
Definition: resource.h:12
#define IDS_TCP_CURRENT_CONNECT
Definition: resource.h:54
#define IDS_TCP_SEG_SENT
Definition: resource.h:56
#define IDS_IP_REC_PACK_DISCARD
Definition: resource.h:23
#define IDS_ICMP_SRC_QUENCHES
Definition: resource.h:41
#define IDS_IP_DISCARD_OUT_PACK
Definition: resource.h:27
#define IDS_DISPLAY_PROCESS
Definition: resource.h:5
#define IDS_ETHERNET_INTERFACE_STAT
Definition: resource.h:65
#define IDS_IP_DATAG_FWD
Definition: resource.h:21
#define IDS_IP_UNKNOWN_PRO_REC
Definition: resource.h:22
#define IDS_TCP_SEG_RETRANSMIT
Definition: resource.h:57
#define IDS_ERROR_TCP_SNAPSHOT
Definition: resource.h:14
#define IDS_ETHERNET_UNKNOWN
Definition: resource.h:72
#define IDS_IP_REASSEMBLE_FAILURE
Definition: resource.h:31
#define IDS_IP_ADDR_REC_ERROR
Definition: resource.h:20
#define IDS_ICMP_ADDRESSS_MASK_REPLY
Definition: resource.h:48
#define IDS_IP_REASSEMBLE_REQUIRED
Definition: resource.h:29
#define IDS_ACTIVE_CONNECT
Definition: resource.h:6
#define IDS_TCP_ACTIVE_OPEN
Definition: resource.h:50
#define IDS_TCP_PASS_OPEN
Definition: resource.h:51
#define IDS_ICMP_TIMESTAMP
Definition: resource.h:45
#define IDS_ERROR_ROUTE
Definition: resource.h:13
#define IDS_ICMP_ECHO
Definition: resource.h:43
#define IDS_IP_HEAD_REC_ERROR
Definition: resource.h:19
#define IDS_UDP_DATAG_RECEIVE
Definition: resource.h:60
#define IDS_IP_REASSEMBLE_SUCCESS
Definition: resource.h:30
#define IDS_ICMP_TIMESTAMP_REPLY
Definition: resource.h:46
#define IDS_IP_ROUTE_DISCARD
Definition: resource.h:26
#define IDS_IP_OUT_PACKET_NO_ROUTE
Definition: resource.h:28
#define IDS_IP_REC_PACK_DELIVER
Definition: resource.h:24
#define IDS_ETHERNET_THEADER
Definition: resource.h:66
#define IDS_ICMP4_STAT_HEADER
Definition: resource.h:8
#define IDS_ICMP_ERROR
Definition: resource.h:37
#define IDS_ICMP_THEADER
Definition: resource.h:9
#define IDS_TCP_FAIL_CONNECT
Definition: resource.h:52
#define IDS_UDP_DATAG_SEND
Definition: resource.h:63
#define IDS_TCP_SEG_RECEIVE
Definition: resource.h:55
#define IDS_IP4_STAT_HEADER
Definition: resource.h:7
#define IDS_ERROR_UDP_ENDPOINT_TABLE
Definition: resource.h:16
#define IDS_UDP_NO_PORT
Definition: resource.h:61
#define IDS_ICMP_PARAM_PROBLEM
Definition: resource.h:40
#define IDS_ICMP_TIME_EXCEED
Definition: resource.h:39
#define IDS_ETHERNET_UNICAST_PACKET
Definition: resource.h:68
#define IDS_ETHERNET_ERROR
Definition: resource.h:71
#define IDS_IP_PACK_REC
Definition: resource.h:18
#define IDS_TCP4_HEADER
Definition: resource.h:10
#define IDS_IP_DATAG_FRAG_FAILURE
Definition: resource.h:33
#define IDS_ICMP_REDIRECT
Definition: resource.h:42
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: conutils_noros.h:8
#define ConInitStdStreams()
Definition: conutils_noros.h:5
void ConPrintf(FILE *fp, LPCWSTR psz,...)
#define StdOut
Definition: conutils_noros.h:6
void ConResPrintf(FILE *fp, UINT nID,...)
#define StdErr
Definition: conutils_noros.h:7
void ConResPuts(FILE *fp, UINT nID)
#define NO_ERROR
Definition: dderror.h:5
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
static MIB_UDPSTATS udpStats
Definition: main.c:1137
static PMIB_UDPTABLE udpTable
Definition: main.c:1187
static MIB_TCPSTATS tcpStats
Definition: main.c:1076
MonoAssembly int argc
Definition: metahost.c:107
_ACRTIMP int __cdecl _wsystem(const wchar_t *)
Definition: process.c:1254
_ACRTIMP int __cdecl swscanf(const wchar_t *, const wchar_t *,...)
Definition: scanf.c:438
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:159
#define EOF
Definition: stdio.h:33
#define L(x)
Definition: resources.c:13
#define AF_INET
Definition: tcpip.h:117
@ Success
Definition: eventcreate.c:712
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
PSERVENT WSAAPI getservbyport(IN int port, IN const char FAR *proto)
Definition: getxbyxx.c:431
INT WSAAPI gethostname(OUT char FAR *name, IN INT namelen)
Definition: getxbyxx.c:397
const GLubyte * c
Definition: glext.h:8905
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
CPPORT Port[4]
Definition: headless.c:38
struct _MIB_IFTABLE MIB_IFTABLE
DWORD WINAPI GetExtendedUdpTable(PVOID pUdpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved)
DWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder)
DWORD WINAPI GetExtendedTcpTable(PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved)
DWORD WINAPI GetIpStatistics(PMIB_IPSTATS pStats)
DWORD WINAPI GetIcmpStatistics(PMIB_ICMP pStats)
DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS pStats)
DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS pStats)
@ TCP_TABLE_OWNER_PID_ALL
Definition: iprtrmib.h:35
@ UDP_TABLE_OWNER_PID
Definition: iprtrmib.h:44
#define EXIT_FAILURE
Definition: jerror.c:33
#define c
Definition: ke_i.h:80
#define error(str)
Definition: mkdosfs.c:1605
#define htons(x)
Definition: module.h:215
#define htonl(x)
Definition: module.h:214
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define sprintf
Definition: sprintf.c:45
#define argv
Definition: mplay32.c:18
unsigned int UINT
Definition: ndis.h:50
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4436
BOOL ShowTcpTable(VOID)
Definition: netstat.c:386
VOID ShowTcpStatistics(VOID)
Definition: netstat.c:306
enum ProtoType Protocol
BOOL ParseCmdline(int argc, wchar_t *argv[])
Definition: netstat.c:72
BOOL ShowUdpTable(VOID)
Definition: netstat.c:460
DWORD Interval
Definition: netstat.c:28
VOID DoFormatMessage(DWORD ErrorCode)
Definition: netstat.c:50
ProtoType
Definition: netstat.c:27
@ IP
Definition: netstat.c:27
@ ICMP
Definition: netstat.c:27
@ TCP
Definition: netstat.c:27
@ UDP
Definition: netstat.c:27
VOID DisplayTableHeader(VOID)
Definition: netstat.c:59
PCWSTR TcpState[]
Definition: netstat.c:31
BOOL DisplayOutput(VOID)
Definition: netstat.c:164
VOID ShowEthernetStatistics(VOID)
Definition: netstat.c:348
PCHAR GetPortName(UINT Port, PCSTR Proto, CHAR Name[], INT NameLen)
Definition: netstat.c:517
VOID ShowIcmpStatistics(VOID)
Definition: netstat.c:264
VOID ShowIpStatistics(VOID)
Definition: netstat.c:232
PCHAR GetIpHostName(BOOL Local, UINT IpAddr, CHAR Name[], INT NameLen)
Definition: netstat.c:538
VOID ShowUdpStatistics(VOID)
Definition: netstat.c:329
BOOL bNoOptions
Definition: netstat.h:9
BOOL bDoShowNumbers
Definition: netstat.h:13
BOOL bDoShowProtoCons
Definition: netstat.h:15
BOOL bDoShowEthStats
Definition: netstat.h:12
BOOL bDoShowAllCons
Definition: netstat.h:10
#define HOSTNAMELEN
Definition: netstat.h:4
BOOL bLoopOutput
Definition: netstat.h:19
BOOL bDoShowProcName
Definition: netstat.h:11
BOOL bDoShowProcessId
Definition: netstat.h:14
BOOL bDoShowProtoStats
Definition: netstat.h:17
#define PORTNAMELEN
Definition: netstat.h:5
BOOL bDoShowRouteTable
Definition: netstat.h:16
#define ADDRESSLEN
Definition: netstat.h:6
BOOL bDoDispSeqComp
Definition: netstat.h:18
INT ConMsgPuts(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId)
Definition: outstream.c:835
short WCHAR
Definition: pedump.c:58
char CHAR
Definition: pedump.c:57
struct _MIB_TCPTABLE_OWNER_PID * PMIB_TCPTABLE_OWNER_PID
@ MIB_TCP_STATE_TIME_WAIT
Definition: tcpmib.h:25
@ MIB_TCP_STATE_ESTAB
Definition: tcpmib.h:19
@ MIB_TCP_STATE_LISTEN
Definition: tcpmib.h:16
@ MIB_TCP_STATE_CLOSE_WAIT
Definition: tcpmib.h:22
struct _MIB_TCPTABLE_OWNER_PID MIB_TCPTABLE_OWNER_PID
struct _MIB_UDPTABLE_OWNER_PID * PMIB_UDPTABLE_OWNER_PID
int wmain()
#define EXIT_SUCCESS
Definition: rdjpgcom.c:55
#define iswdigit(_c)
Definition: ctype.h:667
strncpy
Definition: string.h:335
strcpy
Definition: string.h:131
#define towlower(c)
Definition: wctype.h:97
MIBICMPSTATS icmpOutStats
Definition: ipmib.h:194
MIBICMPSTATS icmpInStats
Definition: ipmib.h:193
DWORD dwTimeExcds
Definition: ipmib.h:179
DWORD dwAddrMasks
Definition: ipmib.h:187
DWORD dwEchoReps
Definition: ipmib.h:184
DWORD dwParmProbs
Definition: ipmib.h:180
DWORD dwAddrMaskReps
Definition: ipmib.h:188
DWORD dwSrcQuenchs
Definition: ipmib.h:181
DWORD dwTimestamps
Definition: ipmib.h:185
DWORD dwRedirects
Definition: ipmib.h:182
DWORD dwMsgs
Definition: ipmib.h:176
DWORD dwErrors
Definition: ipmib.h:177
DWORD dwEchos
Definition: ipmib.h:183
DWORD dwTimestampReps
Definition: ipmib.h:186
DWORD dwDestUnreachs
Definition: ipmib.h:178
MIBICMPINFO stats
Definition: ipmib.h:199
DWORD dwOutErrors
Definition: ifmib.h:57
DWORD dwOutNUcastPkts
Definition: ifmib.h:55
DWORD dwInOctets
Definition: ifmib.h:47
DWORD dwInDiscards
Definition: ifmib.h:50
DWORD dwInUcastPkts
Definition: ifmib.h:48
DWORD dwInErrors
Definition: ifmib.h:51
DWORD dwInUnknownProtos
Definition: ifmib.h:52
DWORD dwOutOctets
Definition: ifmib.h:53
DWORD dwOutDiscards
Definition: ifmib.h:56
DWORD dwOutUcastPkts
Definition: ifmib.h:54
DWORD dwInNUcastPkts
Definition: ifmib.h:49
MIB_IFROW table[1]
Definition: ifmib.h:66
DWORD dwInReceives
Definition: ipmib.h:148
DWORD dwInAddrErrors
Definition: ipmib.h:150
DWORD dwFragOks
Definition: ipmib.h:163
DWORD dwReasmOks
Definition: ipmib.h:161
DWORD dwOutNoRoutes
Definition: ipmib.h:158
DWORD dwInDelivers
Definition: ipmib.h:154
DWORD dwRoutingDiscards
Definition: ipmib.h:156
DWORD dwReasmReqds
Definition: ipmib.h:160
DWORD dwOutDiscards
Definition: ipmib.h:157
DWORD dwInHdrErrors
Definition: ipmib.h:149
DWORD dwForwDatagrams
Definition: ipmib.h:151
DWORD dwInDiscards
Definition: ipmib.h:153
DWORD dwOutRequests
Definition: ipmib.h:155
DWORD dwFragCreates
Definition: ipmib.h:165
DWORD dwInUnknownProtos
Definition: ipmib.h:152
DWORD dwReasmFails
Definition: ipmib.h:162
DWORD dwFragFails
Definition: ipmib.h:164
DWORD dwPassiveOpens
Definition: tcpmib.h:133
DWORD dwActiveOpens
Definition: tcpmib.h:132
DWORD dwRetransSegs
Definition: tcpmib.h:139
DWORD dwInSegs
Definition: tcpmib.h:137
DWORD dwOutSegs
Definition: tcpmib.h:138
DWORD dwEstabResets
Definition: tcpmib.h:135
DWORD dwCurrEstab
Definition: tcpmib.h:136
DWORD dwAttemptFails
Definition: tcpmib.h:134
MIB_TCPROW_OWNER_PID table[1]
Definition: tcpmib.h:87
DWORD dwLocalAddr
Definition: udpmib.h:14
DWORD dwLocalPort
Definition: udpmib.h:15
DWORD dwOutDatagrams
Definition: udpmib.h:91
DWORD dwInDatagrams
Definition: udpmib.h:88
DWORD dwNoPorts
Definition: udpmib.h:89
DWORD dwInErrors
Definition: udpmib.h:90
DWORD dwNumEntries
Definition: udpmib.h:19
MIB_UDPROW table[1]
Definition: udpmib.h:20
char * s_name
Definition: winsock.h:153
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:726
#define LANG_USER_DEFAULT
Definition: tnerror.cpp:50
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define MAKEWORD(a, b)
Definition: typedefs.h:248
uint16_t * LPWSTR
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
const char * PCSTR
Definition: typedefs.h:52
char * PCHAR
Definition: typedefs.h:51
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:400
int PASCAL FAR WSAGetLastError(void)
Definition: dllmain.c:131
int PASCAL FAR WSACleanup(void)
Definition: startup.c:60