Internet tools

Download Source Code and Example

The NETTOOLS project is an example of how to interface with Microsofts ICMP.DLL and INETMIB.DLL. These somewhat documented DLLs are supplied by Microsoft to allow MSs DOS programs PING, TRACERT and NETSTAT access to the low-level IP header and MIB information. Since MSs Winsock implementation does not support RAW sockets they had to create this API For themselves. Thanks to many hackers with nothing else to do we too can use the API. MS does say It Will Go Away" so keep this in mind!


The PING and TRACERT code is implemented as an MFC thread. The main app Creates and Starts the thread when the app is started. The thread then just sits There and waits for the app to POST a request. Once the operation is started The thread posts a message back to the app for each line of output to be displayed In the main apps LISTBOX. A structure is used to pass information from The PING/TRACERT dialog box to the thread. The reason for the thread Is the ICMP.DLL. It uses the ASYNCH calls to Winsock. If you didnt Process the DLL calls in a thread the user would be HourGlassed! The thread Also allows the user to cancel the request.

Info on ICMP.DLL can be found in the SDK. You can download the Platform SDK additional component section or you can find it on the Internet at Various sites.

The Pingthread.cpp and .h files contain all the code to handle PING and TRACERT requests. Pingparmlist.h contains the structure for passing The parameters.


Contains the define statements for the user messages being used by the Threads.


Contains function prototypes for the user messages and Allocates the thread class and the parmlist Structure.


Contains the code to process the messages from The thread creates the events that are used to start and stop the thread, create the thread, starts and stops the thread.

The way the thread works is a little strange, plus I was just learning how to Do threads when I wrote this. I used EVENTS to Initiate and Terminate the Thread via the Frame. The thread itself uses windows user messages to Post back the data from the operation.

The mainfrm constructor creates the events then creates a new thread. The thread classes start function is then called. If the thread is created The thread waits for the app to set the StartPing event. This tells the Thread to wake up and process a request. The app then goes about its Business until the thread posts a USER message back.



a global function that IS the THREAD. Wait to be started. If started were We also asked to die, if not then process A TRACERT or PING. Post msg when done. Go back to sleep (waiting for start event). Set the PingDead event if we were asked To die. (in this case at app termination).


call the CreateThread and InitInstance functions. InitInstance starts Winsock this is required prior to using the ICMP.DLL plus the thread is also making Winsock calls to resolve Hostnames and addresses. Then load ICMP and store the address of the functions being Used.


Sets up the IP options for ICMP. The IP options are basically the same values used in an IP header.



Does just that. It breaks up the ICMP reply plus any network info returned. I.e. route info


Does Nothing but must be changed to Public in the Class header file. App wizard makes it private. It must be public in order to delete the thread.


Deletes the DLL and stops Winsock.


The Threads overloaded constructor set a pointer To CpingThreadProc,Sets autodelete to false and sets A pointer to parm list. After the constructor is called The thread class now knows where the Thread process Function is.


Cancels the PING or TRACERT request without terminating the thread. A BOOL is set to TRUE. The other thread functions test this value after every async request

Known Problems

Release Build crashes when optimization options are on.

Reference materials used:

Developing Professional Applications for Win95 and NT using MFC
Windows Sockets Network Programming
Winsock Specification
RFC-791 IP Protocol
RFC-792 ICMP Protocol


The NETSTAT utility uses the INETMIB1.DLL supplied with NT. The MIBs are used To provide Statistical information for IP. By using INETMIB1 there is no need to Install the SNMP manager in order to get the Stats. The SNMP API is fully documented And useable after SNMP is installed on the machine. The supplied INETMIB however Is not documented. The Inet thread is done in the same fashion as the Ping thread.

InetThread.cpp - Contains the code to implement the INETMIB1.DLL as a thread.


IS the thread procedure.


Sets up the pointer to the thread proc and turns off the Auto delete option.


Does nothing but it must be define as public to allow delete to be used.


Loads the DLL and set pointers to its functions.


Determines which options are passed and calls the Corresponding function.


Called to delete the DLL and close Winsock.


Terminates the request while keeping the thread alive.

The actual processing of the MIB data is well beyond the scope of this document. The best way to understand it is to look at the code while reading through the reference Information.

The SMNP extension functions used in the INETMIB1.DLL are documented In the MSDN library. This undocumented DLL just so happens to use the Same function names and format of the basic functions for SNMP. However The real SNMP DLL supplied when SMNP manager is installed contains A richer API.

Reference materials used:

MSDN Microsoft Windows NT SMNP Agent Extensions
MIB II Objects. Documents the format of the MIBs.

Microsofts SMNPUTIL.EXE. This program is available from Microsoft in source format. It requires that SMNP manager be installed on the machine. Its a DOS Based program that Will dump the MIBs to the screen so you can get an idea of how they look and let you practice Navigating through the MIB tree before writing the code that processes them.

RFC-1155 MIB structures for TCP/IP networks
RFC-1157 SMNP Protocol

The Goal behind writing this program was to learn MFC thread processing and at the same Time learn a little about TCP/IP. Both topics could fill a book in themselves. I think what I really learned here is perseverance. It took a lot of time and study To get this working and I ended up with a very very simple program that demonstrates The basics for learning how TCP works.

Last updated: 14 April 1998


  • real good stuff

    Posted by Legacy on 01/02/2003 12:00am

    Originally posted by: tarun

    Real good stuff....keep it up i liked the way you admitted that you did it learning..

  • Extra information on SNMP

    Posted by Legacy on 07/12/2002 12:00am

    Originally posted by: Gordon Thompson

    I found this URL to be very helpful :

  • Fix for the crash in Build release

    Posted by Legacy on 07/07/2001 12:00am

    Originally posted by: Frederic Gloannec

    In pingthread.h:

    CALLBACK keyword is missing for DLL entries:


    old code was:

    typedef HANDLE (*ICMPCREATEFILE)(void);

  • I have download 3 times that but always get bad archive only with it

    Posted by Legacy on 02/06/1999 12:00am

    Originally posted by: Ibrar

    I have download 3 times that but always get bad archive only with it

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Anthony Christie, the Chief Marketing Officer for Level Communications, is responsible for customer experience, worldwide marketing and product management. In this informative asset, he shares his insights into why a private network connection to cloud-bases applications is the right decision for your enterprise. Download now to find out more.

  • Enterprises are increasingly looking to platform as a service (PaaS) to lower their costs and speed their time to market for new applications. Developing, deploying, and managing applications in the cloud eliminates the time and expense of managing a physical infrastructure to support them. PaaS offerings must deliver additional long-term benefits, such as a lower total cost of ownership (TCO), rapid scalability, and ease of integration, all while providing robust security and availability. This report …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date