memcpy(8(dest, sin addr), hp >h addr, hp >h length) dest. sin addr,s addr=addr if(hp) dest. sin family=hp >h addrtype: dest. sin family=AF INET dest ip=inet ntoa( destin addr) if (argc)2)( datasize=atoi (argv [2]) f(d datasize=DEE PACKET STZE datasize=DEE PACKET SIZe datasize=sizeof(IcmpHeader) icmp_data=xmalloc (MAX PACKET) recvbuf=xmallOc MAX PACKET) if (icmp data)( fprintf(stderr, HeapAlloc failed %d\n", GetLastError o) ExitProcess (STATU FAILED memset(icmp data, 0, MAX PACKET) fill icmp data(icmp data, datasize) while (1) int wrote ((IcmpHeadera) icmp data) >i cksum=0 ((IcmpHeadera*)icmp data) >timestamp=GetTickCount O ((IcmpHeader*icmp data) seg=seg not+ ((IcmpHeader*icmp data i cksum=checksum((USHORT*icmp data, datasize) bwrote=sendto(sockRaw, icmp data, datasize, 0,(struct sockaddr*)8 dest, sizeof(dest)) if (wrote==SOCKET ERROR)( if (WSAGetLastErrork(==WSAETIMEDOUT printf ( timed out/n"): continue fprintf(stderr, "sendto failed; %d/n", WSAGetLastError O) ExitProcess(STATUS FAILED) if(wrote printf(stdout, Wrote %d bytes \n", bwrote) bread=recvfrom(sockRaw, recvbuf, MAX PACKET, 0, (struct
memcpy(δ(dest,sin_addr),hp >h_addr,hp >h_length); else dest,sin_addr,s_addr=addr; if (hp) dest.sin_family=hp >h_addrtype; else dest.sin_family=AF_INET; dest_ip=inet_ntoa(destsin_addr); if (argc>2) { datasize=atoi(argv[2]); if (datasize==0) datasize=DEE_PACKET_STZE; } else datasize=DEE_PACKET_SIZE; datasize+=sizeof(IcmpHeader); icmp_data=xmalloc(MAX_PACKET); recvbuf=xmalloc(MAX_PACKET); if (!icmp_data) { fprintf(stderr,″HeapAlloc failed %d\n″,GetLastError()); ExitProcess(STATU_FAILED); } memset(icmp_data,0,MAX_PACKET); fill_icmp_data(icmp_data,datasize); while (1) { int bwrote; ((IcmpHeader*)icmp_data) >i_cksum=0; ((IcmpHeader*)icmp_data) >timestamp=GetTickCount(); ((IcmpHeader*)icmp_data) >i_seq=seq_no++; ((IcmpHeader*)icmp_data) >i_cksum=checksum((USHORT*)icmp_data,datasize); bwrote=sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)δdest,sizeof(dest)); if (bwrote==SOCKET_ERROR) { if (WSAGetLastErrork()==WSAETIMEDOUT) { printf(″timed out/n″); continue; } fprintf(stderr,″sendto failed;%d/n″,WSAGetLastError()); ExitProcess(STATUS_FAILED); } if (bwrote fprintf(stdout,″Wrote %d bytes\n″,bwrote); } bread=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct
sockaddr*)δfrom,δ froman); f (bread==SOCKET ERROR) f( WSAGetLast Error (==WSaetimedouT)( printf(" timed out \n"): continue fprintf (stderr, recvfrom failed: %d n",WSAGetLastError o) ExitProcess (STATUS FAILED) decode resp (recvbuf, bread, 8 from) Sleep(1000) return 0 roid decode resp(char *buf, int bytes, struct sockaddr in *from) IpHeader *kiphdr IcmpHeader *icmphdr unsigned short iphdrlen iphdr=(IpHeader *)buf iphdrlen=iphdr >h len *4: //number of 32 bit words *4=bytes printf(" Too few byes from %s/n", inet ntoa(from >sin addr)) icmphdr=(IcmpHeader*)(buf+iphdrlen) if (icmphdr >i type! =ICMP ECHOREPLY)I fprintf(stderr, non echo type %d recvd/n", icmphdr >i t if (icmphdr >i id =(USHORT) GetCurrentProcessIdo)I fprintf (stderr, someone else packet! /n") >sin adds printf("%d bytes from %s: " bytes, inet_ntoa(from printf(" icmp seq=%d " icmphdr >i seg) printf(" time: %d ms", GetTickCounto icmphdr >timestamp) f("/n"); USHORT checksum (USHORT *buffer, int size)
sockaddr*)δfrom,δfromlen); if (bread==SOCKET_ERROR) { if (WSAGetLastError()==WSAETIMEDOUT) { printf(″timed out\n″); continue; } fprintf(stderr,″recvfrom failed:%d\ n″,WSAGetLastError()); ExitProcess(STATUS_FAILED); } decode_resp(recvbuf,bread,δfrom); Sleep(1000); } return 0; } void decode_resp(char *buf, int bytes, struct sockaddr_in *from) } IpHeader *iphdr; IcmpHeader *icmphdr; unsigned short iphdrlen; iphdr=(IpHeader *)buf; iphdrlen=iphdr >h_len *4;//number of 32 bit words *4=bytes if (bytes printf(″Too few byes from %s/n″, inet_ntoa(from >sin_addr)); } icmphdr=(IcmpHeader*)(buf+iphdrlen); if (icmphdr >i_type!=ICMP_ECHOREPLY) { fprintf(stderr,″non echo type %d recvd/n″,icmphdr >i_type); return; } if (icmphdr >i_id !=(USHORT)GetCurrentProcessId()) { fprintf(stderr,″someone else′spacket!/n″); return; } printf(″%d bytes from %s:″,bytes,inet_ntoa(from >sin_addr)); printf(″icmp_seq=%d.″,icmphdr >i_seq); printf(″time:%d ms″,GetTickCount() icmphdr >timestamp); printf(″/n″); } USHORT checksum(USHORT *buffer,int size) { unsigned long cksum=0; while (size>1) {
cksum+=buffer++ size-=sizeof (USHORT if (size)[ cksum+=*(UCHAR*) buffer cksum=(cksum>>16)+(cksum 8 Oxffff) +=( cksum>>16) return(USHORT)( cksum) void fill icmp data (char*icmp data, int datasize) IcmpHeader *icmp hdr char *datamart icmp hdr=(IcmpHeader*icmp data icmp hdr >i type=ICMP ECHO icmp hdr >i id=(USHORT) GetCurrentProcesId O icmp hdr >i cksum=0 icmp hdr >1 datapart=icmp datatsizeof (IcmpHeader): //Place some junk in the buffer. // memset (datapart, E, datasize-sizeof(IcmpHeader)) 全真预测试卷(二)上午试题 (考试时间9:00~11:30共150分钟) (1)D (2)D (3)D (4)B D (6)C (7)D (8)D (9 (10)D (11)B (12)D (13)D (14)A (16)A (17)B (1 18)B (19)B (20)A (21)D (22)C (24)B (25)D (26)A (28)D (29)C (31)B (32)A (33)C (34)D (35)C (36)D (37)C (38)C (39)C (40)B 41)D (42)C (43)C (44)D (45)C (46)B (47)A (48)C (49)B 50)D (51)B (52)C 53)D (55)C (56)A (57)C (58)C (59)B
cksum+=*buffer++; size-=sizeof(USHORT); } if (size) { cksum+=*(UCHAR*)buffer; } cksum=(cksum>>16)+(cksum δ 0xffff); cksum+=(cksum>>16); return (USHORT)(~cksum); } void fill_icmp_data(char*icmp_data,int datasize) { IcmpHeader *icmp_hdr; char *datapart; icmp_hdr=(IcmpHeader*)icmp_data; icmp_hdr >i_type=ICMP_ECHO; icmp_hdr >i_code=0; icmp_hdr >i_id=(USHORT)GetCurrentProcesId(); icmp_hdr >i_cksum=0; icmp_hdr >i_seq=0; datapart=icmp_data+sizeof(IcmpHeader);//Place some junk in the buffer.// memset (datapart,′E′,datasize-sizeof(IcmpHeader)); } 全真预测试卷(二)上午试题 (考试时间 9:00~11:30 共 150 分钟) (1)D (2)D (3)D (4)B (5) D (6)C (7)D (8)D (9)B (10)D (11)B (12)D (13)D (14)A (15)C (16)A (17)B (18)B (19)B (20)A (21)D (22)C (23)A (24)B (25)D (26)A (27)C (28)D (29)C (30)B (31)B (32)A (33)C (34)D (35)C (36)D (37)C (38)C (39)C (40)B (41)D (42)C (43)C (44)D (45)C (46)B (47)A (48)C (49)B (50)D (51)B (52)C (53)D (54)D (55)C (56)A (57)C (58)C (59)B (60)B
(61)B (62)B (63)C (64)B (66)A (67)D (68)B (69)C (70)A (71)A (72)B (73)B (74)C (75)D 全真预测试卷(二)下午试题 (考试时间14:00~16:30共150分钟) 本试卷的7道试题都是必答题,请全部解答。 试题 (1)发出请求: GetNextRequest( ipADDrtABle) 预期得到的响应: GetResponse( ipADetnADDr.203.100.100.1=203.100.100.1) (2)发出请求: GetResgonse(ipADetnADDr. 203. 100. 100. 1, ipADetnIfInDex. 203. 100. 100. 1, ip ADetnNetmAsk. 203. 100100. 1, ipADetnBCstADDr 203. 100. 100. 1, pADetnReAsmM AsSize.203.100.100.1) 预期得到的响应: GetResponse( ipADetnADDr.203.100.100.1=203.100.100.1, ipADetnIfInDex. 203. 100. 100.1=10, ipADetnNetmAsk 203 100100. 1=255. 255. 255. 128, ipADetnBCAstADDr 203 100 100. 1=8, ipADetnReAsmMAxSize 203 100. 100.1=5) (3)发出请求 GetNextRequest(ipADEtnADDr, ipADetnIfInDex, ipADetnNetmAsk, ipADetnBCAst ADDr, ipADetnReAsmMAxSize) 预期得到的响应: GetResponse( ipADEtnADDr.203.100.100.1=203.100.100.1 pADetnIfInDex.203.100.100.1=10, ipADetnNetmAsk.203.100.100.1=255.255 255. 128, ipADetnBCAstADDr. 203. 100. 100. 1=8, ipADetnReAsmMAx Size 203. 100. 100.1=5) 4)发出请求: SetRequest( i pADetnReAsmMAxSize.203.100.100.1=10) 预期得到的响应: GetResponse( ipADetnReAsmMAX Size.203.100.100.1=10) 试题二 (1.3.6.1.2.1.13.1.1)(1.3.6.1.2.1.13.1.2)(1.3.6.1.2.1.13.1.3)(1 3.6.1.2.1.13.1.4) .12 〖〗13 5111833836 INDEX INDEX INDEX INDEX 图b tCpConnstAte tCp ConnLoCAlADDress tCp ConnLoCAlPort tCpConnRemADDre ss tCp ConnRemPort
(61)B (62)B (63)C (64)B (65)A (66)A (67)D (68)B (69)C (70)A (71)A (72)B (73)B (74)C (75)D 全真预测试卷(二 )下午试题 (考试时间 14:00~16:30 共 150 分钟) 本试卷的 7 道试题都是必答题,请全部解答。 试题一 (1)发出请求:GetNextRequest(ipADDrTABle) 预期得到的响应:GetResponse(ipADetnADDr.203.100.100.1=203.100.100.1) (2)发出请求: GetResqonse(ipADetnADDr.203.100.100.1,ipADetnIfInDex.203.100.100.1,ip ADetnNetmAsk.203.100.100.1,ipADetnBCstADDr.203.100.100.1,pADetnReAsmM AxSize.203.100.100.1) 预期得到的响应:GetResponse(ipADetnADDr.203.100.100.1=203.100.100.1, ipADetnIfInDex.203.100.100.1=10,ipADetnNetmAsk.203.100.100.1=255.255. 255.128,ipADetnBCAstADDr.203.100.100.1=8,ipADetnReAsmMAxSize.203.100. 100.1=5) (3)发出请求: GetNextRequest(ipADEtnADDr,ipADetnIfInDex,ipADetnNetmAsk,ipADetnBCAst ADDr,ipADetnReAsmMAxSize) 预期得到的响应:GetResponse(ipADEtnADDr.203.100.100.1=203.100.100.1, ipADetnIfInDex.203.100.100.1=10,ipADetnNetmAsk.203.100.100.1=255.255. 255.128,ipADetnBCAstADDr.203.100.100.1=8,ipADetnReAsmMAxSize.203.100. 100.1=5) (4)发出请求:SetRequest(ipADetnReAsmMAxSize.203.100.100.1=10) 预期得到的响应:GetResponse(ipADetnReAsmMAxSize.203.100.100.1=10) 试题二 (1.3.6.1.2.1.13.1.1) (1.3.6.1.2.1.13.1.2) (1.3.6.1.2.1.13.1.3) (1. 3.6.1.2.1.13.1.4) 4 11.11.11.11 15 12.12.12.12〖〗13 3 22.22.22.22 88 22.22.22.22 0 5 11.11.11.11 86 33.33.33.33 16 INDEX INDEX INDEX INDEX 图 b tCpConnstAte tCpConnLoCAlADDress tCpConnLoCAlPort tCpConnRemADDre ss tCpConnRemPort
x.1.11.1.1.1.15.x.2.11.1.1.15.x.3.1.1.1.1.15.kx.4.11.1.1.11.15.x.5.1 12.12.12.12.13 12.12.12.12.13 12.12.12.12.13 12.12.12.12.13 12.12 x.1.22.22.22.22 2.22.2.22.22.κ.3.2.22.22.22 .4.22.22.22.22 88.22.22.22.22.088.22.22.22.22.088.22.22.22.22.088.22.22.22.22.088.22 x.1.11.11.11.11 x.2.11.11.11.11 3.11.11.11.11.x.4.11.11.11.11.x.5.1 86.33.33.33.33.1686.33.33.33.33.1686.33.33.33.33.1686.33.33.33.33.1686.33 ?x=1.3.6.1.2.1.6.13.1= tCp ConnEntry的对象标识符 图 试题三 (2)禁止删除和生成。 (3)A.1.3.2.5.65.66.67.68.72。 4)发出请求: GetBulkRequest[非重复数,=1,最大后继数=2] IsysUpTime perChArACteristiCl perChArACteristiC2 预期代理的响应: Response( sysUpTime.0=”100100″) (perChArACteristiCl. 2. 5. 65 66. 67. 68.72="30 perChArACteristiC. 2. 5. 65 66. 67 68. 72="67),(perChArACteristiCl 5 2. 65.67=″41″ perChArACteristiC2. 5. 2. 65. 67="AAA")) 发出下一请求: GetBulkRequest[非重复数,=1,最大后继数=2 isysUpTime, perChArACteristiCl. 5. 2. 65. 67, perChArACteristiC2. 5. 2. 65 671 预期代理的响应: Response( sysUpTime.0="100111″) ( per ChArACteristicl.8.4.68.68.68=″15″, perChArACteristiC2.8. 4.68. 686868="AC1l"),(perChArACteristiCl 21.4 68.68.68=″45″, per ChArACteristic2.21.4.68.68.68=″XYZ")) 试题四 (1)小的定长信元可以快速地选择路径通过交换机,并且对其进行的 交换操作可以完全用硬件来实现 (2)让 SETUP报文到达目的地需要4个跳段,除了最后1个跳段外, 每个跳段都被确认,这样共有7个报文。类似地, CONNECT报文也经历了4个跳 段,并且有4个确认,共有8个报文。因此,全部加在一起,总共需要发送15 个报文。 (3)NT2设备是NT和NT2设备结合而成的单个设备,该设备处理 物理层、数据链路层和网络层功能。NI!2的优点是比较便宜,但是如果线路技 术改变了,整个的设备必须更换。 (4)榕树交换机每一级根据输入线路的信元号决定输出端口,题中的 8个信元用3bit表示,每级根据相应位的值决定向上端口转发(为0),还是向 下端口转发(为1)。当2个输入信元想在同一时刻通过同一交换机单元的同 端口时会发生冲突。在图中的第1级,冲突涉及前往下列输出线路对的信元:(5
x.1.11.11.11.11.15. 12.12.12.12.13 x.2.11.11.11.11.15. 12.12.12.12.13 x.3.11.11.11.11.15. 12.12.12.12.13 x.4.11.11.11.11.15. 12.12.12.12.13 x.5.11.11.11.11.15. 12.12.12.12.13 x.1.22.22.22.22. 88.22.22.22.22.0 x.2.22.22.22.22. 88.22.22.22.22.0 x.3.22.22.22.22. 88.22.22.22.22.0 x.4.22.22.22.22. 88.22.22.22.22.0 x.5.22.22.22.22. 88.22.22.22.22.0 x.1.11.11.11.11. 86.33.33.33.33.16 x.2.11.11.11.11. 86.33.33.33.33.16 x.3.11.11.11.11. 86.33.33.33.33.16 x.4.11.11.11.11. 86.33.33.33.33.16 x.5.11.11.11.11. 86.33.33.33.33.16 ? x=1.3.6.1.2.1.6.13.1=tCpConnEntry 的对象标识符 图 c 试题三 (1) (2)禁止删除和生成。 (3)A.1.3.2.5.65.66.67.68.72。 (4)发出请求:GetBulkRequest[非重复数,=1,最大后继数=2] {sysUpTime perChArACteristiC1 perChArACteristiC2} 预期代理的响应:Response((sysUpTime.0=″100100″), (perChArACteristiC1.2.5.65.66.67.68.72=″30″, perChArACteristiC.2.5.65.66.67.68.72=″67″),(perChArACteristiC1.5.2. 65.67=″41″, perChArACteristiC2.5.2.65.67=″AAA″)) 发出下一请求:GetBulkRequest[非重复数,=1,最大后继数=2] {sysUpTime,perChArACteristiC1.5.2.65.67,perChArACteristiC2.5.2.65.67} 预期代理的响应:Response((sysUpTime.0=″100111″), (perChArACteristiC1.8.4.68.68.68=″15″, perChArACteristiC2.8.4.68.68.68.68=″AC11″),(perChArACteristiC1.21.4 .68.68.68=″45″,perChArACteristiC2.21.4.68.68.68=″XYZ″)) 试题四 (1)小的定长信元可以快速地选择路径通过交换机,并且对其进行的 交换操作可以完全用硬件来实现。 (2)让 SETUP 报文到达目的地需要 4 个跳段,除了最后 1 个跳段外, 每个跳段都被确认,这样共有 7 个报文。类似地,CONNECT 报文也经历了 4 个跳 段,并且有 4 个确认,共有 8 个报文。因此,全部加在一起,总共需要发送 15 个报文。 (3)NT12 设备是 NT1 和 NT2 设备结合而成的单个设备,该设备处理 物理层、数据链路层和网络层功能。NT12 的优点是比较便宜,但是如果线路技 术改变了,整个的设备必须更换。 (4)榕树交换机每一级根据输入线路的信元号决定输出端口,题中的 8 个信元用 3bit 表示,每级根据相应位的值决定向上端口转发(为 0),还是向 下端口转发(为 1)。当 2 个输入信元想在同一时刻通过同一交换机单元的同一 端口时会发生冲突。在图中的第 1 级,冲突涉及前往下列输出线路对的信元;(5