![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁](http://file4.renrendoc.com/view/73ebad89d95dbee2891137b24cdfec08/73ebad89d95dbee2891137b24cdfec081.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁](http://file4.renrendoc.com/view/73ebad89d95dbee2891137b24cdfec08/73ebad89d95dbee2891137b24cdfec082.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁](http://file4.renrendoc.com/view/73ebad89d95dbee2891137b24cdfec08/73ebad89d95dbee2891137b24cdfec083.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁](http://file4.renrendoc.com/view/73ebad89d95dbee2891137b24cdfec08/73ebad89d95dbee2891137b24cdfec084.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁](http://file4.renrendoc.com/view/73ebad89d95dbee2891137b24cdfec08/73ebad89d95dbee2891137b24cdfec085.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
、計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告:實(shí)驗(yàn)內(nèi)容和要求1、實(shí)驗(yàn)一數(shù)據(jù)包的捕獲與分析Wireshark是一種開源的網(wǎng)絡(luò)數(shù)據(jù)包的捕獲和分析軟件,本實(shí)驗(yàn)通過Wireshark軟件的安裝使用,監(jiān)控局域網(wǎng)的狀態(tài),捕獲在局域網(wǎng)中傳輸?shù)臄?shù)據(jù)包,并結(jié)合在計(jì)算機(jī)網(wǎng)絡(luò)課程中學(xué)習(xí)到的理論知識(shí),對常用網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)包做出分析,加深網(wǎng)絡(luò)課程知識(shí)的理解和掌握。具體內(nèi)容及要求如下:Wireshark軟件的安裝;Wireshark軟件的啟動(dòng),并設(shè)置網(wǎng)卡的狀態(tài)為混雜狀態(tài),使得Wireshark可以監(jiān)控局域網(wǎng)的狀態(tài);啟動(dòng)數(shù)據(jù)包的捕獲,跟蹤PC之間的報(bào)文,并存入文件以備重新查;設(shè)置過濾器過濾網(wǎng)絡(luò)報(bào)文以檢測特定數(shù)據(jù)流;(對常用協(xié)議的數(shù)據(jù)包的報(bào)文格式進(jìn)行分析,利用協(xié)議分析軟件的統(tǒng)計(jì)工具顯示網(wǎng)絡(luò)報(bào)文的各種統(tǒng)計(jì)信息。2、實(shí)驗(yàn)二網(wǎng)絡(luò)層實(shí)驗(yàn)—Ping程序的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)?zāi)康氖鞘箤W(xué)生掌握網(wǎng)絡(luò)層協(xié)議的原理及實(shí)現(xiàn)方法。實(shí)驗(yàn)設(shè)計(jì)內(nèi)容!本實(shí)驗(yàn)為ICMP實(shí)驗(yàn)。實(shí)驗(yàn)內(nèi)容:Ping命令實(shí)現(xiàn)的擴(kuò)充,在給定的Ping程序的基礎(chǔ)上做如下功能擴(kuò)充:-h 顯示幫助信息-b 允許ping一個(gè)廣播地址,只用于IPv4-t設(shè)置ttl值,只用于IPv4-q 安靜模式。不顯示每個(gè)收到的包的分析結(jié)果,只在結(jié)束時(shí),顯示匯總結(jié)果Ping命令的基本描述Ping的操作是向某些IP地址發(fā)送一個(gè)ICMPEcho消息,接著該節(jié)點(diǎn)返回一個(gè)ICMPEchoreplay消息。ICMP消息使用IP頭作為基本控制。";二、實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)一數(shù)據(jù)包的捕獲與分析1.聯(lián)網(wǎng)計(jì)算機(jī)或linux系統(tǒng)`3.在PC中安裝協(xié)議分析軟件(如:Wireshark)4.物理基礎(chǔ):標(biāo)準(zhǔn)的以太網(wǎng)采用的是持續(xù)CSMA的方式,正是由于以太網(wǎng)采用這種廣播信道爭用的方式,使得各個(gè)站點(diǎn)可以獲得其他站點(diǎn)發(fā)送的數(shù)據(jù)。運(yùn)用這一原理使信息捕獲系統(tǒng)能夠攔截的我們所要的信5.工作模式:1)廣播模式(BroadCastModel):它的物理地址(MAC)地址是0Xffffff的幀為廣播幀,工作在廣播模式的網(wǎng)卡接收廣播幀。2)多播傳送(MultiCastModel):多播傳送地址作為目的物理地址的幀可以被組內(nèi)的其它主機(jī)同時(shí)接收,而組外主機(jī)卻接收不到。但是,如果將網(wǎng)卡設(shè)置為多播傳送模式,它可以接收所有的多播傳送幀,而不論它是不是組內(nèi)成員。3)直接模式(DirectModel):工作在直接模式下的網(wǎng)卡只接收目地址是自己MAC地址的幀。4)混雜模式(PromiscuousModel):工作在混雜模式下的網(wǎng)卡接收所有的流過網(wǎng)卡的幀,信包捕獲程序就是在這種模式下運(yùn)行的。/實(shí)驗(yàn)二網(wǎng)絡(luò)層實(shí)驗(yàn)—Ping程序的設(shè)計(jì)與實(shí)現(xiàn)聯(lián)網(wǎng)計(jì)算機(jī)Linux系統(tǒng)系統(tǒng)自帶編譯環(huán)境…程序的需求分析與邏輯框圖需求分析<1、實(shí)驗(yàn)一數(shù)據(jù)包的捕獲與分析1>.在PC中安裝協(xié)議分析軟件。2>.啟動(dòng)Wireshark協(xié)議分析軟件,選擇抓包菜單項(xiàng)啟動(dòng)實(shí)時(shí)監(jiān)視器,開始實(shí)時(shí)跟蹤顯示網(wǎng)絡(luò)數(shù)據(jù)報(bào)文。可根據(jù)系統(tǒng)提示修改顯示方式。3>.調(diào)出跟蹤存儲(chǔ)的歷史報(bào)文,選擇有代表性的ETHERNET,,IP,ICMP,TCP,UDP報(bào)文,對照有關(guān)協(xié)議逐個(gè)分析報(bào)文各字段的含義及內(nèi)容。4>.設(shè)置過濾器屬性,如目的地址,源地址,協(xié)議類型等。如過濾不需要的網(wǎng)絡(luò)報(bào)文,過濾器允許設(shè)置第二層,第三層或第四層的協(xié)議字段?!?、實(shí)驗(yàn)二網(wǎng)絡(luò)層實(shí)驗(yàn)—Ping程序的設(shè)計(jì)與實(shí)現(xiàn)PING程序是我們使用的比較多的用于測試網(wǎng)絡(luò)連通性的程序。PING程序給予ICMP使用ICMP的回送請求和回送應(yīng)答來工作。ICMP是基于IP的一個(gè)協(xié)議,ICMP包通過IP的封裝之后傳遞。實(shí)現(xiàn)檢測網(wǎng)絡(luò)通暢及速度的ping,并擴(kuò)展以下功能:-h顯示幫助信息(-b允許ping一個(gè)廣播地址,只用于IPv4-t設(shè)置ttl值,只用于IPv4-q安靜模式,不顯示每個(gè)收到的包的分析結(jié)果,只在結(jié)束時(shí),顯示匯總結(jié)果,!三、程序的需求分析與邏輯框圖邏輯框圖總體設(shè)計(jì)程序分為兩大部分:一部分讀取收到的所有消息,并輸出ICMPEchoreplay消息,另一部分每個(gè)一秒鐘發(fā)送一個(gè)Echo消息。另一部分由SIGALARM信號(hào)每秒驅(qū)動(dòng)一次。詳細(xì)設(shè)計(jì)1)main函數(shù)&三、 程序的需求分析與邏輯框圖邏輯框圖2)readloop函數(shù)>3)proc函數(shù) 4)send函數(shù) )三、 程序的需求分析與邏輯框圖邏輯框圖ChecksumChecksum開始定義初始化cksum(size>1)確定cksum及size大小是》if(size)計(jì)算校驗(yàn)cksum,獲得結(jié)果cksum+=*(UCHAR*)buffer;否結(jié)束?四、程序核心功能的實(shí)現(xiàn)機(jī)制1、實(shí)驗(yàn)一利用協(xié)議分析軟件跟蹤局域網(wǎng)報(bào)文,實(shí)驗(yàn)內(nèi)容如下:將安裝協(xié)議分析軟件的PC接入以太網(wǎng)中,跟蹤PC之間的報(bào)文,并存入文件以備重新查。設(shè)置過濾器過濾網(wǎng)絡(luò)報(bào)文以檢測特定數(shù)據(jù)流。利用協(xié)議分析軟件的統(tǒng)計(jì)工具顯示網(wǎng)絡(luò)報(bào)文的各種統(tǒng)計(jì)信息。2、實(shí)驗(yàn)二!Ping命令的基本描述Ping的操作是向某些IP地址發(fā)送一個(gè)ICMPEcho消息,接著該節(jié)點(diǎn)返回一個(gè)ICMPEchoreplay消息。ICMP消息使用IP頭作為基本控制。IP頭的格式如下012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Version|IHL|TypeofService|TotalLength|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+:|Identification|Flags|FragmentOffset|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|TimetoLive|Protocol|HeaderChecksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|SourceAddress|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|DestinationAddress|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+{Version=4IHLInternet頭長TypeofService=0TotalLengthIP包的總長度Identification,Flags,FragmentOffset用于IP包分段TimetoLiveIP包的存活時(shí)長ProtocolICMP=1{Addresses發(fā)送Echo消息的源地址是發(fā)送Echoreply消息的目的地址,相反,發(fā)送Echo消息的目的地址是發(fā)送Echoreply消息的源地址。程序核心功能的實(shí)現(xiàn)機(jī)制2、實(shí)驗(yàn)二】Ping實(shí)際上是使用ICMP中的ECHO報(bào)文來實(shí)現(xiàn)的。Echo或EchoReply消息格式如下:012301234567890123456789012345678901+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Type|Code|Checksum|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Identifier|SequenceNumber|}+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Data...+-+-+-+-+-Typeecho消息的類型為8echoreply的消息類型為0。Code=0Checksum;為從TYPE開始到IP包結(jié)束的校驗(yàn)和Identifier如果code=0,identifier用來匹配echo和echoreply消息SequenceNumber如果code=0,identifier用來匹配echo和echoreply消息功能描述:收到echo消息必須回應(yīng)echoreply消息。identifier和sequencenumber可能被發(fā)送echo的主機(jī)用來匹配返回的/echoreply消息。例如:identifier可能用于類似于TCP或UDP的port用來標(biāo)示一個(gè)會(huì)話,而sequencenumber會(huì)在每次發(fā)送echo請求后遞增。收到echo的主機(jī)或路由器返回同一個(gè)值與之匹配》四、 程序核心功能的實(shí)現(xiàn)機(jī)制【2、實(shí)驗(yàn)二 1、 數(shù)據(jù)結(jié)構(gòu)的描述1)IP包格式structip{ BYTEVer_ihl;.);^voiderr_sys(constchar*fmt,...);structproto{void (*fproc)(char*,ssize_t,structtimeval*);void (*fsend)(void);structsockaddr*sasend; /*sockaddr{}forsend,fromgetaddrinfo*/structsockaddr*sarecv; /*sockaddr{}forreceiving*/socklen_t salen; /*lengthofsockaddr{}s*/int icmpproto; /*IPPROTO_xxxvalueforICMP*/…}*pr;#endif/*PING_H_*/)#include""structproto proto_v4={proc_v4,send_v4,NULL,NULL,0,IPPROTO_ICMP};#ifdef IPV6structproto proto_v6={proc_v6,send_v6,NULL,NULL,0,IPPROTO_ICMPV6};#endifint datalen=56; /*datathatgoeswithICMPechorequest*/doublertt_min=INFINITY,rtt_max=-INFINITY,rtt_total=0,rtt_sqr_total=0;longlongsend_count=0,recv_count=0;·intttl_flag=0,broadcast_flag=0;intttl=0;structtimevaltval_start;constchar*usage="usage:ping[-v][-h][-b][-tttl][-q]<hostname>\n""\t-v\tNormalmode\n""\t-b\tBroadcast\n""\t-tttl\tSetTTL(0-255)\n"—"\t-q\tQuietmode";intmain(intargc,char**argv){ int c; structaddrinfo *ai; opterr=0; /*don'twantgetopt()writingtostderr*/ while((c=getopt(argc,argv,"vhbt:q"))!=-1){》 switch(c){ case'v': verbose++; break; case'h': puts(usage); return0; case'b':… broadcast_flag=1; break; case't': ttl_flag=sscanf(optarg,"%d",&ttl)&&ttl>=0&&ttl<256; break; case'q': verbose--; break;< case'': err_quit("unrecognizedoption:%c",c,usage);}if(optind!=argc-1) err_quit(usage); host=argv[optind];} pid=getpid(); signal(SIGALRM,sig_alrm); signal(SIGINT,sig_int); ai=host_serv(host,NULL,0,0); printf("ping%s(%s):%ddatabytes\n",ai->ai_canonname, Sock_ntop_host(ai->ai_addr,ai->ai_addrlen),datalen);[ /*4initializeaccordingtoprotocol*/ if(ai->ai_family==AF_INET){ pr=&proto_v4;#ifdef IPV6 }elseif(ai->ai_family==AF_INET6){ pr=&proto_v6; if(IN6_IS_ADDR_V4MAPPED(&(((structsockaddr_in6*), ai->ai_addr)->sin6_addr))) err_quit("cannotpingIPv4-mappedIPv6address");#endif }else err_quit("unknownaddressfamily%d",ai->ai_family); pr->sasend=ai->ai_addr; pr->sarecv=calloc(1,ai->ai_addrlen);¥ pr->salen=ai->ai_addrlen; gettimeofday(&tval_start,NULL); readloop(); exit(0);}(]voidproc_v4(char*ptr,ssize_tlen,structtimeval*tvrecv){ int hlen1,icmplen; double rtt; structip *ip; structicmp *icmp; structtimeval *tvsend;】 ip=(structip*)ptr; /*startofIPheader*/ hlen1=ip->ip_hl<<2; /*lengthofIPheader*/ icmp=(structicmp*)(ptr+hlen1); /*startofICMPheader*/ if((icmplen=len-hlen1)<8) err_quit("icmplen(%d)<8",icmplen);! if(icmp->icmp_type==ICMP_ECHOREPLY){ if(icmp->icmp_id!=pid) return; /*notaresponsetoourECHO_REQUEST*/ if(icmplen<16) err_quit("icmplen(%d)<16",icmplen); tvsend=(structtimeval*)icmp->icmp_data; tv_sub(tvrecv,tvsend);, rtt=tvrecv->tv_sec*+tvrecv->tv_usec/; if(rtt<rtt_min)rtt_min=rtt; if(rtt>rtt_max)rtt_max=rtt; rtt_total+=rtt; rtt_sqr_total+=rtt*rtt; recv_count++; if(verbose>0)| printf("%dbytesfrom%s:seq=%u,ttl=%d,rtt=%.3fms\n", icmplen,Sock_ntop_host(pr->sarecv,pr->salen), icmp->icmp_seq,ip->ip_ttl,rtt); }elseif(verbose>1){ printf("%dbytesfrom%s:type=%d,code=%d\n", icmplen,Sock_ntop_host(pr->sarecv,pr->salen), icmp->icmp_type,icmp->icmp_code);~ }}voidproc_v6(char*ptr,ssize_tlen,structtimeval*tvrecv){#ifdef IPV6~ int hlen1,icmp6len; double rtt; structip6_hdr *ip6; structicmp6_hdr *icmp6; structtimeval *tvsend; ip6=(structip6_hdr*)ptr; /*startofIPv6header*/ hlen1=sizeof(structip6_hdr);< if(ip6->ip6_nxt!=IPPROTO_ICMPV6) err_quit("nextheadernotIPPROTO_ICMPV6"); icmp6=(structicmp6_hdr*)(ptr+hlen1); if((icmp6len=len-hlen1)<8) err_quit("icmp6len(%d)<8",icmp6len); if(icmp6->icmp6_type==ICMP6_ECHO_REPLY){# if(icmp6->icmp6_id!=pid) return; /*notaresponsetoourECHO_REQUEST*/ if(icmp6len<16) err_quit("icmp6len(%d)<16",icmp6len); tvsend=(structtimeval*)(icmp6+1); tv_sub(tvrecv,tvsend); rtt=tvrecv->tv_sec*+tvrecv->tv_usec/;) if(rtt<rtt_min)rtt_min=rtt; if(rtt>rtt_max)rtt_max=rtt; rtt_total+=rtt; rtt_sqr_total+=rtt*rtt; recv_count++; if(verbose>0) printf("%dbytesfrom%s:seq=%u,hlim=%d,rtt=%.3fms\n",| icmp6len,Sock_ntop_host(pr->sarecv,pr->salen), icmp6->icmp6_seq,ip6->ip6_hlim,rtt); }elseif(verbose>1){ printf("%dbytesfrom%s:type=%d,code=%d\n", icmp6len,Sock_ntop_host(pr->sarecv,pr->salen), icmp6->icmp6_type,icmp6->icmp6_code); }'#endif /*IPV6*/}unsignedshortin_cksum(unsignedshort*addr,intlen){intnleft=len;intsum=0;unsignedshort*w=addr;unsignedshortanswer=0;。while(nleft>1){sum+=*w++;nleft-=2;}/*4mopupanoddbyte,ifnecessary*/if(nleft==1){*(unsignedchar*)(&answer)=*(unsignedchar*)w;sum+=answer;%}/*4addbackcarryoutsfromtop16bitstolow16bits*/sum=(sum>>16)+(sum&0xffff);/*addhi16tolow16*/sum+=(sum>>16);/*addcarry*/answer=~sum;/*truncateto16bits*/return(answer);}》voidsend_v4(void){ int len; structicmp *icmp; icmp=(structicmp*)sendbuf; icmp->icmp_type=ICMP_ECHO; icmp->icmp_code=0;( icmp->icmp_id=pid; icmp->icmp_seq=nsent++; gettimeofday((structtimeval*)icmp->icmp_data,NULL); len=8+datalen; /*checksumICMPheaderanddata*/ icmp->icmp_cksum=0; icmp->icmp_cksum=in_cksum((u_short*)icmp,len);' sendto(sockfd,sendbuf,len,0,pr->sasend,pr->salen);}voidsend_v6()[{#ifdef IPV6 int len; structicmp6_hdr *icmp6; icmp6=(structicmp6_hdr*)sendbuf; icmp6->icmp6_type=ICMP6_ECHO_REQUEST; icmp6->icmp6_code=0; icmp6->icmp6_id=pid; icmp6->icmp6_seq=nsent++;( gettimeofday((structtimeval*)(icmp6+1),NULL); len=8+datalen; /*8-byteICMPv6header*/ sendto(sockfd,sendbuf,len,0,pr->sasend,pr->salen);#endif /*IPV6*/}voidreadloop(void){ int size; char recvbuf[BUFSIZE]; socklen_t len;$ ssize_t n; structtimeval tval; sockfd=socket(pr->sasend->sa_family,SOCK_RAW,pr->icmpproto); setuid(getuid()); /*don'tneedspecialpermissionsanymore*/ size=60*1024; /*OKifsetsockoptfails*/ setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&size,sizeof(size)); if(ttl_flag)setsockopt(sockfd,IPPROTO_IP,IP_TTL,&ttl,sizeof(ttl));【if(broadcast_flag)setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&broadcast_flag,sizeof(broadcast_flag)); sig_alrm(SIGALRM); /*sendfirstpacket*/ for(;;){ len=pr->salen; n=recvfrom(sockfd,recvbuf,sizeof(recvbuf),0,pr->sarecv,&len); if(n<0){ if(errno==EINTR)| continue; else err_sys("recvfromerror"); } gettimeofday(&tval,NULL); (*pr->fproc)(recvbuf,n,&tval); }};voidsig_alrm(intsigno){(*pr->fsend)();send_count++;,alarm(1);return;/*probablyinterruptsrecvfrom()*/}voidsig_int(intsigno){structtimevaltval_end;doubletval_total;)gettimeofday(&tval_end,NULL);tv_sub(&tval_end,&tval_start);tval_total=*+/;puts("---pingstatistics---");printf("%lldpacketstransmitted,%lldreceived,%.0lf%%packetloss,time%.2lfms\n",send_count,recv_count,(send_count-recv_count)*/send_count,tval_total);doublertt_avg=rtt_total/recv_count;》printf("rttmin/avg/max/mdev=%.3lf/%.3lf/%.3lf/%.3lfms\n",rtt_min,rtt_avg,rtt_max,rtt_sqr_total/recv_count-rtt_avg*rtt_avg);close(sockfd);exit(0);}voidtv_sub(structtimeval*out,structtimeval*in){? if((out->tv_usec-=in->tv_usec)<0){ /*out-=in*/ --out->tv_sec; out->tv_usec+=1000000; } out->tv_sec-=in->tv_sec;};|char*sock_ntop_host(conststructsockaddr*sa,socklen_tsalen){staticcharstr[128];/*Unixdomainislargest*/switch(sa->sa_family){caseAF_INET:{structsockaddr_in*sin=(structsockaddr_in*)sa;、if(inet_ntop(AF_INET,&sin->sin_addr,str,sizeof(str))==NULL)return(NULL);return(str);}#ifdefIPV6caseAF_INET6:{-structsockaddr_in6*sin6=(structsockaddr_in6*)sa;if(inet_ntop(AF_INET6,&sin6->sin6_addr,str,sizeof(str))==NULL)return(NULL);return(str);}#endif。#ifdefHAVE_SOCKADDR_DL_STRUCTcaseAF_LINK:{structsockaddr_dl*sdl=(structsockaddr_dl*)sa;if(sdl->sdl_nlen>0)snprintf(str,sizeof(str),"%*s",sdl->sdl_nlen,&sdl->sdl_data[0]);else^snprintf(str,sizeof(str),"AF_LINK,index=%d",sdl->sdl_index);return(str);}#endifdefault:snprintf(str,sizeof(str),"sock_ntop_host:unknownAF_xxx:%d,len%d",sa->sa_family,salen);return(str);'}return(NULL);}char*Sock_ntop_host(conststructsockaddr*sa,socklen_tsalen){~char*ptr;if((ptr=sock_ntop_host(sa,salen))==NULL)err_sys("sock_ntop_hosterror");/*inet_ntop()setserrno*/return(ptr);}structaddrinfo*host_serv(constchar*host,constchar*serv,intfamily,intsocktype){intn;structaddrinfohints,*res;'bzero(&hints,sizeof(structaddrinfo));=AI_CANONNAME;/*alwaysreturncanonicalname*/=family;/*AF_UNSPEC,AF_INET,AF_INET6,etc.*/=socktype;/*0,SOCK_STREAM,SOCK_DGRAM,etc.*/if((n=getaddrinfo(host,serv,&hints,&res))!=0)return(NULL);return(res);/*returnpointertofirstonlinkedlist*/$}/*endhost_serv*/staticvoiderr_doit(interrnoflag,intlevel,constchar*fmt,va_listap){interrno_save,n;charbuf[MAXLINE];errno_save=errno;/*valuecallermightwantprinted*/#ifdefHAVE_VSNPRINTFvsnprintf(buf,sizeof(buf),fmt,ap);/*thisissafe*/…#elsevsprintf(buf,fmt,ap);/*thisisnotsafe*/#endifn=strlen(buf);if(errnoflag)snprintf(buf+n,sizeof(buf)-n,":%s",strerror(errno_save));strcat(buf,"\n");if(daemon_proc){—syslog(level,buf);}else{fflush(stdout);/*incasestdoutandstderrarethesame*/fputs(buf,stderr);fflush(stderr);}return;}\/*Fatalerrorunrelatedtoasystemcall.*Printamessageandterminate.*/voiderr_quit(constchar*fmt,...){}va_listap;va_start(ap,fmt);err_doit(0,LOG_ERR,fmt,ap);va_end(ap);exit(1);}、/*Fatalerrorrelatedtoasystemcall.*Printamessageandterminate.*/voiderr_sys(constchar*fmt,...){va_listap;va_start(ap,fmt);/err_doit(1,LOG_ERR,fmt,ap);va_end(ap);exit(1);}^%六、程序擴(kuò)展功能的需求分析與實(shí)現(xiàn)(2、實(shí)驗(yàn)二擴(kuò)展功能-h 顯示幫助信息-b 允許ping一個(gè)廣播地址,只用于IPv4-t設(shè)置ttl值,只用于IPv4-q 安靜模式。不顯示每個(gè)收到的包的分析結(jié)果,只在結(jié)束時(shí),顯示匯總結(jié)果實(shí)現(xiàn)見源代碼)%{七、實(shí)驗(yàn)數(shù)據(jù)、結(jié)果分析實(shí)驗(yàn)一見附錄實(shí)驗(yàn)二~八、總結(jié)通過程序設(shè)計(jì),對ping的工作原理進(jìn)一步認(rèn)識(shí)。尤其是ICMP報(bào)文的結(jié)構(gòu)模式,以及ping的一些擴(kuò)展功能的實(shí)現(xiàn)。對基于linux的c語言編程的方法進(jìn)一步掌握。程序設(shè)計(jì)中,對各種函數(shù)之間的協(xié)同工作運(yùn)用理解更加深刻。更掌握了如何使用信號(hào)量進(jìn)行通信。雖然程序設(shè)計(jì)及調(diào)試中也遇到不少困難,也都在同學(xué)幫助下,及通過資料查詢逐一解決。比如pi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能安防系統(tǒng)集成技術(shù)服務(wù)合同范本
- 2025年度股權(quán)顧問服務(wù)與企業(yè)內(nèi)部審計(jì)合同
- 企業(yè)承包合作具體合同范本(2024)一
- 二零二四年度人工智能研發(fā)投標(biāo)合作服務(wù)合同范本下載3篇
- 2025版施工隊(duì)中途退場合同終止及權(quán)益保障協(xié)議3篇
- 2025年度國際貿(mào)易貨物所有權(quán)轉(zhuǎn)移與知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度人工智能自動(dòng)駕駛測試場建設(shè)合同范文
- 2025年度廣告創(chuàng)意代理合同范本(創(chuàng)新版)
- 2025年度新型灰渣運(yùn)輸服務(wù)合同
- 2025年度出差人員健康保險(xiǎn)責(zé)任免除合同范本2篇
- 環(huán)境與職業(yè)健康安全管理手冊
- 注射泵操作使用課件
- 2024年全國新高考1卷(新課標(biāo)Ⅰ)數(shù)學(xué)試卷(含答案詳解)
- 人教版高中生物學(xué)新舊教材知識(shí)差異盤點(diǎn)
- 四年級(jí)四年級(jí)下冊閱讀理解20篇(附帶答案解析)經(jīng)典
- 大連高新區(qū)整體發(fā)展戰(zhàn)略規(guī)劃(產(chǎn)業(yè)及功能布局)
- 國有資產(chǎn)管理法律責(zé)任與風(fēng)險(xiǎn)防控
- 未婚生子的分手協(xié)議書
- 變更監(jiān)事章程修正案范例
- 北京小客車指標(biāo)租賃協(xié)議五篇
- 輸液室運(yùn)用PDCA降低靜脈輸液患者外滲的發(fā)生率品管圈(QCC)活動(dòng)成果
評(píng)論
0/150
提交評(píng)論