00001 /* 00002 * Copyright (c) 1999 - 2003 00003 * NetGroup, Politecnico di Torino (Italy) 00004 * All rights reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions 00008 * are met: 00009 * 00010 * 1. Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * 2. Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in the 00014 * documentation and/or other materials provided with the distribution. 00015 * 3. Neither the name of the Politecnico di Torino nor the names of its 00016 * contributors may be used to endorse or promote products derived from 00017 * this software without specific prior written permission. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00020 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00021 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00022 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00023 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00024 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00025 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00026 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00027 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00029 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 * 00031 */ 00032 00033 00034 #include <stdio.h> 00035 #include <conio.h> 00036 #include <time.h> 00037 00038 #include "..\..\..\Include\packet32.h" 00039 00040 00041 #define Max_Num_Adapter 10 00042 00043 // Prototypes 00044 00045 void PrintPackets(LPPACKET lpPacket); 00046 00047 char AdapterList[Max_Num_Adapter][8192]; 00048 00049 00050 00051 int main(int argc, char **argv) 00052 { 00053 char packetbuff[5000]; 00054 00055 // define a pointer to a ADAPTER structure 00056 00057 LPADAPTER lpAdapter = 0; 00058 00059 // define a pointer to a PACKET structure 00060 00061 LPPACKET lpPacket; 00062 00063 int i,npacks,Snaplen; 00064 DWORD dwErrorCode; 00065 00066 //ascii strings 00067 char AdapterName[8192]; // string that contains a list of the network adapters 00068 char *temp,*temp1; 00069 00070 int AdapterNum=0,Open; 00071 ULONG AdapterLength; 00072 00073 float cpu_time; 00074 00075 printf("Traffic Generator v 0.9999\nCopyright 1999 Loris Degioanni (loris@netgroup-serv.polito.it)"); 00076 printf("\nSends a set of packets to the network using packet.dll API.\n"); 00077 00078 if (argc == 1){ 00079 printf("\n\n Usage: TestpacketSend [-i adapter] -n npacks -s size"); 00080 printf("\n size is between 60 and 1514\n\n"); 00081 return -1; 00082 } 00083 00084 00085 AdapterName[0]=0; 00086 00087 //get the command line parameters 00088 for(i=1;i<argc;i+=2){ 00089 00090 switch (argv[i] [1]) 00091 { 00092 00093 case 'i': 00094 sscanf(argv[i+1],"%s",AdapterName); 00095 break; 00096 00097 case 'n': 00098 sscanf(argv[i+1],"%d",&npacks); 00099 break; 00100 00101 case 's': 00102 sscanf(argv[i+1],"%d",&Snaplen); 00103 break; 00104 00105 } 00106 00107 } 00108 00109 00110 00111 if(AdapterName[0]==0){ 00112 00113 // 00114 // Obtain the name of the adapters installed on this machine 00115 // 00116 printf("Adapters installed:\n"); 00117 i=0; 00118 00119 AdapterLength = sizeof(AdapterName); 00120 00121 if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ 00122 printf("Unable to retrieve the list of the adapters!\n"); 00123 return -1; 00124 } 00125 temp=AdapterName; 00126 temp1=AdapterName; 00127 00128 while ((*temp!='\0')||(*(temp-1)!='\0')) 00129 { 00130 if (*temp=='\0') 00131 { 00132 memcpy(AdapterList[i],temp1,temp-temp1); 00133 temp1=temp+1; 00134 i++; 00135 } 00136 temp++; 00137 } 00138 00139 AdapterNum=i; 00140 for (i=0;i<AdapterNum;i++) 00141 printf("\n%d- %s\n",i+1,AdapterList[i]); 00142 printf("\n"); 00143 00144 do 00145 { 00146 printf("Select the number of the adapter to open : ");scanf("%d",&Open); 00147 if (Open>AdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); 00148 } while (Open>AdapterNum); 00149 00150 00151 00152 00153 lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); 00154 00155 if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) 00156 { 00157 dwErrorCode=GetLastError(); 00158 printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); 00159 00160 return(-1); 00161 } 00162 00163 } 00164 else{ 00165 00166 lpAdapter = PacketOpenAdapter(AdapterName); 00167 00168 if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) 00169 { 00170 dwErrorCode=GetLastError(); 00171 printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); 00172 00173 return(-1); 00174 } 00175 00176 } 00177 00178 if((lpPacket = PacketAllocatePacket())==NULL){ 00179 printf("\nError:failed to allocate the LPPACKET structure."); 00180 return (-1); 00181 } 00182 00183 packetbuff[0]=1; 00184 packetbuff[1]=1; 00185 packetbuff[2]=1; 00186 packetbuff[3]=1; 00187 packetbuff[4]=1; 00188 packetbuff[5]=1; 00189 00190 packetbuff[6]=2; 00191 packetbuff[7]=2; 00192 packetbuff[8]=2; 00193 packetbuff[9]=2; 00194 packetbuff[10]=2; 00195 packetbuff[11]=2; 00196 00197 for(i=12;i<1514;i++){ 00198 packetbuff[i]=i%256; 00199 } 00200 00201 PacketInitPacket(lpPacket,packetbuff,Snaplen); 00202 // capture the packet 00203 00204 00205 if(PacketSetNumWrites(lpAdapter,npacks)==FALSE){ 00206 printf("warning: Unable to send more than one packet in a single write!\n"); 00207 } 00208 00209 printf("\n\nGenerating %d packets...",npacks); 00210 00211 cpu_time = (float)clock (); 00212 00213 if(PacketSendPacket(lpAdapter,lpPacket,TRUE)==FALSE){ 00214 printf("Error sending the packets!\n"); 00215 return -1; 00216 } 00217 00218 cpu_time = (clock() - cpu_time)/CLK_TCK; 00219 00220 printf ("\n\nElapsed time: %5.3f\n", cpu_time); 00221 printf ("\nTotal packets generated = %d", npacks); 00222 printf ("\nTotal bytes generated = %d", (Snaplen+24)*npacks); 00223 printf ("\nTotal bits generated = %d", (Snaplen+24)*npacks*8); 00224 printf ("\nAverage packets per second = %d", (int)((double)npacks/cpu_time)); 00225 printf ("\nAverage bytes per second = %d", (int)((double)((Snaplen+24)*npacks)/cpu_time)); 00226 printf ("\nAverage bits per second = %d", (int)((double)((Snaplen+24)*npacks*8)/cpu_time)); 00227 printf ("\n"); 00228 00229 PacketFreePacket(lpPacket); 00230 00231 // close the adapter and exit 00232 00233 PacketCloseAdapter(lpAdapter); 00234 return (0); 00235 }
documentation. Copyright (c) 2002-2003 Politecnico di Torino. All rights reserved.