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

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-06-03
  • 語言: 其他
  • 標簽: icmp??ping??實現??

資源簡介

ICMP[version 4]的echo報文運用,模擬ping命令實現pingy命令

資源截圖

代碼片段和文件信息

#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);
gettimeofday(&tvrecv?NULL);

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?=?recvf

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件????????184??2010-03-10?11:20??PingY\makefile

?????文件???????5182??2010-03-10?11:04??PingY\ping.c

?????文件???????1348??2010-03-09?11:13??PingY\ping.h

?????文件???????2148??2010-03-10?11:21??PingY\PingPro.c

?????目錄??????????0??2010-03-29?20:34??PingY

-----------?---------??----------?-----??----

?????????????????8862????????????????????5


評論

共有 條評論