资源简介
计算机网络的解析ip数据包课程设计,亲测运行成功。问题一般出在头文件的引用上

代码片段和文件信息
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#pragma comment(lib“Ws2_32.lib“)
using namespace std;
//IP首部
typedef struct tIPPackHead
{
BYTE ver_hlen; //IP协议版本和IP首部长度。高4位为版本,低4位为首部的长度(单位为4bytes)
BYTE byTOS; //服务类型
WORD wPacketLen; //IP包总长度。包括首部,单位为byte。[Big endian]
WORD wSequence; //标识,一般每个IP包的序号递增。[Big endian]
union
{
WORD Flags; //标志
WORD FragOf;//分段偏移
};
BYTE byTTL; //生存时间
BYTE byProtocolType; //协议类型,见PROTOCOL_TYPE定义
WORD wHeadCheckSum; //IP首部校验和[Big endian]
DWORD dwIPSrc; //源地址
DWORD dwIPDes; //目的地址
BYTE Options; //选项
} IP_HEAD;
int cnt;
int DecodeIP(char *buf int len)
{
int n = len;
if (n >= sizeof(IP_HEAD))
{
IP_HEAD iphead;
iphead = *(IP_HEAD*)buf;
cout << “第 “<
cout << “协议版本:“ <<(iphead.ver_hlen >> 4) << endl;
cout << “首部长度:“ << ((iphead.ver_hlen & 0x0F) << 2) << endl;//单位为4字节
cout << “服务类型:Priority: “ << (iphead.byTOS >> 5) << “Service: “ << ((iphead.byTOS >> 1) & 0x0f) << endl;
cout << “IP包总长度:“ << ntohs(iphead.wPacketLen) << endl; //网络字节序转为主机字节序
cout << “标识:“ << ntohs(iphead.wSequence) << endl;
cout << “标志位:“ << “DF=“ << ((iphead.Flags >> 14) & 0x01) << “MF=“ << ((iphead.Flags >> 13) & 0x01) << endl;
cout << “片偏移:“ << (iphead.FragOf & 0x1fff) << endl;
cout << “生存周期:“ << (int)iphead.byTTL << endl;
cout << “协议类型:“ << int(iphead.byProtocolType) << endl;
cout << “首部校验和:“ << ntohs(iphead.wHeadCheckSum) << endl;
cout << “源地址:“ << inet_ntoa(*(in_addr*)&iphead.dwIPSrc) << endl;
cout << “目的地址:“ << inet_ntoa(*(in_addr*)&iphead.dwIPDes) << endl;
cout << “==============================================================“ << endl << endl;
}
return 0;
}
void AutoWSACleanup()
{
::WSACleanup();
}
int main()
{
int n;
WSADATA wd;
n = WSAStartup(MAKEWORD(2 2) &wd);
if (n)
{
cout << “WSAStartup函数错误!“ << endl;
return -1;
}
atexit(AutoWSACleanup);
//创建SOCKET
SOCKET sock = socket(AF_INET SOCK_RAW IPPROTO_IP);
if (sock == INVALID_SOCKET)
{
cout << WSAGetLastError();
return 0;
}
//获取本机地址
char name[128];
if (-1 == gethostname(name sizeof(name)))
{
closesocket(sock);
cout << WSAGetLastError();
return 0;
}
struct hostent * pHostent;
pHostent = gethostbyname(name);
//绑定本地地址到SOCKET句柄
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr = *(in_addr*)pHostent->h_addr_list[0]; //IP
addr.sin_port = 8888; //端口,IP层端口可随意填
if (SOCKET_ERROR == bind(sock (sockaddr *)&addr sizeof(addr)))
{
closesocket(sock);
cout << WSAGetLastError();
return 0;
}
//设置该SOCKET为接收所有流经绑定的IP的网卡的所有数据,包括接收和发送的数据包
u_long sioarg = 1;
DWORD wt = 0;
if (SOCKET_ERROR == WSAIoctl(sock SIO_RCVALL &sioarg sizeof(sioarg) NULL 0 &wt NULL NULL))
{
closesocket(so
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 57 2018-07-02 09:51 readme.txt
文件 3776 2018-07-02 09:46 ipjx.cpp
文件 1027 2018-07-02 09:14 mstcpip.h
----------- --------- ---------- ----- ----
4860 3
- 上一篇:葡萄酒支持向量机SVM分类
- 下一篇:Axure从入门到精通小楼
相关资源
- 04741计算机网络原理知识点整理.docx(
- 校园网络规划与设计课程设计
- SOCKET 网络编程 计算机网络 作业 客户
- 计算机网络课程设计—ARQ协议模拟实
- 计算机网络第五版 严伟
- 计算机网络(第6版)谢希仁教学课件
- 计算机网络自顶向下方法答案(第六
- 计算机网络管理员国家职业标准
- 计算机网络精讲视频教程
- 计算机网络 第7版 谢希仁 高清完美书
- 计算机网络(第5版)(Computer Networ
- 计算机网络课程设计 小型企业的
- 北航研究生计网实验报告.rar
- 计算机网络校园网课程设计
- 计算机网络24分游戏课设完整版
- 计算机网络(谢仁希第五版)课后答
- 计算机网络课程设计—设计一个校园
- 计算机网络第六版 教学视屏 网盘
- 计算机网络第7版谢希仁复习题完整版
- 计算机网络讲义-陈鸣
- 东北大学计算机网络期末试题+答案
- 计算机网络打作业实现QQ.zip
- 哈尔滨工业大学深圳 高级计算机网络
- 计算机网络(第七版).谢希仁
- 计算机网络socket编程实验
- 计算机网络谢仁希PPT教案
- 网络普及背景下的计算机网络安全问
- 2.5 SDNv2.pdf-中科大高级计算机网络课件
- 计算机网络课程设计: 基于P2P的局域
- 哈工大计网mooc答案,包含测验和期末
评论
共有 条评论