
标签:
Ping工具中文版是一款由宣言制作的ping测试工具,中文版的哦,直接输入IP或网址然后点击"ping"即可。
宣言ping工具v1.0中文版正式发布!本次更新优化核心网络检测算法,响应速度提升30%,新增多平台兼容支持。功能方面改进UI交互体验,增加历史记录导出与可视化图表展示。基于早期用户反馈,我们修复了高负载下的稳定性问题,并简化了操作流程。感谢社区测试人员的宝贵建议,持续迭代只为提供更精准、高效的网络诊断服务。
宣言Ping工具中文版(Ping命令的使用大全)是微软的命令行工具,它需要在cmd命令下运行,因此是英文的,而本次提供的宣言Ping工具是中文的,方便小白学习使用!
ping的原理就是首先建立通道,然后发送包,对方接受后返回信息,这个包至少包括以下内容,发送的时候,包的内容包括对方的ip地址和自己的地址,还有序列数,回送的时候包括双方地址,还有时间等,主要是接受方在都是在操作系统内核里做好的,时刻在监听,提供一段c程序的代码,希望对大家有用。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PACKET_SIZE 4096
#define MAX_WAIT_TIME 5
#define MAX_NO_PACKETS 3
char sendpacket[PACKET_SIZE];
char recvpacket[PACKET_SIZE];
int sockfd,datalen=56;
int nsend=0,nreceived=0;
struct sockaddr_in dest_addr;
pid_t pid;
struct sockaddr_in from;
struct timeval tvrecv;
void statistics(int signo);
unsigned short cal_chksum(unsigned short *addr,int len);
int pack(int pack_no);
void send_packet(void);
void recv_packet(void);
int unpack(char *buf,int len);
void tv_sub(struct timeval *out,struct timeval *in);
void statistics(int signo)
{ printf("\n--------------------PING statistics-------------------\n");
printf("%d packets transmitted, %d received , %%%d lost\n",nsend,nreceived,
(nsend-nreceived)/nsend*100);
close(sockfd);
exit(1);
}
/*校验和算法*/
unsigned short cal_chksum(unsigned short *addr,int len)
{ int nleft=len;
int sum=0;
unsigned short *w=addr;
unsigned short answer=0;
/*把ICMP报头二进制数据以2字节为单位累加起来*/
while(nleft>1)
{ sum+=*w++;
nleft-=2;
}
/*若ICMP报头为奇数个字节,会剩下最后一字节。把最后一个字节视为一个2字节数据的高字节,这个2字节数据的低字节为0,继续累加*/
if( nleft==1)
{ *(unsigned char *)(&answer)=*(unsigned char *)w;
sum+=answer;
}
sum=(sum>>16)+(sum&0xffff);
sum+=(sum>>16);
answer=~sum;
return answer;
}
/*设置ICMP报头*/
int pack(int pack_no)
{ int i,packsize;
struct icmp *icmp;
struct timeval *tval;
icmp=(struct icmp*)sendpacket;
icmp->icmp_type=ICMP_ECHO;
icmp->icmp_code=0;
icmp->icmp_cksum=0;
icmp->icmp_seq=pack_no;
icmp->icmp_id=pid;
packsize=8+datalen;
tval= (struct timeval *)icmp->icmp_data;
gettimeofday(tval,NULL); /*记录发送时间*/
icmp->icmp_cksum=cal_chksum( (unsigned short *)icmp,packsize); /*校验算法*/
return packsize;
}
/*发送三个ICMP报文*/
void send_packet()
{ int packetsize;
while( nsend<max_no_packets)
{ nsend++;
packetsize=pack(nsend); /*设置ICMP报头*/
if( sendto(sockfd,sendpacket,packetsize,0,
(struct sockaddr *)&dest_addr,sizeof(dest_addr) )<0 )
{ perror("sendto error");
continue;
}
sleep(1); /*每隔一秒发送一个ICMP报文*/
}
}
/*接收所有ICMP报文*/
void recv_packet()
{ int n,fromlen;
extern int errno;
signal(SIGALRM,statistics);
fromlen=sizeof(from);
while( nreceived<nsend)
{ alarm(MAX_WAIT_TIME);
if( (n=recvfrom(sockfd,recvpacket,sizeof(recvpacket),0,
(struct sockaddr *)&from,&fromlen)) <0)
{ if(errno==EINTR)continue;
perror("recvfrom error");
continue;
}
gettimeofday(&tvrecv,NULL); /*记录接收时间*/
if(unpack(recvpacket,n)==-1)continue;
nreceived++;
}
}
/*剥去ICMP报头*/
int unpack(char *buf,int len)
{ int i,iphdrlen;
struct ip *ip;
struct icmp *icmp;
struct timeval *tvsend;
double rtt;
ip=(struct ip *)buf;
iphdrlen=ip->ip_hl<<2; /*求ip报头长度,即ip报头的长度标志乘4*/
icmp=(struct icmp *)(buf+iphdrlen); /*越过ip报头,指向ICMP报头*/
len-=iphdrlen; /*ICMP报头及ICMP数据报的总长度*/
if( len<8) /*小于ICMP报头长度则不合理*/
{ printf("ICMP packets\'s length is less than 8\n");
return -1;
}
/*确保所接收的是我所发的的ICMP的回应*/
if( (icmp->icmp_type==ICMP_ECHOREPLY) && (icmp->icmp_id==pid) )
{ tvsend=(struct timeval *)icmp->icmp_data;
tv_sub(&tvrecv,tvsend); /*接收和发送的时间差*/
rtt=tvrecv.tv_sec*1000+tvrecv.tv_usec/1000; /*以毫秒为单位计算rtt*/
/*显示相关信息*/
printf("%d byte from %s: icmp_seq=%u ttl=%d rtt=%.3f ms\n",
len,
inet_ntoa(from.sin_addr),
icmp->icmp_seq,
ip->ip_ttl,
rtt);
}
else return -1;
}
main(int argc,char *argv[])
{ struct hostent *host;
struct protoent *protocol;
unsigned long inaddr=0l;
int waittime=MAX_WAIT_TIME;
int size=50*1024;
if(argc<2)
{ printf("usage:%s hostname/IP address\n",argv[0]);
exit(1);
}
if( (protocol=getprotobyname("icmp") )==NULL)
{ perror("getprotobyname");
exit(1);
}
/*生成使用ICMP的原始套接字,这种套接字只有root才能生成*/
if( (sockfd=socket(AF_INET,SOCK_RAW,protocol->p_proto) )<0)
{ perror("socket error");
exit(1);
}
/* 回收root权限,设置当前用户权限*/
setuid(getuid());
/*扩大套接字接收缓冲区到50K这样做主要为了减小接收缓冲区溢出的
的可能性,若无意中ping一个广播地址或多播地址,将会引来大量应答*/
setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size) );
bzero(&dest_addr,sizeof(dest_addr));
dest_addr.sin_family=AF_INET;
/*判断是主机名还是ip地址*/
if( inaddr=inet_addr(argv[1])==INADDR_NONE)
{ if((host=gethostbyname(argv[1]) )==NULL) /*是主机名*/
{ perror("gethostbyname error");
exit(1);
}
memcpy( (char *)&dest_addr.sin_addr,host->h_addr,host->h_length);
}
else /*是ip地址*/
memcpy( (char *)&dest_addr,(char *)&inaddr,host->h_length);
/*获取main的进程id,用于设置ICMP的标志符*/
pid=getpid();
printf("PING %s(%s): %d bytes data in ICMP packets.\n",argv[1],
inet_ntoa(dest_addr.sin_addr),datalen);
send_packet(); /*发送所有ICMP报文*/
recv_packet(); /*接收所有ICMP报文*/
statistics(SIGALRM); /*进行统计*/
return 0;
}
/*两个timeval结构相减*/
void tv_sub(struct timeval *out,struct timeval *in)
{ if( (out->tv_usec-=in->tv_usec)<0)
{ --out->tv_sec;
out->tv_usec+=1000000;
}
out->tv_sec-=in->tv_sec;
}
厂商名称:

密信MeSign83.2M0人在玩密信MeSign是一款端到端加密的即时通讯软件,支持安全聊天、文件传输、数字签名等功能,适用于Windows、macOS、iOS、Android。它有效保护用户隐私,防止信息泄露,是个人与企业进行私密沟通的理
下载
护眼宝3.8M0人在玩护眼宝是一款专业的屏幕护眼工具,适用于Windows电脑及安卓、iOS手机。它能有效过滤蓝光、调节屏幕色温、定时提醒休息,缓解视觉疲劳,改善用眼习惯。软件免费、安全、易用,是长时间面对电子屏
下载
橙光文字游戏制作工具37.7M0人在玩橙光文字游戏制作工具是一款免费的可视化文字互动游戏开发软件,支持Windows系统,提供海量正版素材与可视化剧情编辑功能,无需编程基础即可轻松创作专属互动作品,并支持一键发布至多平台,适合
下载
哔哩哔哩直播姬3.9M0人在玩哔哩哔哩直播姬是B站官方推出的免费直播推流软件,支持PC和移动端,提供一键开播、丰富素材、弹幕互动、稳定推流和自动录播等功能,让游戏直播和日常聊天更加流畅便捷,是UP主和直播爱好者的必备
下载
Mc爱好者-Box2.9M0人在玩Mc爱好者-Box是一款专为《我的世界》玩家打造的综合性辅助工具箱,支持模组一键管理、海量地图皮肤下载、启动优化与问题修复,兼容Windows与Android平台,界面简洁易用,助您畅享方块世界。
下载
淘宝导购器355KB0人在玩淘宝导购器是一款实用的购物助手,适配安卓与电脑端,提供智能推荐、隐藏优惠券、全网比价、历史价格查询等核心功能,帮助用户省钱省时,安全可靠,是逛淘宝必备的贴心工具。
下载
淘宝客查返利软件831KB0人在玩淘宝客查返利软件是一款集优惠券搜索与返利查询于一体的实用工具,支持安卓、iOS及电脑端,自动同步淘宝订单,返利提现便捷,安全可靠。只需复制商品链接即可查券返利,分享商品还能赚佣金。本页
下载
我查查购物助手5.3M0人在玩我查查购物助手是一款专业的电脑购物比价工具,支持全网比价、历史价格查询、扫码比价等功能,帮助用户轻松找到最低价,规避促销套路,省钱又省心。适用于各大主流浏览器,安装简单,操作便捷,
下载
购物党自动比价工具1.6M0人在玩购物党自动比价工具是一款支持淘宝、京东、苏宁等平台的智能比价助手,提供历史价格查询、同款比价、优惠券聚合等功能,适配Windows及安卓设备,帮助用户轻松识别价格陷阱,省钱购物。
下载
姓名测试打分53KB0人在玩姓名测试打分是一款集姓名评分、生辰八字分析、宝宝起名推荐于一体的专业工具。基于三才五格与周易数理,提供精准的姓名吉凶评分与详细解读。支持移动端与电脑端,操作简单,报告清晰,帮助您深
下载