赞
踩
计算机网络课程设计实验报告(北京科技大学arp、ftp、ip包)
计算机网络课程设计实验报告 任课教师: 班 级: 学 号: 姓 名: 目录 实验一 ARP封装并发送3 课程设计目的:3 课程设计要求:3 课程设计分析:3 程序设计分析:4 实验结果6 源程序6 实验二 解析IP数据包9 课程设计目的:9 课程设计要求:9 课程设计分析:10 程序设计分析10 实验结果14 源代码14 实验三 FTP客户机18 课程设计目的:18 课程设计要求:18 课程设计分析:18 程序设计原理:18 实验结果24 源代码25 实验心得体会38 实验一 ARP封装并发送 课程设计目的: • ARP协议用于完成IP地址与MAC地址之间的转换。通过封装与发送ARP数据包,加深对ARP协议的理解,掌握ARP帧结构和工作原理及其对协议栈的贡献。 课程设计要求: • 编写程序,根据ARP帧的结构,封装ARP帧。 • 要求程序为命令行程序,以命令行的形式运行: SENDARP S-IP S-MAC D-IP D-MAC 其中: SENDARP:可执行程序名 S-IP:源IP地址 S-MAC:源MAC地址 D-IP:目的IP地址 D-MAC:目的MAC地址 课程设计分析: • 使用winpcap访问网卡,手动封装 • 定义ARP的数据结构 • 填充数据包 • 发送数据包 程序设计分析: ARP协议及工作原理 ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 ARP的基本运行过程是: 1) 主机A希望发送数据分组给主机B,但不知道B的物理地址。 2) A发送广播报文,要求B主机用它的物理地址来响应。 3) 网站上所有主机都接收到这个分组。 4) B识别出自己的IP地址,发送应答报文,告诉A自己的物理地址。 ARP的分组格式 物理帧头(14B) ARP帧结构(28B) 填充数据(18B) CRC(4B) 图一 ARP分组格式 目的MAC (6B) 源MAC(6B) 类型(2B) 图2 物理帧头 0 8 16 24 31(位) 硬件类型(Ethernet:0 x1) 上层协议类型(IP:0 x0800) 硬件地址长度(0 x6) IP地址长度(0 x4) 操作(请求: 0 x1; 应答: 0 x2) 源MAC地址 源MAC地址 源IP地址 源IP地址 目的MAC地址 目的MAC地址 目的IP地址 图3 ARP帧结构 ARP包的填充 将命令行的参数作适当的转换后填到ARP分组结构的各字段中即可。 要注意的是,填充请求包时。因为包要在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。“填充数据”字段要填充为0。 实验结果 源程序 #include #include #pragma comment(lib,“ws2_32.lib“) #pragma comment(lib,“wpcap.lib“) #include #pragma pack(1) struct arp_packet //arp包结构 { unsigned char dest_mac[6]; //目标主机MAC地址 unsigned char source_mac[6]; //源端MAC地址 unsigned short eh_type; //以太网类型 unsigned short hardware_type; //硬件类型:以太网接口类型为1 unsigned short protocol_type; //协议类型:IP协议类型为0X0800 unsigned char add_len; //硬件地址长度:MAC地址长度为6B unsigned char pro_len; //协议地址长度:IP地址长度为4B unsigned short option; //操作:ARP请求为1,ARP应答为2 unsigned char sour_addr[6]; //源MAC地址:发送方的MAC地址 unsigned long sour_ip; //源IP地址:发送方的IP地址 unsigned char dest_addr[6]; //目的MAC地址:ARP请求中该字段没有意义;ARP响应中为接收方的MAC地址 unsigned long dest_ip; //目的IP地址:ARP请求中为请求解析的IP地址;ARP响应中为接收方的IP地址 unsigned char padding[18]; }; #pragma pack() unsigned char* BuildArpPacket(unsigned char* source_mac, unsigned char* dest_mac,unsigned long src_ip,unsigned long dest_ip); void main() { pcap_if_t *alldevs, *d;//用于存储网络设备 int i=0; char err
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。