⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetheader.h

📁 用rawsocket实现简单的ping程序
💻 H
字号:
#ifndef PACKETHEADER_H
#define PACKETHEADER_H

#pragma pack(1)

// 定义IP数据报的基本报头,共计20个字节
struct IPHeader
{
	unsigned char versionAndHeaderLength;  // 4位版本号 + 4位头部长度(单位:4Bytes)
	unsigned char typeOfService;  // 8位服务类型
	unsigned short totalLength;  // 16位总长度(单位:Byte)
	unsigned short id;  // 16位标识
	unsigned short flagsAndFragmentOffset;  // 3位标志 + 13位片偏移
	unsigned char timeToLive;  // 8位生存时间
	unsigned char protocol;  // 8位协议
	unsigned short headerChecksum;  // 16位头部校验和
	unsigned long srcIP;  // 32位源IP地址
	unsigned long destIP;  // 32位目的IP地址
};

// 定义ping报文的报头,共计8个字节
struct ICMPHeader
{
	unsigned char type;  // 8位类型,对于ping request该值为8,对于ping response该值为0
	unsigned char code;  // 8位代码,对于ping报文,该值为0
	unsigned short checksum;  // 16位校验和
	unsigned short id;  // 16位标识符
	unsigned short sequenceNumber;  // 16位序列号
};

// 该结构体用来保存Ping的统计信息
struct StatisticsRecord
{
	long totalRequests;  // 发出的Ping请求报文的总数
	long totalResponses;  // 收到的Ping响应报文的总数
	long totalTime;  // 总的往返时间
	long maxTime;  // 最长的往返时间
	long minTime;  // 最短的往返时间
};

// 该结构体用来检测接收到的Ping响应报文,除roundTripTime以主机序存储之外,其他字段均以网络序存储
struct PingRecord
{
	unsigned long ipToPing;
	unsigned short id;
	unsigned short sequenceNumber;
	long roundTripTime;
	unsigned char ttl;
};

#pragma pack()

#endif  // PACKETHEADER_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -