📄 ping.h
字号:
// Ping.h: interface for the CPing class.
// Ping 类:实现对目标主机的Ping 探测
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PING_H__BB63CFC8_AFE2_4C8D_A67A_EB674FEE12DF__INCLUDED_)
#define AFX_PING_H__BB63CFC8_AFE2_4C8D_A67A_EB674FEE12DF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define IP_RECORD_ROUTE 0x7
#define DEF_PACKET_SIZE 32
#define MAX_PACKET 1024 //ICMP报的最大长度 Max ICMP packet size
#define MAX_IP_HDR_SIZE 60
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#define ICMP_MIN 8 // ICMP报的最小长度Minimum 8-byte ICMP packet (header)
typedef struct _pingiphdr
{
unsigned int h_len:4; // IP首部长度
unsigned int version:4; // IP的版本
unsigned char tos; // 服务类型
unsigned short total_len; // 总的数据包长度
unsigned short ident; // 特殊标识符
unsigned short frag_and_flags; // 标志
unsigned char ttl; // 存在时间
unsigned char proto; // 协议(TCP,UDP等)
unsigned short checksum; // IP校验和
unsigned int sourceIP; //源地址
unsigned int destIP; //目标地址
} IpHeader;
typedef struct _icmphdr
{
BYTE i_type; //ICMP报文头
BYTE i_code; //ICMP代码
USHORT i_cksum; //检验和
USHORT i_id; //标识符
USHORT i_seq; //序列号
ULONG timestamp; //时间戳
} IcmpHeader;
typedef struct _pingipoptionhdr
{
unsigned char code; // 选项类型
unsigned char len; //选项头的长度
unsigned char ptr; //地址偏移量
unsigned long addr[9]; // IP地址列表
} IpOptionHeader;
class CPing
{
public:
CPing();
virtual ~CPing();
//初始化ICMP
void FillICMPData(char *icmp_data, int datasize);
//生成校验和
USHORT checksum(USHORT *buffer, int size);
//解析IP头
bool DecodeICMPHeader(char *buf, int bytes, SOCKADDR_IN* from);
//释放Winsock链接库
void Cleanup();
//实现Ping操作
bool Ping(char *dest,int timeout =1000);
//Socket句柄
SOCKET m_hSocket;
//IP选项头
IpOptionHeader m_ipopt;
//目标地址
SOCKADDR_IN m_addrDest;
//源地址
SOCKADDR_IN m_addrFrom;
//ICMP报文
char *icmp_data;
//接受缓冲区
char *recvbuf;
//发送序列号
USHORT seq_no ;
//目标名称指针
char *lpdest;
//数据大小
int datasize;
//记录路由标志
};
#endif // !defined(AFX_PING_H__BB63CFC8_AFE2_4C8D_A67A_EB674FEE12DF__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -