Exploring Trace Routes | CodeGuru

Exploring Trace Routes

Click here for a larger image. Environment: VC6 SP4, NT4 SP3, winCE 2.0 Introduction This project was undertaken because of the need to explore sockets and their different uses. I started by making a ping program that pinged the network addresses. The ping program was inspired by FAQs at http://tangentsoft.net/wskfaq/ and mostly used their functions!!!! […]

Written By
CodeGuru Staff
CodeGuru Staff
Dec 5, 2002
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More



Click here for a larger image.

Environment: VC6 SP4, NT4 SP3, winCE 2.0

Introduction

This project was undertaken because of the need to explore sockets and their different uses. I started by making a ping program that pinged the network addresses. The ping program was inspired by FAQs at http://tangentsoft.net/wskfaq/ and mostly used their functions!!!! The route program is an enhancement of the same program (ping program) that used raw sockets.

How to Run It

The standard Trace Route that comes with the Windows Operating System was basically an example for me to emulate. The shortcomings (which is my point of view) with the standard Trace Route was the delay it had, which takes three (and I presume ICMP Packet replies). My program takes one ICMP reply. As soon as I get an ICMP_ECHO(integer 0) reply, I know that the packet has reached the destination and the program exits.

Go to Command Prompt … in the Dos Prompt. Type the Path or the EXE and with space, type the URL or ip Address such as C:\>TracesRoutes.exe x.x.x.x Remember to type a valid IP Address; otherwise, an error message “Destination Unreachable ” would be given.

Advertisement

The Code

All of the code is the same except for a few changes here and there. The main function is Decode_Reply.

int decode_reply( IPHeader* reply, int bytes, sockaddr_in* from )
{
……
    // Make sure the reply is sane
    if (bytes < header_len + ICMP_MIN)
    {
        cerr << “too few bytes from ” << inet_ntoa(from->sin_addr)
                                      << endl;
        return -1;
    }
    else if ( icmphdr->type != ICMP_ECHO_REPLY )
    {
        if ( icmphdr->type != ICMP_TTL_EXPIRE )
        {
            if ( icmphdr->type == ICMP_DEST_UNREACH )
            {
                cerr << “Destination unreachable” << endl;
            }
            else
            {
                cerr << “Unknown ICMP packet type ”
                     << int(icmphdr->type) <<
                        ” received” << endl;
            }
            return -1;
        }
        // If “TTL expired”, fall through. Next test will fail
        // if we try it, so we need a way past it.
    }
    else if (icmphdr->id != (USHORT)GetCurrentProcessId())
    {
        // Must be a reply for another pinger running locally,
        // so just ignore it.
        return -2;
    }
    // Okay, we ran the gamut, so the packet must be legal —
    // dump it
    if (( icmphdr->type == ICMP_TTL_EXPIRE ) ||
        ( icmphdr->type == ICMP_ECHO_REPLY ) )
    {
        in_addr in;
        in.S_un.S_addr = reply->source_ip;
        cout << “\n Source IP ” << inet_ntoa( in ) ;
        int nTime = GetTickCount () – ulTimestamp ;
        if ( nTime < 0 )
        {
            cout << ”  Time: ” << “<10 ms.”
                 << endl;
        }
        else
        {
            cout << ”  Time: ” << ( GetTickCount() –
                 ulTimestamp ) << ” ms.” << endl;
        }
    }
………
    return> 0;
}

Problems?

If you are facing problems, contact your system administrator. I have tested this software on both private and public IPs. Mostly, System Administrators disable this functionality. If you are on a network, you can trace another computer on same network to test it.

Comments?

Kindly send your comments to http://babarq.netfirms.com. Thanx.

Downloads

Download demo project – 36 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.