1 / 17
文档名称:

数据通信与网络课程设计实践报告解析IP数据包范本.doc

格式:doc   大小:263KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据通信与网络课程设计实践报告解析IP数据包范本.doc

上传人:知识徜徉土豆 2025/6/15 文件大小:263 KB

下载得到文件列表

数据通信与网络课程设计实践报告解析IP数据包范本.doc

相关文档

文档介绍

文档介绍:该【数据通信与网络课程设计实践报告解析IP数据包范本 】是由【知识徜徉土豆】上传分享,文档一共【17】页,该文档可以免费在线阅读,需要了解更多关于【数据通信与网络课程设计实践报告解析IP数据包范本 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。1
2020年4月19日
数据通信与网络课程设计实践报告解析IP数据包
文档仅供参考
HUBEI NORMAL UNIVERSITY
专业课程论文
Course’s Thesis
课程名称
数据通信与网络
作业题目
数据通信与网络课程设计报告
学生姓名
贺兵
学 号
7
指导教师
彭旭富
所在院系
计算机科学与技术学院
专业名称
通信工程
完成时间
-01-10
2
2020年4月19日
文档仅供参考
数据通信与网络课程设计报告
摘要:互联网络层是TCP/,,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道。本程序使用套接字socket编程,将网受流经网卡的所有类型的数据包。首先,初始化套接字,然后监听数据包,解析数据包。
关键字:TCP/IP协议,数据包,套接字,解析
一 设计内容及任务
利用C/C++/VC/VB/JAVA语言,根据所学知识,设计程序,功能为捕获网络中的IP数据包,接续数据包的内容,将结果显示在标准输出上,并同时写入日志文件。
具体:
以命令行形式运行,ipparse logfile,其中ipparse是程序命,而logfile则代表记录记过的日志文件。
在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。
4
2020年4月19日
文档仅供参考
当程序接收到键盘输入Ctrl+C时推出。
二 设计思想
IP数据报的格式说明IP协议都具有什么功能。其首部,版本当前广泛使用的版本号为4;首部长度站4bit;服务类型占8bit,其中服务类型TOS子域占4位,优先级子域占3位,另一位为保留位;总长度字段为2B,IP数据包的最大长度是65535B;标识占16bit,它是一个计数器,用来产生数据报的标识;标志占3bit,其中最低为为MF,MF=1时为后面“还有分片”,MF=0表示这是数据报片中的最后一个,DF=0时,表示允许分片;片偏移以8个字节为偏移单位;生存时间字段记为TTL,单位为秒;协议段占8bit,用于指出次数据是使用何种协议,典型的协议号有6:TCP,17:UDP,1:ICMP。
本程序使用套接字socket编程,将网受流经网卡的所有类型的数据包。首先,初始化套接字,然后监听数据包,解析数据包。卡设为能够接
SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创立套接字,其参数为通信发生的区字段和套接字的类型。
WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen)函数用来把网卡设置为混杂模式。
4
2020年4月19日
文档仅供参考
recv(sock,buffer,65535,0)函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓冲区的大小。
typedef struct IP_HEAD
{
}}ip_head;用来定义IP头部数据。
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *)函数用来获取本机IP地址
htons()函数将无符号短整型转换为网络字节顺序的数据
本程序在windows环境下利用C++语言编写。
三 程序流程
5
2020年4月19日
文档仅供参考
四 具体程序代码
#include<iostream>
#include<>
#include<>
#include<fstream>
#include <>
#pragma comment(lib,"ws2_32") //指定连接到网络应用和internet
#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)
typedef struct IP_HEAD
6
2020年4月19日
文档仅供参考
{
union //定义联合
{
unsigned char Version;
unsigned char HeadLen;
};
unsigned char ServiceType;
unsigned short TotalLen;
unsigned short Identifier;
union
{
unsigned short Flags;
unsigned short FragOffset;
};
unsigned char TimeToLive;
unsigned char Protocol;
unsigned short HeadChecksum;
unsigned int SourceAddr;
7
2020年4月19日
文档仅供参考
unsigned int DestinAddr;
unsigned char Options;
}ip_head; //定义IP头部的数据结构
void main(int argc,char *argv[])
{
using namespace std;
ofstream outfile("C:\\",ios::out);
if(argc!=2)
{
cout<<endl<<"请以下面格式输入命令行:PackParse packet_sum"<<endl;
return;
}
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0)
{
cout<<endl<<"WSASTartup初始化失败"<<endl;
return;
8
2020年4月19日
文档仅供参考
}
SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); //三个参分别为通信发生的区字段,套接字的类型,与IP协议
if(sock==INVALID_SOCKET)
{
cout<<endl<<"创立Socket失败!"<<endl;
closesocket(sock);
WSACleanup();
}
BOOL flag=TRUE;
if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag))==SOCKET_ERROR)
{
cout<<endl<<"setsockopt操作失败:"<<WSAGetLastError()<<endl;
closesocket(sock);
WSACleanup();
}
9
2020年4月19日
文档仅供参考
char hostName[128];//获取主机名
if(gethostname(hostName,100)==SOCKET_ERROR)
{
cout<<endl<<"gethostname操作失败:"<<WSAGetLastError()<<endl;
closesocket(sock);
WSACleanup();
}
hostent *pHostIP; //获取本地IP
if((pHostIP=gethostbyname(hostName))==NULL)
{
cout<<endl<<"gethostbyname操作失败:"<<WSAGetLastError()<<endl;
closesocket(sock);
WSACleanup();
}
sockaddr_in host_addr;//
=AF_INET;
10
2020年4月19日