Ping命令完整代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#include

#include "winsock.h"

#pragma comment(lib,"Ws2_32.lib");

#define SEND_SIZE 32

#define PACKET_SIZE 4096

#define ICMP_ECHO 8

#define ICMP_ECHOREPL Y 0

struct icmp

{

unsigned char icmp_type; // 消息类型

unsigned char icmp_code; // 代码

unsigned short icmp_cksum; // 校验和

unsigned short icmp_id; // 用来惟一标识此请求的ID号,通常设置为进程ID unsigned short icmp_seq; // 序列号

unsigned long icmp_data; // 时间戳

};

struct ip

{

unsigned char ip_hl:4; //首部长度

unsigned char ip_v:4; //ip版本号

unsigned char ip_tos; //服务类型

unsigned short ip_len; // 总长度

unsigned short ip_id; //标识

unsigned short ip_off; //标志位

unsigned char ip_ttl; //生存时间

unsigned char ip_p; //协议(TCP或其他)

unsigned short ip_sum; //ip首部校验和

unsigned long ip_src; //源ip地址

unsigned long ip_dst; //目的ip地址

};

unsigned char sendpacket[PACKET_SIZE];

unsigned char recvpacket[PACKET_SIZE];

struct sockaddr_in dest_addr;

struct sockaddr_in from_addr;

int sockfd;

int pid;

int timeout;

unsigned short cal_chksum(unsigned short *addr,int len);

int pack(int pack_no);

int unpack(unsigned char *buf,int len);

void send_packet(void);

void recv_packet(void);

void main()

{

printf("———————————————————————————————\n"); printf(" 查看帮助请按 1 \n\n"); printf(" 直接ping目的主机请按 2 \n\n"); printf(" 一直ping目的主机请按 3 \n\n"); printf(" 指定向目的主机发送报文数目请按 4 \n\n"); printf(" 将地址解析为计算机名输出请按 5 \n\n"); printf(" 设置超时时间 6 \n\n");

printf("——————————————————————————————\n\n"); int select;

printf("请选择:");

scanf("%d",&select);

if(select==1)

{

printf("参数\n");

printf(" 1 查看帮助\n");

printf(" 2 直接ping目的主机\n");

printf(" 3 一直ping目的主机\n");

printf(" 4 指定向目的主机发送报文数目\n");

printf(" 5 将地址解析为计算机名输出\n");

printf(" 6 设置超时时间\n");}

else{

int argc;char *argv[2];

char str[15];

printf("请输入所要ping的主机ip地址或域名,按回车键结束:"); scanf("%s",&str); //输入目的ip

printf("\n");

argc = 2;

argv[0]= "-t";

argv[1]=str;

struct hostent *host;

struct protoent *protocol;

WSADATA wsaData; //WSADA TA数据结构

timeout=1000; //设置超时

int SEND_COUNT; //设置发送的报文数

if(select==6)

{

printf("请输入数据包超时时间,按回车键结束:");

scanf("%d",&timeout);

printf("\n");}

if(select==4)

{

printf("请输入发往目的主机的报文数,按回车键结束:"); scanf("%d",&SEND_COUNT);

printf("\n");}

int i;

char *par_host;

par_host=argv[argc-1];

switch(argc)

{

case 2: break;

case 3: if(strcmp(argv[1],"-t")==0)

{

SEND_COUNT=10000;

break;

}

default:

相关文档
最新文档