Click here to Skip to main content
Click here to Skip to main content
Go to top

Fake (or Anonymous) NetSend for Windows NT/2000/XP

, 17 Jun 2003
Rate this:
Please Sign up or sign in to vote.
The Fake NetSend is a little utility that can be used to send anonymous (or fake) messages through your Windows Network.

Introduction

A few years ago I was working at a software development company and one day my co-worker asked me if would be possible to use the Windows Net Send mechanism to send messages through the corporate network using some programming language like C++. I found the idea very interesting since we could implement this functionality in some of our applications so they could send messages to our computers when an exception occurs and/or something goes wrong.

After some time of MSDN and Google, learning about MailSlots, I could write the first test program and, for our surprise, worked like a charm.

With our program ready, we've started do create a generic function to send the messages, so we could make it avaliable at our "shared" directory, when I got an idea: "What if we use an invalid User Name to send the message?". Well, I think I don't need to tell you how this history ends Smile | :)

Background Information

The FakeSend (and Net Send) mechanism is very simple. It uses an Interprocess Communication (IPC) resource called "MailSlots". We can create MailSlots to swap messages between applications on a network environment just like we do with Sockets, Named Pipes, etc... The MailSlot internally uses a datagram socket, which means that we cannot be sure if the message has arrived. To learn more about MailSlots read the MailSlot Reference from MSDN Library.

Using the code

The code is very straightforward. We have the main function NetSend() that receives three values:

  • szSender - The name of the person who is sending the message (Any name you want);
  • szReceiver - The User Name (Network Login) or Machine name of the person who will receive the message;
  • szMessage - The Message you want to send.
bool NetSend(const char * szSender, const char * szReceiver,
             const char * szMessage)
{
    // Our main variables
    char * pszMailSlot = NULL;
    unsigned char * pucMessage = NULL;
    unsigned int nMailSlotLen, nMsgFormatLen;

    HANDLE hHandle;
    DWORD dwBytesWritten;
    bool bRet = false;

    // Get the length of the strings
    nMailSlotLen  = strlen(szReceiver) + sizeof(szMailSlotPath);
    nMsgFormatLen = strlen(szSender) + strlen(szReceiver) +
                    strlen(szMessage) + sizeof(szMsgFormat);

    // Allocate necessary memory
    pszMailSlot = new char[nMailSlotLen];
    pucMessage  = new unsigned char[nMsgFormatLen];

    // Network path for <Receiver> MailSlot:
    // "\\Receiver\MAILSLOT\messngr"
    sprintf(pszMailSlot, szMailSlotPath, szReceiver);

    // Message Format:
    // "Sender\0Receiver\0Message\0"
    // sprintf doesn't work with \0 so here I'm using \r
    sprintf((char *)pucMessage, szMsgFormat, szSender,
                                szReceiver, szMessage);

    // Replace all '\r' characters with '\0'
    for (unsigned short i = 0; i < nMsgFormatLen; i++)
    {
        if (pucMessage[i] == '\r')
            pucMessage[i] = '\0';

        else if (pucMessage[i] == '\0')
            break;
    }

    // Create the file into Receiver's MailSlot and get a Handle to this file
    hHandle = CreateFile(pszMailSlot, GENERIC_WRITE, FILE_SHARE_READ, NULL,
                            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    // Do we have a valid handle?
    if (hHandle)
    {
        // Write the message to file
        bRet = (WriteFile(hHandle, pucMessage, (DWORD)nMsgFormatLen,
                    &dwBytesWritten, NULL) == TRUE);

        // Free the handle
        CloseHandle(hHandle);
    }

    return bRet;
}

History

  • 2003-06-08 - First version of FakeSend. Bugs: Zero, I hope Smile | :)
  • 2003-06-11 - Version 1.01. Just improving the code.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Caio Proiete
Software Developer (Senior)
Portugal Portugal
Caio Proiete has been programming for over 10 years, having first started with Clipper Summer'87.
 
He loves software development and reverse engineering. Today his main development technologies includes ASP .NET MVC, jQuery, HTML5, Silverlight, and WCF. He also has the following titles:
 
MVP - Microsoft Most Valuable Professional;
MCT - Microsoft Certified Trainer;
MCPD - Microsoft Certified Professional Developer;
MCTS - Microsoft Certified Technology Specialist;
MCSD - Microsoft Certified Solution Developer;
MCDBA - Microsoft Certified Database Administrator.
 
Technical blog:
http://caioproiete.net
Follow on   Twitter

Comments and Discussions

 
GeneralA little memory leak Pinmembermmagnani7113-Apr-04 4:20 
GeneralNew to C++ Pinsussanonymous11-Feb-04 7:55 
GeneralRe: New to C++ PinmemberCaio Proiete14-Feb-04 15:17 
GeneralUsername doesn't work Pinmemberltransler10-Feb-04 21:20 
GeneralRe: Username doesn't work PinmemberCaio Proiete14-Feb-04 15:22 
GeneralRe: Username doesn't work PinsussAnonymous2-Apr-04 0:53 
Questionvirtual ip on remote side? Pinmember*scenera*8-Feb-04 19:15 
AnswerRe: virtual ip on remote side? PinmemberCaio Proiete14-Feb-04 16:16 
QuestionHow to get the message in the other computer PinmemberFad B29-Jan-04 1:11 
AnswerRe: How to get the message in the other computer PinmemberCaio Proiete14-Feb-04 16:10 
GeneralVB Code for FakeSend Pinmemberasdfgafasfdasf19-Dec-03 16:19 
GeneralRe: VB Code for FakeSend PinmemberCaio Proiete14-Feb-04 16:05 
GeneralRe: VB Code for FakeSend Pinsussanon vb newbie18-Mar-04 18:36 
Generaldon't know how to work it PinmemberJohnny B6-Dec-03 16:37 
GeneralRe: don't know how to work it PinmemberCaio Proiete6-Dec-03 23:18 
GeneralRe: don't know how to work it PinsussAnonymous7-Dec-03 5:20 
QuestionWhy does it send 2 messages out? Pinmemberasdfgafasfdasf5-Dec-03 19:41 
AnswerRe: Why does it send 2 messages out? PinmemberCaio Proiete6-Dec-03 23:23 
GeneralWhy can't send msg to a IP Address. Pinmemberclonesheep1-Nov-03 20:42 
GeneralRe: Why can't send msg to a IP Address. PinmemberCaio Proiete6-Dec-03 23:26 
QuestionHow do i put ICONS on it PinmemberOsrald6-Oct-03 3:31 
AnswerRe: How do i put ICONS on it PinmemberCaio Proiete6-Dec-03 23:29 
GeneralPlease Give Me Code VB6 Or C++ To Net Send Anonymous PinsussAnonymous3-Oct-03 17:32 
GeneralRe: Please Give Me Code VB6 Or C++ To Net Send Anonymous PinmemberCaio Proiete3-Oct-03 17:38 
GeneralRe: Please Give Me Code VB6 Or C++ To Net Send Anonymous Pinmembermattwright21-Dec-05 9:59 
GeneralTRACING Pinsussjettajeff8724-Sep-03 14:59 
GeneralRe: TRACING PinmemberCaio Proiete3-Oct-03 17:44 
QuestionIs there a way to really know who is the sender? PinmemberBandu Patil27-Aug-03 2:10 
AnswerRe: Is there a way to really know who is the sender? PinmemberCaio Proiete3-Oct-03 17:48 
GeneralRe: Is there a way to really know who is the sender? PinsussAnonymous25-Jan-04 21:40 
GeneralMessage size is limited Pinmemberotwesten8-Aug-03 4:54 
GeneralRe: Message size is limited PinmemberCaio Proiete8-Aug-03 6:11 
GeneralRe: Message size is limited Pinmemberotwesten2-Sep-03 7:44 
GeneralRe: Message size is limited PinmemberCaio Proiete3-Oct-03 17:37 
GeneralRe: Message size is limited Pinmemberotwesten6-Oct-03 1:56 
GeneralUse of mailslots Pinmemberrama_ii25-Jun-03 14:33 
GeneralRe: Use of mailslots PinmemberCaio Proiete6-Dec-03 23:32 
GeneralDate of version PinmemberQuiOui18-Jun-03 14:33 
GeneralRe: Date of version PinmemberCaio Proiete18-Jun-03 16:41 
QuestionUnicode ? PinmemberDavide Calabro18-Jun-03 9:40 
AnswerRe: Unicode ? PinmemberCaio Proiete18-Jun-03 12:53 
GeneralWhere does the messenger service gets invoked here PinmemberVijayKarthik18-Jun-03 3:18 
GeneralRe: Where does the messenger service gets invoked here PinmemberCaio Proiete18-Jun-03 5:58 
GeneralMissing Something... PinmemberStephen Quattlebaum11-Jun-03 6:01 
Questionwhy not close handle of mailslot? Pinmemberlallous11-Jun-03 4:33 
AnswerRe: why not close handle of mailslot? PinmemberCaio Proiete12-Jun-03 3:34 
GeneralA few issues... PinmemberRyan Binns9-Jun-03 4:12 
GeneralRe: A few issues... PinmemberCaio Proiete12-Jun-03 3:33 
Generalmessage fairy PinmemberXSimon8-Jun-03 18:57 
GeneralRe: message fairy PinmemberCaio Proiete12-Jun-03 3:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140926.1 | Last Updated 18 Jun 2003
Article Copyright 2003 by Caio Proiete
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid