武汉理工大学 计算机网络课程设计 发送TCP数据包报告 中国好学长系列之小灰灰的爸爸
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
填入目的地址 发送数据包 结束
}
图 4-1 程序流程图
5 程序清单及注释
#include <stdio.h> #include <string.h> #include <winsock2.h> #includห้องสมุดไป่ตู้ <ws2tcpip.h> #include <time.h> #include <windows.h> #include <stdlib.h> #include <iostream>
ULONG daddr;
//目的地址
UCHAR mbz;
//没用
UCHAR ptcl;
//协议类型
USHORT tcpl;
//TCP 长度
}PSD_HEADER;
typedef struct _tcphdr //定义 TCP 首部
{
USHORT th_sport;
//16 位源端口
USHORT th_dport;
1)以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port,其中 SendTCP 是程 序名,source_ip 为源端 IP 地址,source_port 为源端口号,dest_ip 为目的地址,dest_port 为目的 端口号。
2)其他的 TCP 头部参数请自行设定。
指导教师: 刘东飞
工作单位: 计算机学院
题目六: 发送 TCP 数据包
初始条件:
(1)学习相关知识 (2)C/C++/VC/VB/JAVA 语言 (3)PC 机一台
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
本设计的功能是填充一个 TCP 数据包,并发送给目的主机。
武汉理工大学《计算机网络》课程设计说明书
1 课程设计目的
TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP 协议在网络层 IP 协 议的基础上,向应用层用户进程提供可靠的、全双工的数据流传输。本课程设计的目的就 是设计一个发送 TCP 数据包的程序,并根据本设计说明 TCP 数据包的结构以及 TCP 协议以 及 IP 协议的关系,使学生对 TCP 协议的工作原理有更深入的认识。
//16 位目的端口
ULONG th_seq;
//32 位序列号
武汉理工大学《计算机网络》课程设计说明书
ULONG th_ack;
//32 位确认号
UCHAR th_lenres; //4 位首部长度/6 位保留字
UCHAR th_flag;
//6 位标志位
USHORT th_win;
//16 位窗口大小
USHORT checksum; //16 位 IP 首部校验和
ULONG sourceIP;
//32 位源 IP 地址
ULONG destIP;
//32 位目的 IP 地址
}IP_HEADER;
typedef struct psd_hdr //定义 TCP 伪首部
{
ULONG saddr;
//源地址
//8 位服务类型 TOS
USHORT total_len;
//16 位总长度(字节)
USHORT ident;
//16 位标识
USHORT frag_and_flags; //3 位标志位
UCHAR ttl;
//8 位生存时间 TTL
UCHAR proto;
//8 位协议 (TCP, UDP 或其他)
3)数据字段为“This is my homework of network ,I am happy!”。
4)成功发送后在屏幕上输出“send OK”。
时间安排:
第一、二天:查阅资料,学习算法 第三、四天:编程调试 第五天:书写报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年 月日
武汉理工大学《计算机网络》课程设计说明书
学 号:
武汉理工大学《计算机网络》课程设计说明书
课程设计
题目 学院 专业 班级 姓名 指导教师
IP 地址的合法性及子网判断 计算机科学与技术 软件工程 中国好学长系列 小灰灰的爸爸 刘东飞
2014 年 6 月 25 日
武汉理工大学《计算机网络》课程设计说明书
课程设计任务书
学生姓名: 小灰灰的爸爸
专业班级: 中国好学长系列
cksum += (cksum >>16);
return (USHORT)(~cksum);
武汉理工大学《计算机网络》课程设计说明书
开始
构造原始套接字 并初始化
填 充 IP首 部 计 算 IP首 部 校 验 和
构 造 TCP伪 首 部 填 充 TCP首 部
计 算 TCP首 部 校 验 和
填充发送缓冲区
武汉理工大学《计算机网络》课程设计说明书
#pragma comment(lib,"ws2_32.lib")
#define IPVER 4
//IP 协议预定
#define MAX_BUFF_LEN 65500 //发送缓冲区最大值
typedef struct ip_hdr //定义 IP 首部
{
UCHAR h_verlen;
3 相关知识
了解 TCP 是一种面向连接的,可靠的传输层协议。TCP 协议是在网络层 IP 层协议的基 础上,向应用层用户提供可靠的、全双工的数据流传输。当应用进程有报文需要通过 TCP 发送时,它就将此应用层报文传送给执行 TCP 协议的传输实体。TCP 传输实体将用户数据 加上 IP 头部,形成 IP 包。
TCP 报头 TCP 数据
IP 报头
IP 数据
武汉理工大学《计算机网络》课程设计说明书
图 3—1 TCP 数据包加上 IP 报头形成 IP 包
TCP 头部:源端口号 目的端口号 序号 确认号 报头长度 保留 URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 选项及填充
校验和:该长度为 16 位,校验和的校验范围包括伪头部、TCP 报头以及应用层来的数据
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
USHORT th_sum; //16 位校验和
USHORT th_urp; //16 位紧急数据偏移量
}TCP_HEADER;
3.计算校验和的子函数
在填充数据包的过程中,需要调用计算校验和的函数 checksum 两次,分别用于校验 IP
头和 TCP 头部(加上伪头部),其实现代码如下:
USHORT checksum(USHORT *buffer, int size)
4 课程设计分析
本课程设计的目标是发送一个 TCP 数据包,可以利用原始套接字来完成这个工作。整 个程序由初始化原始套接字和发送 TCP 数据包两个部分组成。
1.创建一个原始套接字,并设置 IP 头选项
SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPE D);
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”。
//4 位首部长度,4 位 IP 版本号
UCHAR tos;
//8 位服务类型 TOS
USHORT total_len;
//16 位总长度(字节)
USHORT ident;
//16 位标识
USHORT frag_and_flags; //3 位标志位
目录
1 课程设计目的...................................................................................................................................................... 4 2 课程设计要求...................................................................................................................................................... 4 3 相关知识.............................................................................................................................................................. 4 4 课程设计分析..................................................................................................................................................... 5 5 程序清单及注释.................................................................................................................................................. 8 6 运行结果及分析................................................................................................................................................ 16 7 参考文献............................................................................................................................................................ 17
武汉理工大学《计算机网络》课程设计说明书
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。
}
图 4-1 程序流程图
5 程序清单及注释
#include <stdio.h> #include <string.h> #include <winsock2.h> #includห้องสมุดไป่ตู้ <ws2tcpip.h> #include <time.h> #include <windows.h> #include <stdlib.h> #include <iostream>
ULONG daddr;
//目的地址
UCHAR mbz;
//没用
UCHAR ptcl;
//协议类型
USHORT tcpl;
//TCP 长度
}PSD_HEADER;
typedef struct _tcphdr //定义 TCP 首部
{
USHORT th_sport;
//16 位源端口
USHORT th_dport;
1)以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port,其中 SendTCP 是程 序名,source_ip 为源端 IP 地址,source_port 为源端口号,dest_ip 为目的地址,dest_port 为目的 端口号。
2)其他的 TCP 头部参数请自行设定。
指导教师: 刘东飞
工作单位: 计算机学院
题目六: 发送 TCP 数据包
初始条件:
(1)学习相关知识 (2)C/C++/VC/VB/JAVA 语言 (3)PC 机一台
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
本设计的功能是填充一个 TCP 数据包,并发送给目的主机。
武汉理工大学《计算机网络》课程设计说明书
1 课程设计目的
TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。TCP 协议在网络层 IP 协 议的基础上,向应用层用户进程提供可靠的、全双工的数据流传输。本课程设计的目的就 是设计一个发送 TCP 数据包的程序,并根据本设计说明 TCP 数据包的结构以及 TCP 协议以 及 IP 协议的关系,使学生对 TCP 协议的工作原理有更深入的认识。
//16 位目的端口
ULONG th_seq;
//32 位序列号
武汉理工大学《计算机网络》课程设计说明书
ULONG th_ack;
//32 位确认号
UCHAR th_lenres; //4 位首部长度/6 位保留字
UCHAR th_flag;
//6 位标志位
USHORT th_win;
//16 位窗口大小
USHORT checksum; //16 位 IP 首部校验和
ULONG sourceIP;
//32 位源 IP 地址
ULONG destIP;
//32 位目的 IP 地址
}IP_HEADER;
typedef struct psd_hdr //定义 TCP 伪首部
{
ULONG saddr;
//源地址
//8 位服务类型 TOS
USHORT total_len;
//16 位总长度(字节)
USHORT ident;
//16 位标识
USHORT frag_and_flags; //3 位标志位
UCHAR ttl;
//8 位生存时间 TTL
UCHAR proto;
//8 位协议 (TCP, UDP 或其他)
3)数据字段为“This is my homework of network ,I am happy!”。
4)成功发送后在屏幕上输出“send OK”。
时间安排:
第一、二天:查阅资料,学习算法 第三、四天:编程调试 第五天:书写报告
指导教师签名:
年月日
系主任(或责任教师)签名:
年 月日
武汉理工大学《计算机网络》课程设计说明书
学 号:
武汉理工大学《计算机网络》课程设计说明书
课程设计
题目 学院 专业 班级 姓名 指导教师
IP 地址的合法性及子网判断 计算机科学与技术 软件工程 中国好学长系列 小灰灰的爸爸 刘东飞
2014 年 6 月 25 日
武汉理工大学《计算机网络》课程设计说明书
课程设计任务书
学生姓名: 小灰灰的爸爸
专业班级: 中国好学长系列
cksum += (cksum >>16);
return (USHORT)(~cksum);
武汉理工大学《计算机网络》课程设计说明书
开始
构造原始套接字 并初始化
填 充 IP首 部 计 算 IP首 部 校 验 和
构 造 TCP伪 首 部 填 充 TCP首 部
计 算 TCP首 部 校 验 和
填充发送缓冲区
武汉理工大学《计算机网络》课程设计说明书
#pragma comment(lib,"ws2_32.lib")
#define IPVER 4
//IP 协议预定
#define MAX_BUFF_LEN 65500 //发送缓冲区最大值
typedef struct ip_hdr //定义 IP 首部
{
UCHAR h_verlen;
3 相关知识
了解 TCP 是一种面向连接的,可靠的传输层协议。TCP 协议是在网络层 IP 层协议的基 础上,向应用层用户提供可靠的、全双工的数据流传输。当应用进程有报文需要通过 TCP 发送时,它就将此应用层报文传送给执行 TCP 协议的传输实体。TCP 传输实体将用户数据 加上 IP 头部,形成 IP 包。
TCP 报头 TCP 数据
IP 报头
IP 数据
武汉理工大学《计算机网络》课程设计说明书
图 3—1 TCP 数据包加上 IP 报头形成 IP 包
TCP 头部:源端口号 目的端口号 序号 确认号 报头长度 保留 URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 选项及填充
校验和:该长度为 16 位,校验和的校验范围包括伪头部、TCP 报头以及应用层来的数据
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
USHORT th_sum; //16 位校验和
USHORT th_urp; //16 位紧急数据偏移量
}TCP_HEADER;
3.计算校验和的子函数
在填充数据包的过程中,需要调用计算校验和的函数 checksum 两次,分别用于校验 IP
头和 TCP 头部(加上伪头部),其实现代码如下:
USHORT checksum(USHORT *buffer, int size)
4 课程设计分析
本课程设计的目标是发送一个 TCP 数据包,可以利用原始套接字来完成这个工作。整 个程序由初始化原始套接字和发送 TCP 数据包两个部分组成。
1.创建一个原始套接字,并设置 IP 头选项
SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPE D);
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”。
//4 位首部长度,4 位 IP 版本号
UCHAR tos;
//8 位服务类型 TOS
USHORT total_len;
//16 位总长度(字节)
USHORT ident;
//16 位标识
USHORT frag_and_flags; //3 位标志位
目录
1 课程设计目的...................................................................................................................................................... 4 2 课程设计要求...................................................................................................................................................... 4 3 相关知识.............................................................................................................................................................. 4 4 课程设计分析..................................................................................................................................................... 5 5 程序清单及注释.................................................................................................................................................. 8 6 运行结果及分析................................................................................................................................................ 16 7 参考文献............................................................................................................................................................ 17
武汉理工大学《计算机网络》课程设计说明书
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。