Send.cpp

This example demonstrates how to send packets from C++.
See also:
PacketX , Adapter , SendPacket
// File:         Send.cpp
//
// Description:  This sample demonstrates how to send packets from C++.
//
// Notes:        Compile with Microsoft Visual C++ 6.0 or .NET
//
// Created:      May 10, 2004
//
// Copyright (c) 2000-2004 BeeSync Technologies.

#define WIN32_LEAN_AND_MEAN

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif

#include <atlbase.h>
#include <stdio.h>
#include <time.h>

#import "PacketX.dll" no_namespace, named_guids

// Packet
BYTE Packet[] =
{
   0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#define PacketSize sizeof(Packet)

// Main entry point
int main(int argc, char* argv[])
{
   // Initialize COM
   CoInitializeEx(NULL,COINIT_MULTITHREADED);

   // Create PacketX object
   IPktXPacketXPtr pPktX(__uuidof(PacketX));

   // Display network adapters
   LONG lCount= IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetCount();
   for (int i=0; i < lCount; i++)
   {
      // If adapter is good print adapter properties
      IPktXAdapterPtr pAdapter = IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetItem(i+1);
      if (pAdapter->GetIsGood())
      {
         _bstr_t bstrtDesciption = pAdapter->GetDescription();
         printf("(%d) %s\n",i+1,(char*)bstrtDesciption);
      }
   }
   // Select network adapter
   pPktX->PutAdapter(NULL);
   while (pPktX->GetAdapter() == NULL)
   {
      char buffer[256];
      printf("Choose adapter#");
      try { pPktX->PutAdapter(IPktXAdapterCollectionPtr(
         pPktX->GetAdapters())->GetItem(atoi(gets(buffer)))); }
      catch ( _com_error& ) {}
   }
   // Create safe array containing raw packet and fill it
   LPSAFEARRAY psa = SafeArrayCreateVector(VT_VARIANT,0,PacketSize);
   LPVARIANT rgElems;
   SafeArrayAccessData(psa,(LPVOID*)&rgElems);
   for (i=0; i < PacketSize; i++)
   {
      VariantInit(&rgElems[i]);
      V_VT(&rgElems[i])=VT_UI1;
      V_UI1(&rgElems[i])=Packet[i];
   }
   // Create variant for safearray
   VARIANT Buffer;
   VariantInit(&Buffer);
   Buffer.vt = VT_VARIANT|VT_ARRAY;
   Buffer.parray = psa;

   // Send raw packet, repeat 100 times
   IPktXAdapterPtr(pPktX->GetAdapter())->SendPacket(Buffer, CComVariant(100));

   // Cleanup
   SafeArrayUnaccessData(psa);
   SafeArrayDestroy(psa);
   pPktX = NULL;

   // Uninitialize COM
   CoUninitialize();
   return 0;
}

Copyright © 2000-2007 beeSync. All rights reserved.