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!!!! 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.

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


Comments

  • TraceRoute

    Posted by Legacy on 07/31/2003 12:00am

    Originally posted by: Babar

    Updated .... but dont know how to Edit my Contribution here .... ask me for Src

    Reply
  • problem

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

    Originally posted by: luru

    Maybe you haven't set proper wait timeout.So when it receives nothing,it will down.

    Reply
  • Source

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

    Originally posted by: Richard

    Could you please post the source code?

    Thanks,
    Richard

    • Do you have the Java source code,please?

      Posted by fengyeqing on 04/15/2005 09:54pm

      My E_mail: sunzhiyang2003@yahoo.com.cn

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

Top White Papers and Webcasts

  • Cloud computing isn't new, but it's still a hot topic in technology circles. Moving to the cloud has done great things for many businesses. When it comes to handling a basic business necessity, cloud computing has brought many improvements to overall business continuity. Using the cloud for DR makes a lot of sense for many, but it's not exactly the most simple concept. Read this eBook to find answers to all the key questions IT professionals have about cloud-based disaster recovery, and helpful info around the …

  • Thanks to wide spread cloud hosting and innovations small businesses can meet and exceed the legacy systems of goliath corporations. Explore the freedom to work how you want, with a phone system that will adapt to your evolving needs and actually save you lots of expense—read Get an Enterprise Phone System without High Cost and Complexity. The article clearly illustrates: The only hardware you'll need is phone equipment for advanced voice and fax. How to join all your employees, mobile devices, …

Most Popular Programming Stories

More for Developers

RSS Feeds

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