91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 239KB
    文件類型: .7z
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-04
  • 語言: 其他
  • 標簽: ping??traceroute??

資源簡介

參考別人的源碼。略有改動。ping 可以ping 域名。traceroute 不會卡在某個路徑死掉。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?“ping.h“

#define?ICMP_ECHOREPLY?0
#define?ICMP_ECHOREQ?8

//?statistics
int?nsend?=?0?nrecv?=?0;
int?rrt[10];
int?packsize;

void?get_data(int?rrt[]?int?size?int?*min?int?*max?int?*avg);
void?tv_sub(struct?timeval?*outstruct?timeval?*in);

//?calculate?checksum?of?icmp?header
uint16_t?cal_cksum(uint16_t?*addr?int?len)
{
int?nleft?=?len;
uint32_t?sum?=?0;
uint16_t?*w?=?addr;
uint16_t?answer?=?0;

while?(nleft?>?1)?{
sum?+=?*w++;
nleft?-=?2;
}

if?(nleft?==?1)?{
*(unsigned?char?*)(&answer)?=?*(unsigned?char?*)w?;
sum?+=?answer;
}

sum?=?(sum?>>?16)?+?(sum?&?0xffff);
sum?+=?(sum?>>?16);
answer?=?~sum;
return(answer);
}

void?print_head(char?*ip)
{
packsize?=?sizeof(struct?icmp)?+?sizeof(struct?timeval);
printf(“Ping?%s?with?%d?bytes?of?data:\n“?ip?packsize);
}

void?print_stat(char?*ip)
{
int?min_rrt?max_rrt?avg_rrt;
int?lost;

if(nsend? return;
get_data(rrt?nsend?&min_rrt?&max_rrt?&avg_rrt);

lost?=?nsend?-?nrecv;
printf(“========================================================================\n“);
printf(“Ping?Statistics?for?%s:\n“?ip);
printf(“\tPackets:?Send?=?%d?Received?=?%d?Lost?=?%d(%.1f%%?lost)\n“?nsend?nrecv?lost?(lost?/?(nsend?*?1.0)?*?100.0));
printf(“Approximate?round?trip?times?in?milli-seconds:\n“);
printf(“\tMinimum?=?%dms?Maximum?=?%dms?Average?=?%dms\n“?min_rrt?max_rrt?avg_rrt);
}

void?send_ping(int?sockfd?struct?sockaddr_in?*dstaddr)
{
char?buf[100];
size_t?len?=?sizeof(struct?icmp);
socklen_t?dstlen?=?sizeof(struct?sockaddr_in);
struct?icmp?*echo;

memset(buf?0?sizeof(buf));
echo?=?(struct?icmp*)buf;
echo?=?(struct?icmp?*)buf;
echo->icmp_type?=?ICMP_ECHOREQ;
echo->icmp_code?=?0;
echo->icmp_cksum?=?0;
echo->icmp_id?=?getpid();
echo->icmp_seq?=?nsend;
struct?timeval?*tval=?(struct?timeval?*)echo->icmp_data;
gettimeofday(tvalNULL);
echo->icmp_cksum?=?cal_cksum((uint16_t?*)echo?packsize);

//?send?ping?message
if(sendto(sockfd?buf?len?0?(struct?sockaddr*)dstaddr?dstlen)?==?-1)
printf(“Send?Ping?Message?Error!\n“);

nsend++;
}

void?recv_ping(int?sockfd?struct?sockaddr_in?*dstaddr)
{
char?buf[100];
ssize_t?n;
struct?ip?*ip;
struct?icmp?*icmp;
socklen_t?dstlen?=?sizeof(struct?sockaddr_in);
int?ttl;
fd_set?rset;
int?maxfd?=?sockfd?+?1;
struct?timeval?timeo?*tvsend?tvrecv;
unsigned?char?*p;
unsigned?char?ipaddr[100];
int?time;

memset(buf?0?sizeof(buf));
timeo.tv_sec?=?3;
timeo.tv_usec?=?0;

FD_ZERO(&rset);
FD_SET(sockfd?&rset);


while(1)
{
//?set?timeout?3s
if((n?=?select(maxfd?&rset?NULL?NULL?&timeo))?==?-1)
{
printf(“Select?Error!\n“);
exit(1);
}

if(n?<=?0)
{
printf(“Request?Time?Out!\n“);
fflush(stdout);
break;
}


if((n?=?recvfrom(sockfd?buf?

評論

共有 條評論