版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计计算机硬件基算机硬件基础教学础教学中心中心Copyright by NUPT All rights reserved.1Technology of Network Programming网络编程技术网络编程技术网络编程技术网络编程技术2 路由器是实现路由器是实现IP协议最为关键协议最为关键的设备之一。通过简单路由器的设备之一。通过简单路由器程序的设计与实现,掌握路由程序的设计与实现,掌握路由器基本工作原理,理解路由选器基本工作原理,理解路由选择与数据包转发的方法择与数据包转发的方法网络编程技术网络编程技术3 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设
2、计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术4 在理解在理解IP协议、协议、ICMP协议与路由选择基本工协议与路由选择基本工作原理的基础上,完成路由器基本功能的设计作原理的基础上,完成路由器基本功能的设计与编程实现与编程实现 掌握掌握Windwos平台下路由程序测试环境的搭建平台下路由程序测试环境的搭建方法方法 熟悉熟悉Winpcap编程,掌握数据包捕获与发送的编程,掌握数据包捕获与发送的方法。熟悉动态路由协议原理以及动态路由表方法。熟悉动态路由协议原理以及动态路由表的实现方法的实现方法网络编程技术网络编程技术5 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识
3、介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术6利用利用Winpcap编写一个简单的路由处理程序,编写一个简单的路由处理程序,该路由程序应该至少应该包括以下功能:该路由程序应该至少应该包括以下功能: 静态路由表维护静态路由表维护 IP数据包处理数据包处理 ARP请求与解析请求与解析 处理处理IP数据包的数据包的TTL值值 重新计算重新计算IP数据包的头部校验和数据包的头部校验和 生成和处理生成和处理ICMP报文报文 记录日志功能记录日志功能 网络编程技术网络编程技术7程序运行的参考界面程序运行的参考界面 网络编程技术网络编程技术8 编程训练目的编程训练
4、目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术9路由器结构路由器结构 网络编程技术网络编程技术10路由器基本功能路由器基本功能 为经过的为经过的IP数据包选择路由数据包选择路由处理处理IP数据包选项数据包选项处理处理IP数据包数据包TTL值值分片处理分片处理重新计算重新计算IP数据包的头部校验和数据包的头部校验和生成和处理生成和处理ICMP报文报文实现动态路由协议、维护静态路由实现动态路由协议、维护静态路由实现实现ARP协议、形成数据帧协议、形成数据帧网络编程技术网络编程技术11路由选择的基本原理路由选择的基本原
5、理IP互联网采用表驱动的路由选择算法互联网采用表驱动的路由选择算法需要路由选择的设备保存一张需要路由选择的设备保存一张IP路由表路由表路由表存储有关目的地址及怎样到达目的地路由表存储有关目的地址及怎样到达目的地的信息的信息通过查询路由表决定把数据报发往何处通过查询路由表决定把数据报发往何处IP路由选择利用路由选择利用IP地址隐藏主机信息地址隐藏主机信息连接到同一网络的所有主机共享同一网络号连接到同一网络的所有主机共享同一网络号网络编程技术网络编程技术12标准的路由选择算法标准的路由选择算法网络编程技术网络编程技术13子网选路子网选路网络编程技术网络编程技术14路由表路由表 路由表中的每一条路由
6、表项含有五个属性路由表中的每一条路由表项含有五个属性 :目的网络地址、网络掩码、下一跳、接口和跃点数目的网络地址、网络掩码、下一跳、接口和跃点数 网络编程技术网络编程技术15相关的相关的ICMP差错报文差错报文 目的不可达报文目的不可达报文当路由器不能为数据包找到路由器或主机交付数据当路由器不能为数据包找到路由器或主机交付数据包时,就丢弃该数据包,然后向源主机发出包时,就丢弃该数据包,然后向源主机发出ICMP目的不可达报文目的不可达报文 超时报文超时报文路由器在转发数据包时,如果生存周期路由器在转发数据包时,如果生存周期TTL值减值减1后为后为0,就丢弃这个数据包。当丢弃这样的数据包,就丢弃这
7、个数据包。当丢弃这样的数据包时,路由器向源主机发送一个超时报文时,路由器向源主机发送一个超时报文当计时器的时限到,而目的主机还没有接收到一个当计时器的时限到,而目的主机还没有接收到一个数据包的所有分片时,它会将接收的分片丢弃,并数据包的所有分片时,它会将接收的分片丢弃,并向源主机发送超时报文向源主机发送超时报文 网络编程技术网络编程技术16 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术17 测试环境示意图测试环境示意图 网络编程技术网络编程技术18 测试环境示意图测试环境示意图 逻辑结构逻辑
8、结构物理结构物理结构网络编程技术网络编程技术19路由器初始化模块路由器初始化模块初始化模块负责初始化设备,添加与路由器直接初始化模块负责初始化设备,添加与路由器直接相连网络的路由表项,并启动相应的数据包捕获相连网络的路由表项,并启动相应的数据包捕获与处理模块与处理模块 静态路由表维护模块静态路由表维护模块静态路由表维护模块完成路由表的添加、删除以静态路由表维护模块完成路由表的添加、删除以及显示及显示 数据包捕获与处理模块数据包捕获与处理模块 数据包捕获与处理模块用于捕获流经本路由器的数据包捕获与处理模块用于捕获流经本路由器的数据包并按照路由协议进行处理数据包并按照路由协议进行处理 网络编程技术
9、网络编程技术20定义数据包头数据结构定义数据包头数据结构 #pragma pack(1)typedef struct FrameHeader_t / 帧首部帧首部 UCHARDesMAC6; / 目的地址目的地址 UCHARSrcMAC6; / 源地址源地址 USHORTFrameType; / 帧类型帧类型 FrameHeader_t;typedef struct ARPFrame_t / ARP帧帧FrameHeader_t FrameHeader; / 帧首部帧首部 WORDHardwareType; / 硬件类型硬件类型WORDProtocolType; / 协议类型协议类型BYTEH
10、Len; / 硬件地址长度硬件地址长度BYTEPLen; / 协议地址长度协议地址长度WORDOperation; / 操作值操作值UCHARSendHa6; / 源源MAC地址地址ULONGSendIP; / 源源IP地址地址UCHARRecvHa6; / 目的目的MAC地址地址ULONGRecvIP; / 目的目的IP地址地址 ARPFrame_t;网络编程技术网络编程技术21定义数据包头数据结构定义数据包头数据结构 typedef struct IPHeader_t / IP首部首部BYTEVer_HLen; / 版本版本+头部长度头部长度BYTETOS; / 服务类型服务类型WORDT
11、otalLen; / 总长度总长度WORDID; / 标识标识WORDFlag_Segment; / 标志标志+片偏移片偏移BYTETTL; / 生存时间生存时间BYTEProtocol; / 协议协议WORDChecksum; / 头部校验和头部校验和ULONG SrcIP; / 源源IP地址地址ULONG DstIP; / 目的目的IP地址地址 IPHeader_t;typedef struct ICMPHeader_t / ICMP首部首部BYTE Type; / 类型类型BYTE Code; / 代码代码WORD Checksum; / 校验和校验和WORD Id; / 标识标识WOR
12、D Sequence; / 序列号序列号 ICMPHeader_t;网络编程技术网络编程技术22路由器初始化模块路由器初始化模块初始化模块负责初始化设备,添加与路由器直接初始化模块负责初始化设备,添加与路由器直接相连网络的路由表项,并启动相应的数据包捕获相连网络的路由表项,并启动相应的数据包捕获与处理模块与处理模块 静态路由表维护模块静态路由表维护模块静态路由表维护模块完成路由表的添加、删除以静态路由表维护模块完成路由表的添加、删除以及显示及显示 数据包捕获与处理模块数据包捕获与处理模块 数据包捕获与处理模块用于捕获流经本路由器的数据包捕获与处理模块用于捕获流经本路由器的数据包并按照路由协议进
13、行处理数据包并按照路由协议进行处理 网络编程技术网络编程技术231、定义、定义存储信息接口存储信息接口数据结构数据结构 typedef struct ip_t / 网络地址网络地址ULONGIPAddr; / IP地址地址ULONGIPMask; / 子网掩码子网掩码 ip_t;typedef struct IfInfo_t / 接口信息接口信息CStringDeviceName; / 设备名设备名CStringDescription; / 设备描述设备描述UCHARMACAddr6; / MAC地址地址CArray ip; / IP地址列表地址列表pcap_t*adhandle; / pca
14、p句柄句柄 IfInfo_t; /打开并由一个线程监听流经该接口的数据报打开并由一个线程监听流经该接口的数据报网络编程技术网络编程技术241、定义、定义路由表数据结构路由表数据结构 typedef struct RouteTable_t / 路由表结构路由表结构ULONG Mask; / 子网掩码子网掩码ULONG DstIP; / 目的地址目的地址ULONG NextHop; / 下一跳步下一跳步UINTIfNo; / 接口序号接口序号 RouteTable_t;网络编程技术网络编程技术252、定义全局变量、定义全局变量 IfInfo_t IfInfoMAX_IF; / 接口信息数组接口信息
15、数组UINT_PTR TimerCount; / 定时器个数定时器个数CList SP; / 发送数据包缓存队列发送数据包缓存队列CList IP_MAC; / IP-MAC地址映射列表地址映射列表CList RouteTable; / 路由表路由表网络编程技术网络编程技术26网络编程技术网络编程技术273、初始化、初始化-获得本机的设备列表获得本机的设备列表 / 获得本机的设备列表获得本机的设备列表 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /*无需认证无需认证*/, &alldevs, errbuf) = -1) / 错误,返
16、回错误信息错误,返回错误信息 sprintf(strbuf, pcap_findalldevs_ex错误错误: %s, errbuf);MessageBox(strbuf);PostMessage(WM_QUIT, 0, 0); 网络编程技术网络编程技术283、初始化、初始化-获得接口信息和获得接口信息和IP地址信息地址信息 for(d = alldevs; d != NULL; d = d-next)if(d-addresses != NULL)/ 排除集成排除集成modem的影响(没有的影响(没有IP地址)地址)/ 得到一个有效的接口和其得到一个有效的接口和其IP地址列表地址列表IfInf
17、oi.DeviceName = d-name;IfInfoi.Description = d-description;for(a = d-addresses; a; a = a-next)if (a-addr-sa_family = AF_INET) ipaddr.IPAddr = (struct sockaddr_in *)a-addr)-sin_addr.s_addr);ipaddr.IPMask = (struct sockaddr_in *)a-netmask)- sin_addr.s_addr);IfInfoi.ip.Add(ipaddr);j+;if (i=MAX_IF)/ 最多处
18、理最多处理MAX_IF个接口个接口break; elsei+;网络编程技术网络编程技术293、初始化、初始化-打开设备接口打开设备接口 / 打开接口打开接口for (i=0; i IfCount; i+)if ( (IfInfoi.adhandle = pcap_open(IfInfoi.DeviceName, / 设备名设备名65536, / 最大包长度最大包长度PCAP_OPENFLAG_PROMISCUOUS, / 混杂模式混杂模式1000, / 超时时间超时时间NULL, / 远程认证远程认证errbuf / 错误缓存错误缓存 ) ) = NULL)/ 错误,显示错误信息错误,显示错误
19、信息sprintf(strbuf, 接口未能打开。接口未能打开。WinPcap不支持不支持%s。, IfInfoi.DeviceName);MessageBox(strbuf);PostMessage(WM_QUIT, 0, 0);网络编程技术网络编程技术303、初始化、初始化-获得各接口获得各接口MAC地址地址 / 开启数据包捕获线程,获取本地接口的开启数据包捕获线程,获取本地接口的MAC地址,线程数目为网卡个数地址,线程数目为网卡个数CWinThread* pthread;for (i = 0; i IfCount; i+)pthread = AfxBeginThread(CaptureL
20、ocalARP, &IfInfoi, THREAD_PRIORITY_NORMAL);if(!pthread)MessageBox(创建数据包捕获线程失败!创建数据包捕获线程失败!);PostMessage(WM_QUIT, 0, 0);/ 为得到真实网卡地址,使用虚假的为得到真实网卡地址,使用虚假的MAC地址和地址和IP地址向本机发送地址向本机发送ARP请求请求setMAC(srcMAC, 66);/ 设置虚假的设置虚假的MAC地址地址srcIP = inet_addr(112.112.112.112);/ 设置虚假的设置虚假的IP地址地址for (i = 0; i IfCount;
21、 i+) ARPRequest(IfInfoi.adhandle, srcMAC, srcIP, IfInfoi.ip0.IPAddr);网络编程技术网络编程技术313、初始化、初始化-初始化路由表初始化路由表 / 初始化路由表并显示初始化路由表并显示RouteTable_t rt;for (i = 0; i IfCount; i+)for (j = 0; j IfInfoi.ip.GetSize(); j+)rt.IfNo = i;rt.DstIP = IfInfoi.ipj.IPAddr & IfInfoi.ipj.IPMask;rt.Mask = IfInfoi.ipj.IPMa
22、sk;rt.NextHop = 0;/ 直接投递直接投递RouteTable.AddTail(rt);m_RouteTable.InsertString(-1, IPntoa(rt.Mask) + - + IPntoa(rt.DstIP) + - + IPntoa(rt.NextHop) + (直接投递直接投递);网络编程技术网络编程技术323、初始化、初始化-设置过滤规则开始捕获设置过滤规则开始捕获 / 设置过滤规则设置过滤规则:仅仅接收仅仅接收arp响应帧和需要路由的帧响应帧和需要路由的帧CString Filter, Filter0, Filter1; 只接收需要转发的只接收需要转发的I
23、P数据报,共同特点是目的数据报,共同特点是目的Filter0 = “(”; MAC地址指向本机,但目的地址指向本机,但目的IP地址不属于本机地址不属于本机Filter1 = “(”; 转发需要转发需要MAC地址,所以还需接收地址,所以还需接收ARP应答包应答包for (i = 0; i IfCount; i+)Filter0 += (ether dst + MACntoa(IfInfoi.MACAddr) + );for (j = 0; j IfInfoi.ip.GetSize(); j+) /mac地址为本路由器接口地址为本路由器接口Filter1 += (ip dst host + IPn
24、toa(IfInfoi.ipj.IPAddr) + );if (j = (IfInfoi.ip.GetSize() -1) & (i = (IfCount-1) Filter1 += “)”; /IP地址为本机的接口地址地址为本机的接口地址else Filter1 += or ;if (i = (IfCount-1)Filter0 += ); else Filter0 += or ; /需要转发的数据包需要转发的数据包Filter = Filter0 + and (arp and (ether21=0 x2) or (not + Filter1 + );网络编程技术网络编程技术33AR
25、P帧结构帧结构1632bit硬件类型硬件类型协议类型协议类型硬件地址长度硬件地址长度协议长度协议长度操作操作(Request 1, Reply 2)发送方硬件地址发送方硬件地址发送方发送方IP地址地址目的硬件地址目的硬件地址目的目的IP地址地址网络编程技术网络编程技术343、初始化、初始化-设置过滤规则开始捕获设置过滤规则开始捕获 表达式支持逻辑操作符,表达式支持逻辑操作符,and /or /not基于协议的过滤要使用协议限定符,可以是基于协议的过滤要使用协议限定符,可以是 IP /ARP /RARP /TCP /UDP等。等。基于基于MAC过滤要使用限定符过滤要使用限定符ether基于基于I
26、P地址过滤使用限定符地址过滤使用限定符host基于端口的过滤使用限定符基于端口的过滤使用限定符port网络编程技术网络编程技术353、初始化、初始化-设置过滤规则开始捕获设置过滤规则开始捕获 if (pcap_compile(IfInfoi.adhandle , &fcode, strbuf, 1, IfInfoi.ip0.IPMask) 0 )MessageBox(过滤规则编译不成功,请检查书写的规则语法是否正确!过滤规则编译不成功,请检查书写的规则语法是否正确!);PostMessage(WM_QUIT,0,0);if (pcap_setfilter(IfInfoi.adhandl
27、e, &fcode)0)MessageBox(设置过滤器错误!设置过滤器错误!);PostMessage(WM_QUIT, 0, 0); / 开始捕获数据包开始捕获数据包for (i=0; i IfCount; i+) pthread = AfxBeginThread(Capture, &IfInfoi, THREAD_PRIORITY_NORMAL);网络编程技术网络编程技术36路由器初始化模块路由器初始化模块初始化模块负责初始化设备,添加与路由器直接初始化模块负责初始化设备,添加与路由器直接相连网络的路由表项,并启动相应的数据包捕获相连网络的路由表项,并启动相应的数据包捕获
28、与处理模块与处理模块 静态路由表维护模块静态路由表维护模块静态路由表维护模块完成路由表的添加、删除以静态路由表维护模块完成路由表的添加、删除以及显示及显示 数据包捕获与处理模块数据包捕获与处理模块 数据包捕获与处理模块用于捕获流经本路由器的数据包捕获与处理模块用于捕获流经本路由器的数据包并按照路由协议进行处理数据包并按照路由协议进行处理 网络编程技术网络编程技术371、添加路由表项、添加路由表项 void CRouterDlg:OnInsert() flag = false;for (i=0; i IfCount; i+)for (j = 0; j IfInfoi.ip.GetSize();
29、j+)if (IfInfoi.ipj.IPAddr) & (IfInfoi.ipj.IPMask) = (IfInfoi.ipj.IPMask) & ipaddr) /判断该路由表项属于哪个接口判断该路由表项属于哪个接口rt.IfNo = i;/ 记录子网掩码记录子网掩码m_Mask.GetAddress(ipaddr); rt.Mask = htonl(ipaddr);/ 记录目的记录目的IPm_Destination.GetAddress(ipaddr);rt.DstIP = htonl(ipaddr);/ 记录下一跳记录下一跳m_NextHop.GetAddress(ip
30、addr);rt.NextHop = htonl(ipaddr);/ 把该条路由表项添加到路由表把该条路由表项添加到路由表RouteTable.AddTail(rt);/ 在路由表窗口中显示该路由表项在路由表窗口中显示该路由表项m_RouteTable.InsertString(-1, IPntoa(rt.Mask) + - + IPntoa(rt.DstIP) + - + IPntoa(rt.NextHop);flag = true;网络编程技术网络编程技术382、删除路由表项、删除路由表项 / 删除路由表项删除路由表项void CRouterDlg:OnDel() RouteTable_t
31、 rt;POSITION pos, CurrentPos;m_RouteTable.GetText(i, str);/ 取得子网掩码选项取得子网掩码选项strncat(ipaddr, str, 15);mask = inet_addr(ipaddr);/ 取得目的地址选项取得目的地址选项ipaddr0 = 0;strncat(ipaddr, &str19, 15);destination = inet_addr(ipaddr);/ 取得下一跳选项取得下一跳选项ipaddr0 = 0;strncat(ipaddr, &str38, 15);nexthop = inet_addr(
32、ipaddr);网络编程技术网络编程技术392、删除路由表项、删除路由表项 if (nexthop = 0)MessageBox(直接连接路由,不允许删除!直接连接路由,不允许删除!);/ 把该路由表项从路由表窗口中删除把该路由表项从路由表窗口中删除m_RouteTable.DeleteString(i);/ 路由表中没有需要处理的内容,则返回路由表中没有需要处理的内容,则返回if (RouteTable.IsEmpty() return;/ 遍历路由表遍历路由表,把需要删除的路由表项从路由表中删除把需要删除的路由表项从路由表中删除pos = RouteTable.GetHeadPositio
33、n();for (i=0; iadhandle, &header, &pkt_data); if (res = 1)FrameHeader_t *fh;fh = (FrameHeader_t *) pkt_data;网络编程技术网络编程技术421、数据包捕获、数据包捕获 switch (ntohs(fh-FrameType)case 0 x0806:ARPFrame_t *ARPf;ARPf = (ARPFrame_t *)pkt_data;/TRACE1(收到收到ARP包包 源源IP为:为:%dn, ARPf-SendIP);/ ARP包,转到包,转到ARP包处理函数包处理函
34、数ARPPacketProc(header, pkt_data);break;case 0 x0800:IPFrame_t *IPf;IPf = (IPFrame_t*) pkt_data;/TRACE1(收到收到IP包包 源源IP为:为:%dn,IPf-IPHeader.SrcIP );/ IP包,转到包,转到IP包处理函数包处理函数IPPacketProc(pIfInfo, header, pkt_data);break;default: 网络编程技术网络编程技术431、数据包缓存列表和、数据包缓存列表和 IP-MAC缓存列表缓存列表 typedef struct SendPacket_t
35、 / 发送数据包结构发送数据包结构intlen; / 长度长度BYTEPktData2000;/ 数据缓存数据缓存ULONGTargetIP; / 目的目的IP地址地址UINT_PTRn_mTimer; / 定时器定时器UINTIfNo; / 接口序号接口序号 SendPacket_t;typedef struct IP_MAC_t / IP-MAC地址映射结构地址映射结构ULONG IPAddr; / IP地址地址UCHAR MACAddr6; / MAC地址地址 IP_MAC_t;网络编程技术网络编程技术44网络编程技术网络编程技术452、IP数据包处理数据包处理 void IPPacke
36、tProc(IfInfo_t *pIfInfo, struct pcap_pkthdr *header, const u_char *pkt_data) IPFrame_t *IPf; SendPacket_t sPacket; IPf = (IPFrame_t *) pkt_data; / ICMP超时超时IPf-IPHeader.TTL -; /TTL值减去值减去1 if (IPf-IPHeader.TTL IPHeader); / ICMP差错差错 if (IsChecksumRight(char *)IpHeader) = 0) / 日志输出信息日志输出信息 pDlg-m_Log.In
37、sertString(-1, IP数据包包头校验和错误,丢弃数据包数据包包头校验和错误,丢弃数据包);网络编程技术网络编程技术462、IP数据包处理数据包处理 DWORD nextHop; / 经过路由选择算法得到的下一站目的经过路由选择算法得到的下一站目的IP地址地址 UINT ifNo; / 下一跳的接口序号下一跳的接口序号 / 路由查询路由查询 if(nextHop = RouteLookup(ifNo, IPf-IPHeader.DstIP, &RouteTable) = -1) / ICMP目的不可达目的不可达 ICMPPacketProc(pIfInfo, 3, 0, pk
38、t_data); else /查找到了下一跳查找到了下一跳 sPacket.IfNo = ifNo; sPacket.TargetIP = nextHop; cpyMAC(IPf-FrameHeader.SrcMAC, IfInfosPacket.IfNo.MACAddr); / 设设IP头中的校验和为头中的校验和为0 IPf-IPHeader.Checksum = 0; / 计算计算IP头部校验和头部校验和 IPf-IPHeader.Checksum = ChecksumCompute(check_buff, sizeof(IPHeader_t); 网络编程技术网络编程技术472、IP数据包处理数据包处理 / IP-MAC地址映射表中存在该映射关系地址映射表中存在该映射关系 if (IPLookup(sPacket.TargetIP, IPf-FrameHeader.DesMAC) memcpy(sPacket.PktData, pkt_data, header-len); sPacket.len = header-len; if(pcap_sendpacket(IfInfosPacket.IfNo.adhandle, (u_char *) sPacket.PktData, sPa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广东省深圳市中考英语试题含解析
- 长春版小学心理健康教育四年级(下)教案
- 期中提优卷(无答案) 2024-2025学年人教版(2024)英语七年级上册
- 2024至2030年中国控油洁面奶数据监测研究报告
- 2024至2030年中国带座轴承用润滑脂行业投资前景及策略咨询研究报告
- 2024至2030年中国室内绣花拖鞋数据监测研究报告
- 2024至2030年中国口咽通气管数据监测研究报告
- 2024至2030年中国单刃电动茶树修剪机数据监测研究报告
- 产品英语术语培训
- 2024至2030年中国2,2-二甲基联苯胺盐酸盐行业投资前景及策略咨询研究报告
- 2024至2030年高分子吸水树脂项目投资价值分析报告
- 期中测试卷(1-5单元)(试题)-2024-2025学年三年级上册数学人教版
- 学校食堂消毒记录
- 塔吊使用安全协议书
- 吉林市2024-2025学年度高三第一次模拟测试 (一模)数学试卷(含答案解析)
- 地 理气温的变化和分布课时1课件-2024-2025学年七年级地理上册(人教版2024)
- Unit4+My+space++Reading++The+1940s+House+课件高中英语沪教版(2020)必修第一册
- 4.1 中国特色社会主义进入新时代 课件高中政治统编版必修一中国特色社会主义-1
- 海淀区高一年级第一学期期末数学试题含答案
- 2025年公务员考试时政专项测验100题及答案
- TSG ZF003-2011《爆破片装置安全技术监察规程》
评论
0/150
提交评论