当前位置:文档之家› 武汉理工大学 计算机网络课程设计 发送TCP数据包报告 中国好学长系列之小灰灰的爸爸

武汉理工大学 计算机网络课程设计 发送TCP数据包报告 中国好学长系列之小灰灰的爸爸

2 课程设计要求
本设计的功能是填充一个 TCP 数据包,并发送给目的主机。 1)以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port,其中 SendTCP 是程序名,source_ip 为源端 IP 地址,source_port 为源端口号,dest_ip 为目 的地址,dest_port 为目的端口号。 2)其他的 TCP 头部参数请自行设定。 3)数据字段为“This is my homework of network,I am happy!”。 4)成功发送后在屏幕上输出“send OK”。
目录
1 课程设计目的...................................................................................................................................................... 4 2 课程设计要求...................................................................................................................................................... 4 3 相关知识.............................................................................................................................................................. 4 4 课程设计分析..................................................................................................................................................... 5 5 程序清单及注释.................................................................................................................................................. 8 6 运行结果及分析................................................................................................................................................ 16 7 参考文献............................................................................................................................................................ 17
学 号:
武汉理工大学《计算机网络》课程设计说明书
课程设计
题目 学院 专业 班级 姓名 指导教师
IP 地址的合法性及子网判断 计算机科学与技术 软件工程 中国好学长系列 小灰灰的爸爸 刘东飞
2014 年 6 月 25 日
武汉理工大学《计算机网络》课程设计说明书
课程设计任务书
学生姓名: 小灰灰的爸爸
专业班级: 中国好学长系列
//4 位首部长度,4 位 IP 版本号
UCHAR tos;
//8 位服务类型 TOS
USHORT total_len;
//16 位总长度(字节)
USHORT ident;
//16 位标识
USHORT frag_and_flags; //3 位标志位
ULONG daddr;
//目的地址
UCHAR mbz;
//没用
UCHAR ptcl;
//协议类型
USHORT tcpl;
//TCP 长度
}PSD_HEADER;
typedef struct _tcphdr //定义 TCP 首部
{
USHORT th_sport;
//16 位源端口
USHORT th_dporห้องสมุดไป่ตู้;
USHORT th_sum; //16 位校验和
USHORT th_urp; //16 位紧急数据偏移量
}TCP_HEADER;
3.计算校验和的子函数
在填充数据包的过程中,需要调用计算校验和的函数 checksum 两次,分别用于校验 IP
头和 TCP 头部(加上伪头部),其实现代码如下:
USHORT checksum(USHORT *buffer, int size)
3 相关知识
了解 TCP 是一种面向连接的,可靠的传输层协议。TCP 协议是在网络层 IP 层协议的基 础上,向应用层用户提供可靠的、全双工的数据流传输。当应用进程有报文需要通过 TCP 发送时,它就将此应用层报文传送给执行 TCP 协议的传输实体。TCP 传输实体将用户数据 加上 IP 头部,形成 IP 包。
武汉理工大学《计算机网络》课程设计说明书
2.构造 IP 头和 TCP 头
这里, IP 头和 TCP 头以及 TCP 伪部的构造请参考下面它们的数据结构。
typedef struct _iphdr //定义 IP 首部
{
UCHAR h_lenver;
//4 位首部长度+4 位 IP 版本号
UCHAR tos;
这里,设置了 SOCK_RAW 标志,表示我们声明的是一个原始套接字类型。 为使用发送接收超时设置,必须将标志位置位置为 WSA_FLAG_OVERLAPPED。在本课程 设计中,发送 TCP 包时隐藏了自己的 IP 地址,因此我们要自己填充 IP 头,设置 IP 头操 作选项。其中 flag 设置为 ture,并设定 IP_HDRINCL 选项,表明自己来构造 IP 头。 setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)); int timeout=1000; setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout)); 在这里我们使用基本套接字 SOL_SOCKET,设置 SO_SNDTIMEO 表示使用发送超时设置, 超时时间设置为 1000ms。
USHORT checksum; //16 位 IP 首部校验和
ULONG sourceIP;
//32 位源 IP 地址
ULONG destIP;
//32 位目的 IP 地址
}IP_HEADER;
typedef struct psd_hdr //定义 TCP 伪首部
{
ULONG saddr;
//源地址
武汉理工大学《计算机网络》课程设计说明书
#pragma comment(lib,"ws2_32.lib")
#define IPVER 4
//IP 协议预定
#define MAX_BUFF_LEN 65500 //发送缓冲区最大值
typedef struct ip_hdr //定义 IP 首部
{
UCHAR h_verlen;
cksum += (cksum >>16);
return (USHORT)(~cksum);
武汉理工大学《计算机网络》课程设计说明书
开始
构造原始套接字 并初始化
填 充 IP首 部 计 算 IP首 部 校 验 和
构 造 TCP伪 首 部 填 充 TCP首 部
计 算 TCP首 部 校 验 和
填充发送缓冲区
填入目的地址 发送数据包 结束
}
图 4-1 程序流程图
5 程序清单及注释
#include <stdio.h> #include <string.h> #include <winsock2.h> #include <ws2tcpip.h> #include <time.h> #include <windows.h> #include <stdlib.h> #include <iostream>
//8 位服务类型 TOS
USHORT total_len;
//16 位总长度(字节)
USHORT ident;
//16 位标识
USHORT frag_and_flags; //3 位标志位
UCHAR ttl;
//8 位生存时间 TTL
UCHAR proto;
//8 位协议 (TCP, UDP 或其他)
//16 位目的端口
ULONG th_seq;
//32 位序列号
武汉理工大学《计算机网络》课程设计说明书
ULONG th_ack;
//32 位确认号
UCHAR th_lenres; //4 位首部长度/6 位保留字
UCHAR th_flag;
//6 位标志位
USHORT th_win;
//16 位窗口大小
1)以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port,其中 SendTCP 是程 序名,source_ip 为源端 IP 地址,source_port 为源端口号,dest_ip 为目的地址,dest_port 为目的 端口号。
相关主题