Checking IPX Communication and Obtaining Node Addresses

Environment: Windows NT 4 SP5, Visual C++ 6 SP2

In a recent project that uses an IPX protocol for communication between multiple Windows NT stations and multiple DOS stations, I needed to find out the IPX node address of the local computer as well as the node addresses of all computers on the network (running under Windows or DOS). So, I designed 2 programs (one 32 bit for Windows and the second 16 bit for DOS) that support the same custom packet type. The final result is an application that shows the node address of each computer in a network that is running either one of the programs together with the local time on each computer.

On DOS side, I am using a direct interrupt call to IPX/SPX driver installed on a DOS machine. On Windows side, I am using Winsock 2 API for IPX communication. Setting up initial communication was a bit complicated but the final code is very simple.

The idea is the following: Each application is running under a timer. When timer expires (1 second), the application broadcasts a packet with its local time and its user defined name. This broadcast packet is catched by all stations (including the sending station) and is displayed in a list. If it already exists in a list, the list item is updated. Since this is a connectionless communication, technique for obtaining the sender's IPX node address is different for DOS and Windows. DOS code directly takes the sender's node address from the IPX packet. However, since Windows application is using Winsock 2, access to packet structure is not available. Within a Winsock window message handler, application executes a recvfrom() function call that returns a node address of the sender.

These 2 applications proved to be very useful since one can obtain all the node addresses but also (and this is very important) can check whether the support for IPX communication is installed on the machine (either Windows or DOS) and check whether the IPX communication is running correctly (even if all is ok, stations may be invisible to each other if an Ethernet frame type is not the same). So, these 2 applications are also a good diagnostic tools.

I plan to work on the same application (only Windows version) that supports the TCP/IP protocol (actually only IP since it is going to work using an UDP protocol). You can check for the latest info on www.scasoftware.com.

Downloads

Download demo project - 60 Kb


Comments

  • vimax

    Posted by ImpobeKep on 02/20/2013 08:09pm

    So, phn375shpus2/18/13 if you would like to get a lot more information about vimax you should observe this movie review. Don't forget, Vimax pills can perform but only if you give them time to perform and just take them day-to-day. buy vimax

    Reply
  • Making IPXCheck32 work on Windows 98

    Posted by Legacy on 12/15/2003 12:00am

    Originally posted by: Steven

    On Windows 98 the call to bind() in the OnCreate handler fails. This is because the node address in the m_Address structure is set to 0xFFFFFFFFFFFF. For bind() to succeed this needs to be set to 0x000000000000 for Windows 98. But then the broadcast (sendto) in the timerhandler would fail. The solution is to create a second SOCKADDR membervariable, for example: SOCKADDR m_ReceiveAddress. Initialize it in the OnCreate handler right after the variable m_Address is initialized: createAddress(&m_ReceiveAddress,"00000000","000000000000","5050");
    Then use &m_ReceiveAddress instead of &m_Address as the second parameter in the call to bind().


    Reply
  • How to sniff ip packets using SNMP?

    Posted by Legacy on 05/26/2003 12:00am

    Originally posted by: Cristi Ola

    Does anybody know how I, as an administrator, can get the IP or/and IPX packets received by a remote host on my network, using SNMP?

    Reply
  • CDT communication protocol

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

    Originally posted by: zhyzmx

    How to organize data in CDT communication protocol? 
    

    Reply
  • Why my network not working?

    Posted by Legacy on 05/30/2002 12:00am

    Originally posted by: Yian

    Hi,

    I recently connected five computers together. They all running same 16 bit network program on them. Three of them are running the program in dos environment and the others running in windows. I can get computers in dos to communicate with each other. I also can get computers in windows to communicate to each other. However I'm having trouble to make computer running in windows to talk to computer running in dos. Could you help me to fix this problem?

    These computers are setup as following:

    They all have same D-Link network card.

    For dos:
    I loaded IPX/SPX driver that came with network card in config.sys and autoexec.bat.

    For windows:
    I updated the driver to NDIS2.DOS that also came with network card and selected IPX/SPX compatible Protocol.

    In addition, I had once removed the NDIS2.DOS and IPX/SPX compatible protocol in windows and loaded IPX/SPX driver in config.sys and autoexec.bat as I did in dos. They were able to communicate to each other for a while then the windows crashed after transmitted 1 or 2 files. However I never have this problem when two computers in windows communicate to each other. Why?

    Error messages from windows are:
    - A fatal exception OD has occurred at 09D3:000013B1. The current application will be terminated.
    - This program has performed an illegal operation and will be terminated.

    Sometime it hangs or give you a black screen.

    Please e-mail me back if you have any idea.

    Reply
  • Can you help me?

    Posted by Legacy on 05/29/2002 12:00am

    Originally posted by: guoxuemei

    I want to learn more about IPX/SPX programing on DOS16,but I can't find the material.Can you tell me where can I find them?
    Thanks a lot for your help!

    Reply
  • local node address is same to local MAC address,Why?

    Posted by Legacy on 08/22/2001 12:00am

    Originally posted by: mzikey

    how can I get the IPX net address?
    thanks.

    Reply
  • Cannot receive in win98

    Posted by Legacy on 01/28/2000 12:00am

    Originally posted by: bruce harkness

    I would like to use this in one of my apps but I cannot get it to work on a windows 98 client. Win98 does NOT receive any MSG_WINSOCK Messages. Works fine on Windows NT.
    A WSAEINVAL (10022) occurs when calling the bind function.
    any help!

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

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • With the average hard drive now averaging one terabyte in size, the fallout from the explosion of user-created data has become an overwhelming volume of potential evidence that law-enforcement and corporate investigators spend countless hours examining. Join Us and SANS' Rob Lee for our 45-minute webinar, A Triage and Collection Strategy for Time-Sensitive Investigations, will demonstrate how to: Identify the folders and files that often contain key insights Reduce the time spent sifting through content by …

Most Popular Programming Stories

More for Developers

RSS Feeds