ReactOS 0.4.15-dev-5853-gcb454ef
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 * FILE: base/applications/network/netstat/netstat.c
5 * PURPOSE: display IP stack statistics
6 * COPYRIGHT: Copyright 2005 Ged Murphy <gedmurphy@gmail.com>
7 */
8/*
9 * TODO:
10 * sort function return values.
11 * implement -b, -t and -v
12 * clean up GetIpHostName
13 * command line parser needs more work
14 */
15
16#include <stdio.h>
17#include <stdlib.h>
18#include <wchar.h>
19
20#define WIN32_NO_STATUS
21#include <windef.h>
22#include <winbase.h>
23#define _INC_WINDOWS
24#include <winsock2.h>
25#include <iphlpapi.h>
26
27#include <conutils.h>
28
29#include "netstat.h"
30#include "resource.h"
31
33DWORD Interval; /* time to pause between printing output */
34
35/* TCP endpoint states */
37 L"???",
38 L"CLOSED",
39 L"LISTENING",
40 L"SYN_SENT",
41 L"SYN_RCVD",
42 L"ESTABLISHED",
43 L"FIN_WAIT1",
44 L"FIN_WAIT2",
45 L"CLOSE_WAIT",
46 L"CLOSING",
47 L"LAST_ACK",
48 L"TIME_WAIT",
49 L"DELETE_TCB"
50};
51
52/*
53 * format message string and display output
54 */
56{
58 return;
59
62}
63
64/*
65 *
66 * Parse command line parameters and set any options
67 *
68 */
69BOOL ParseCmdline(int argc, wchar_t* argv[])
70{
71 LPWSTR Proto;
72 WCHAR c;
73 INT i;
74
75 if ((argc == 1) || (iswdigit(*argv[1])))
77
78 /* Parse command line for options we have been given. */
79 for (i = 1; i < argc; i++)
80 {
81 if ((argc > 1) && (argv[i][0] == L'-' || argv[i][0] == L'/'))
82 {
83 while ((c = *++argv[i]) != L'\0')
84 {
85 switch (towlower(c))
86 {
87 case L'a':
89 break;
90 case L'b':
91 // UNIMPLEMENTED.
92 ConPuts(StdErr, L"'b' option is FIXME (Accepted option though unimplemented feature).\n");
94 break;
95 case L'e':
97 break;
98 case L'n':
100 break;
101 case L'o':
103 break;
104 case L'p':
106 Proto = argv[i+1];
107 if (!_wcsicmp(L"IP", Proto))
108 Protocol = IP;
109 else if (!_wcsicmp(L"ICMP", Proto))
110 Protocol = ICMP;
111 else if (!_wcsicmp(L"TCP", Proto))
112 Protocol = TCP;
113 else if (!_wcsicmp(L"UDP", Proto))
114 Protocol = UDP;
115 else
116 {
118 return FALSE;
119 }
120 break;
121 case L'r':
123 break;
124 case L's':
126 break;
127 case L't':
128 // UNIMPLEMENTED.
129 ConPuts(StdErr, L"'t' option is FIXME (Accepted option though unimplemented feature).\n");
130 break;
131 case L'v':
132 // UNIMPLEMENTED.
133 ConPuts(StdErr, L"'v' option is FIXME (Accepted option though unimplemented feature).\n");
135 break;
136 default :
138 return FALSE;
139 }
140 }
141 }
142 else if (iswdigit(*argv[i]) != 0)
143 {
144 if (swscanf(argv[i], L"%lu", &Interval) != EOF)
146 else
147 return FALSE;
148 }
149// else
150// {
151// ConResPrintf(StdErr, IDS_USAGE);
152// return FALSE;
153// }
154 }
155
156 return TRUE;
157}
158
159/*
160 * Display table header
161 */
163{
167 else
168 ConPuts(StdOut, L"\n");
169}
170
171/*
172 * Simulate Microsofts netstat utility output
173 */
175{
176 if (bNoOptions)
177 {
180 return ShowTcpTable();
181 }
182
184 {
185 if (_wsystem(L"route print") == -1)
186 {
188 return FALSE;
189 }
190 return TRUE;
191 }
192
193 if (bDoShowEthStats)
194 {
196 return TRUE;
197 }
198
200 {
201 switch (Protocol)
202 {
203 case IP:
206 return TRUE;
207 case ICMP:
210 return TRUE;
211 case TCP:
216 return ShowTcpTable();
217 case UDP:
222 return (bDoShowAllCons ? ShowUdpTable() : TRUE);
223 default:
224 break;
225 }
226 }
227 else if (bDoShowProtoStats)
228 {
233 return TRUE;
234 }
235 else
236 {
240 ShowUdpTable();
241 }
242
243 return TRUE;
244}
245
247{
248 PMIB_IPSTATS pIpStats;
249 DWORD dwRetVal;
250
251 pIpStats = (MIB_IPSTATS*) HeapAlloc(GetProcessHeap(), 0, sizeof(MIB_IPSTATS));
252
253 if ((dwRetVal = GetIpStatistics(pIpStats)) == NO_ERROR)
254 {
273 }
274 else
275 {
276 DoFormatMessage(dwRetVal);
277 }
278
279 HeapFree(GetProcessHeap(), 0, pIpStats);
280}
281
283{
284 PMIB_ICMP pIcmpStats;
285 DWORD dwRetVal;
286
287 pIcmpStats = (MIB_ICMP*) HeapAlloc(GetProcessHeap(), 0, sizeof(MIB_ICMP));
288
289 if ((dwRetVal = GetIcmpStatistics(pIcmpStats)) == NO_ERROR)
290 {
294 pIcmpStats->stats.icmpInStats.dwMsgs, pIcmpStats->stats.icmpOutStats.dwMsgs);
296 pIcmpStats->stats.icmpInStats.dwErrors, pIcmpStats->stats.icmpOutStats.dwErrors);
300 pIcmpStats->stats.icmpInStats.dwTimeExcds, pIcmpStats->stats.icmpOutStats.dwTimeExcds);
302 pIcmpStats->stats.icmpInStats.dwParmProbs, pIcmpStats->stats.icmpOutStats.dwParmProbs);
306 pIcmpStats->stats.icmpInStats.dwRedirects, pIcmpStats->stats.icmpOutStats.dwRedirects);
308 pIcmpStats->stats.icmpInStats.dwEchos, pIcmpStats->stats.icmpOutStats.dwEchos);
310 pIcmpStats->stats.icmpInStats.dwEchoReps, pIcmpStats->stats.icmpOutStats.dwEchoReps);
316 pIcmpStats->stats.icmpInStats.dwAddrMasks, pIcmpStats->stats.icmpOutStats.dwAddrMasks);
319 }
320 else
321 {
322 DoFormatMessage(dwRetVal);
323 }
324
325 HeapFree(GetProcessHeap(), 0, pIcmpStats);
326
327}
328
330{
332 DWORD dwRetVal;
333
334 if ((dwRetVal = GetTcpStatistics(&tcpStats)) == NO_ERROR)
335 {
345 }
346 else
347 {
348 DoFormatMessage(dwRetVal);
349 }
350}
351
353{
355 DWORD dwRetVal;
356
357 if ((dwRetVal = GetUdpStatistics(&udpStats)) == NO_ERROR)
358 {
364 }
365 else
366 {
367 DoFormatMessage(dwRetVal);
368 }
369}
370
372{
373 PMIB_IFTABLE pIfTable;
374 DWORD dwSize = 0;
375 DWORD dwRetVal = 0;
376
377 pIfTable = (MIB_IFTABLE*) HeapAlloc(GetProcessHeap(), 0, sizeof(MIB_IFTABLE));
378
379 if (GetIfTable(pIfTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
380 {
381 HeapFree(GetProcessHeap(), 0, pIfTable);
382 pIfTable = (MIB_IFTABLE*) HeapAlloc(GetProcessHeap(), 0, dwSize);
383
384 if ((dwRetVal = GetIfTable(pIfTable, &dwSize, 0)) == NO_ERROR)
385 {
389 pIfTable->table[0].dwInOctets, pIfTable->table[0].dwOutOctets);
391 pIfTable->table[0].dwInUcastPkts, pIfTable->table[0].dwOutUcastPkts);
393 pIfTable->table[0].dwInNUcastPkts, pIfTable->table[0].dwOutNUcastPkts);
395 pIfTable->table[0].dwInDiscards, pIfTable->table[0].dwOutDiscards);
397 pIfTable->table[0].dwInErrors, pIfTable->table[0].dwOutErrors);
399 pIfTable->table[0].dwInUnknownProtos);
400 }
401 else
402 {
403 DoFormatMessage(dwRetVal);
404 }
405 }
406 HeapFree(GetProcessHeap(), 0, pIfTable);
407}
408
410{
413 DWORD i;
414 CHAR HostIp[HOSTNAMELEN], HostPort[PORTNAMELEN];
415 CHAR RemoteIp[HOSTNAMELEN], RemotePort[PORTNAMELEN];
416 CHAR Host[ADDRESSLEN];
417 CHAR Remote[ADDRESSLEN];
418 CHAR PID[64];
419
420 /* Get the table of TCP endpoints */
422 /* Should also work when we get new connections between 2 GetTcpTable()
423 * calls: */
424 do
425 {
428 if ( error != NO_ERROR )
429 HeapFree(GetProcessHeap(), 0, tcpTable);
430 }
431 while ( error == ERROR_INSUFFICIENT_BUFFER );
432
433 if (error != NO_ERROR)
434 {
437 return FALSE;
438 }
439
440 /* Dump the TCP table */
441 for (i = 0; i < tcpTable->dwNumEntries; i++)
442 {
443 /* If we aren't showing all connections, only display established, close wait
444 * and time wait. This is the default output for netstat */
445 if (bDoShowAllCons || (tcpTable->table[i].dwState == MIB_TCP_STATE_ESTAB)
446 || (tcpTable->table[i].dwState == MIB_TCP_STATE_CLOSE_WAIT)
447 || (tcpTable->table[i].dwState == MIB_TCP_STATE_TIME_WAIT))
448 {
449 /* I've split this up so it's easier to follow */
450 GetIpHostName(TRUE, tcpTable->table[i].dwLocalAddr, HostIp, sizeof(HostIp));
451 GetPortName(tcpTable->table[i].dwLocalPort, "tcp", HostPort, sizeof(HostPort));
452 sprintf(Host, "%s:%s", HostIp, HostPort);
453
454 if (tcpTable->table[i].dwState == MIB_TCP_STATE_LISTEN)
455 {
456 sprintf(Remote, "%s:0", HostIp);
457 }
458 else
459 {
460 GetIpHostName(FALSE, tcpTable->table[i].dwRemoteAddr, RemoteIp, sizeof(RemoteIp));
461 GetPortName(tcpTable->table[i].dwRemotePort, "tcp", RemotePort, sizeof(RemotePort));
462 sprintf(Remote, "%s:%s", RemoteIp, RemotePort);
463 }
464
466 {
467 sprintf(PID, "%ld", tcpTable->table[i].dwOwningPid);
468 }
469 else
470 {
471 PID[0] = 0;
472 }
473
474 ConPrintf(StdOut, L" %-6s %-22S %-22S %-11s %S\n", L"TCP",
475 Host, Remote, TcpState[tcpTable->table[i].dwState], PID);
476 }
477 }
478
479 HeapFree(GetProcessHeap(), 0, tcpTable);
480 return TRUE;
481}
482
484{
487 DWORD i;
488 CHAR HostIp[HOSTNAMELEN], HostPort[PORTNAMELEN];
489 CHAR Host[ADDRESSLEN];
490 CHAR PID[64];
491
492 /* Get the table of UDP endpoints */
493 dwSize = 0;
496 {
499 return FALSE;
500 }
503 if (error)
504 {
508 return FALSE;
509 }
510
511 /* Dump the UDP table */
512 for (i = 0; i < udpTable->dwNumEntries; i++)
513 {
514
515 /* I've split this up so it's easier to follow */
516 GetIpHostName(TRUE, udpTable->table[i].dwLocalAddr, HostIp, sizeof(HostIp));
517 GetPortName(udpTable->table[i].dwLocalPort, "udp", HostPort, sizeof(HostPort));
518
519 sprintf(Host, "%s:%s", HostIp, HostPort);
520
522 {
523 sprintf(PID, "%ld", udpTable->table[i].dwOwningPid);
524 }
525 else
526 {
527 PID[0] = 0;
528 }
529
530 ConPrintf(StdOut, L" %-6s %-22S %-34s %S\n", L"UDP", Host, L"*:*", PID);
531 }
532
534 return TRUE;
535}
536
537/*
538 * Translate port numbers into their text equivalent if there is one
539 */
540PCHAR
541GetPortName(UINT Port, PCSTR Proto, CHAR Name[], INT NameLen)
542{
543 struct servent *pServent;
544
545 if (bDoShowNumbers)
546 {
547 sprintf(Name, "%d", htons((WORD)Port));
548 return Name;
549 }
550 /* Try to translate to a name */
551 if ((pServent = getservbyport(Port, Proto)))
552 strcpy(Name, pServent->s_name );
553 else
554 sprintf(Name, "%d", htons((WORD)Port));
555 return Name;
556}
557
558/*
559 * convert addresses into dotted decimal or hostname
560 */
561PCHAR
562GetIpHostName(BOOL Local, UINT IpAddr, CHAR Name[], INT NameLen)
563{
564// struct hostent *phostent;
565 UINT nIpAddr;
566
567 /* display dotted decimal */
568 nIpAddr = htonl(IpAddr);
569 if (bDoShowNumbers) {
570 sprintf(Name, "%d.%d.%d.%d",
571 (nIpAddr >> 24) & 0xFF,
572 (nIpAddr >> 16) & 0xFF,
573 (nIpAddr >> 8) & 0xFF,
574 (nIpAddr) & 0xFF);
575 return Name;
576 }
577
578 Name[0] = '\0';
579
580 /* try to resolve the name */
581 if (!IpAddr) {
582 if (!Local) {
583 sprintf(Name, "%d.%d.%d.%d",
584 (nIpAddr >> 24) & 0xFF,
585 (nIpAddr >> 16) & 0xFF,
586 (nIpAddr >> 8) & 0xFF,
587 (nIpAddr) & 0xFF);
588 } else {
589 if (gethostname(Name, NameLen) != 0)
591 }
592 } else if (IpAddr == 0x0100007f) {
593 if (Local) {
594 if (gethostname(Name, NameLen) != 0)
596 } else {
597 strncpy(Name, "localhost", 10);
598 }
599// } else if (phostent = gethostbyaddr((char*)&ipaddr, sizeof(nipaddr), PF_INET)) {
600// strcpy(name, phostent->h_name);
601 } else {
602 sprintf(Name, "%d.%d.%d.%d",
603 ((nIpAddr >> 24) & 0x000000FF),
604 ((nIpAddr >> 16) & 0x000000FF),
605 ((nIpAddr >> 8) & 0x000000FF),
606 ((nIpAddr) & 0x000000FF));
607 }
608 return Name;
609}
610
611/*
612 *
613 * Parse command line parameters and set any options
614 * Run display output, looping over set intervals if a number is given
615 *
616 */
617int wmain(int argc, wchar_t *argv[])
618{
620 WSADATA wsaData;
621
622 /* Initialize the Console Standard Streams */
624
625 if (!ParseCmdline(argc, argv))
626 return EXIT_FAILURE;
627
628 if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
629 {
631 return EXIT_FAILURE;
632 }
633
635 while (bLoopOutput && Success)
636 {
637 Sleep(Interval*1000);
639 }
640
641 WSACleanup();
642 return (Success ? EXIT_SUCCESS : EXIT_FAILURE);
643}
static int argc
Definition: ServiceArgs.c:12
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
struct NameRec_ * Name
Definition: cdprocs.h:460
#define IDS_USAGE
Definition: resource.h:3
void ConPuts(FILE *fp, LPCWSTR psz)
Definition: fc.c:16
#define ConInitStdStreams()
Definition: fc.c:13
void ConPrintf(FILE *fp, LPCWSTR psz,...)
Definition: fc.c:20
#define StdOut
Definition: fc.c:14
void ConResPrintf(FILE *fp, UINT nID,...)
Definition: fc.c:33
#define StdErr
Definition: fc.c:15
void ConResPuts(FILE *fp, UINT nID)
Definition: fc.c:27
#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
#define NO_ERROR
Definition: dderror.h:5
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define ERROR_SUCCESS
Definition: deptool.c:10
#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
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
#define AF_INET
Definition: tcpip.h:117
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
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:35
struct _MIB_IFTABLE MIB_IFTABLE
#define iswdigit(_c)
Definition: ctype.h:667
_Check_return_ _CRTIMP int __cdecl swscanf(_In_z_ const wchar_t *_Src, _In_z_ _Scanf_format_string_ const wchar_t *_Format,...)
#define EOF
Definition: stdio.h:24
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)
struct _MIB_IPSTATS MIB_IPSTATS
struct _MIB_ICMP MIB_ICMP
@ 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:213
#define htonl(x)
Definition: module.h:212
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#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:409
VOID ShowTcpStatistics(VOID)
Definition: netstat.c:329
enum ProtoType Protocol
BOOL ParseCmdline(int argc, wchar_t *argv[])
Definition: netstat.c:69
BOOL ShowUdpTable(VOID)
Definition: netstat.c:483
DWORD Interval
Definition: netstat.c:33
VOID DoFormatMessage(DWORD ErrorCode)
Definition: netstat.c:55
ProtoType
Definition: netstat.c:32
@ IP
Definition: netstat.c:32
@ ICMP
Definition: netstat.c:32
@ TCP
Definition: netstat.c:32
@ UDP
Definition: netstat.c:32
VOID DisplayTableHeader(VOID)
Definition: netstat.c:162
PCWSTR TcpState[]
Definition: netstat.c:36
BOOL DisplayOutput(VOID)
Definition: netstat.c:174
VOID ShowEthernetStatistics(VOID)
Definition: netstat.c:371
PCHAR GetPortName(UINT Port, PCSTR Proto, CHAR Name[], INT NameLen)
Definition: netstat.c:541
VOID ShowIcmpStatistics(VOID)
Definition: netstat.c:282
VOID ShowIpStatistics(VOID)
Definition: netstat.c:246
PCHAR GetIpHostName(BOOL Local, UINT IpAddr, CHAR Name[], INT NameLen)
Definition: netstat.c:562
VOID ShowUdpStatistics(VOID)
Definition: netstat.c:352
BOOL bNoOptions
Definition: netstat.h:8
BOOL bDoShowNumbers
Definition: netstat.h:12
BOOL bDoShowProtoCons
Definition: netstat.h:13
BOOL bDoShowEthStats
Definition: netstat.h:11
BOOL bDoShowAllCons
Definition: netstat.h:9
#define HOSTNAMELEN
Definition: netstat.h:3
BOOL bLoopOutput
Definition: netstat.h:18
BOOL bDoShowProcName
Definition: netstat.h:10
BOOL bDoShowProcessId
Definition: netstat.h:16
BOOL bDoShowProtoStats
Definition: netstat.h:15
#define PORTNAMELEN
Definition: netstat.h:4
BOOL bDoShowRouteTable
Definition: netstat.h:14
#define ADDRESSLEN
Definition: netstat.h:5
BOOL bDoDispSeqComp
Definition: netstat.h:17
#define L(x)
Definition: ntvdm.h:50
INT ConMsgPuts(IN PCON_STREAM Stream, IN DWORD dwFlags, IN LPCVOID lpSource OPTIONAL, IN DWORD dwMessageId, IN DWORD dwLanguageId)
Definition: outstream.c:837
int wmain()
#define EXIT_SUCCESS
Definition: rdjpgcom.c:55
_CRTIMP int __cdecl _wsystem(_In_opt_z_ const wchar_t *_Command)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
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:180
DWORD dwActiveOpens
Definition: tcpmib.h:179
DWORD dwRetransSegs
Definition: tcpmib.h:186
DWORD dwInSegs
Definition: tcpmib.h:184
DWORD dwOutSegs
Definition: tcpmib.h:185
DWORD dwEstabResets
Definition: tcpmib.h:182
DWORD dwCurrEstab
Definition: tcpmib.h:183
DWORD dwAttemptFails
Definition: tcpmib.h:181
MIB_TCPROW_OWNER_PID table[1]
Definition: tcpmib.h:115
DWORD dwLocalAddr
Definition: udpmib.h:28
DWORD dwLocalPort
Definition: udpmib.h:29
DWORD dwOutDatagrams
Definition: udpmib.h:81
DWORD dwInDatagrams
Definition: udpmib.h:78
DWORD dwNoPorts
Definition: udpmib.h:79
DWORD dwInErrors
Definition: udpmib.h:80
DWORD dwNumEntries
Definition: udpmib.h:34
MIB_UDPROW table[1]
Definition: udpmib.h:35
char * s_name
Definition: winsock.h:159
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
struct _MIB_TCPTABLE_OWNER_PID * PMIB_TCPTABLE_OWNER_PID
@ MIB_TCP_STATE_TIME_WAIT
Definition: tcpmib.h:38
@ MIB_TCP_STATE_ESTAB
Definition: tcpmib.h:32
@ MIB_TCP_STATE_LISTEN
Definition: tcpmib.h:29
@ MIB_TCP_STATE_CLOSE_WAIT
Definition: tcpmib.h:35
struct _MIB_TCPTABLE_OWNER_PID MIB_TCPTABLE_OWNER_PID
#define LANG_USER_DEFAULT
Definition: tnerror.cpp:50
#define towlower(c)
Definition: wctype.h:97
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define MAKEWORD(a, b)
Definition: typedefs.h:248
int32_t INT
Definition: typedefs.h:58
const char * PCSTR
Definition: typedefs.h:52
char * PCHAR
Definition: typedefs.h:51
struct _MIB_UDPTABLE_OWNER_PID * PMIB_UDPTABLE_OWNER_PID
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:423
int PASCAL FAR WSAGetLastError(void)
Definition: dllmain.c:112
int PASCAL FAR WSACleanup(void)
Definition: startup.c:60
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175