vincentx | Le voila
Code :
- int main(int argc, char** argv)
- {
- int retcode;
- WSADATA wsaData;
- char** arg;
- if (argc<2)
- goto usage;
-
-
- /* Initialisation */
- if (WSAStartup(MAKEWORD(1,1), &wsaData))
- {
- fprintf(stderr,"%s: You must use Winsock 1.1 or compatible\n",PING_NAME);
- goto error;
- }
- hIcmp = IcmpCreateFile();
-
- QueryPerformanceFrequency(&ticks_freq);
- icmp_reply=(struct icmp_echo_reply*)reply_buffer; // structure définit dans ipexport.h
- retcode=0;
- arg=argv+1;
- while (*arg!=NULL) {
- if ((*arg)[0]=='-') {
- /* Change some option value */
- switch ((*arg)[1]) {
- case 'c':
-
- arg++;
- if (sscanf(*arg,"%d",&opt_c)!=1)
- goto usage;
- if (opt_c<0)
- opt_c=DEFAULT_OPT_C_VALUE;
- options|=F_COUNT;
- break;
-
- case 'i':
- /* Sets the interval between two echo requests. */
- arg++;
- if (sscanf(*arg,"%d",&opt_i)!=1)
- goto usage;
- if (opt_i<0)
- opt_i=DEFAULT_OPT_I_VALUE;
- options|=F_INTERVAL;
- break;
-
- case 'm':
- /* Sets the TTL to use.
- */
- arg++;
- if (sscanf(*arg,"%d",&opt_m)!=1)
- goto usage;
- if (opt_m<0)
- opt_m=DEFAULT_OPT_M_VALUE;
- options|=F_MAXTTL;
- break;
-
-
- case 'q':
- /* Quiet option: only display a summary at the end.
- * Only valid in ping mode.
- */
- options|=F_QUIET;
- break;
-
- case 's':
- /*
- * Set the packet size.
- */
- arg++;
- if (sscanf(*arg,"%d",&opt_s)!=1)
- goto usage;
- if (opt_s<0)
- opt_s=DEFAULT_OPT_S_VALUE;
- options|=F_DATASIZE;
-
- break;
-
-
- case 'w':
- /*
- * Sets the time to wait for a response to an Echo Request
- */
- arg++;
- if (sscanf(*arg,"%d",&opt_w)!=1)
- goto usage;
- if (opt_w<0)
- opt_w=DEFAULT_OPT_W_VALUE;
- options|=F_TIMEOUT;
- break;
- case 'z':
- /*
- * Fills the ICMP packets with random data
- */
- options=(options & ~F_PATTERN) | F_RANDOMFILL;
- break;
- }
- } else {
- unsigned int host_addr;
- /* Get the target host address */
- host_addr=HostString2Addr(*arg); // host_addr= adr. IP convertit
- if (host_addr==INADDR_NONE) // erreur
- retcode=1;
- else
- doPing(host_addr,*arg);
- }
- arg++;
- }
- /* Do some cleanup */
- IcmpCloseHandle( hIcmp ); // close an handle open by a call to IcmpCreateFile
- WSACleanup();
- free(icmp_data);
-
- end:
- return retcode;
- error:
- retcode=1;
- goto end;
- usage:
- fprintf(stderr,"Usage: ping [-mnqw] [-c count] [-i wait] [-p pattern | -z] [-s packetsize]\n" );
- fprintf(stderr," host [host...]\n" );
- fprintf(stderr," or ping -t [-mnqw] [-i wait] [-p pattern | -z] [-s packetsize]\n" );
- fprintf(stderr," host [host...]\n" );
- fprintf(stderr," The following options are recognised for compatibility with the \n" );
- fprintf(stderr," Unix ping but are not implemented: [-dfrRv] [-l preload]\n" );
- retcode=2;
- goto end;
- }
|
Message édité par vincentx le 22-04-2004 à 17:27:47
|