📄 tracer.h
字号:
// Tracer.h: interface for the CTracer class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TRACER_H__008EDC72_F861_4FCF_950B_AFBA3783CBC9__INCLUDED_)
#define AFX_TRACER_H__008EDC72_F861_4FCF_950B_AFBA3783CBC9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "winsock2.h"
#include "ws2tcpip.h"
#define DEF_PACKET_SIZE 32
#define MAX_PACKET 1024
#define MAX_NOTES 30
#define ICMP_MIN 8
#define ICMP_ECHOREPLY 0
#define ICMP_DESTUNREACH 3
#define ICMP_SRCQUENCH 4
#define ICMP_REDIRECT 5
#define ICMP_ECHO 8
#define ICMP_TIMEOUT 11
#define ICMP_PARMERR 12
//IP首部数据结构
struct IPHEADER
{
unsigned int version:4; // 版本
unsigned char tos; // 服务类型
unsigned short total_len; // 报文总长度
unsigned short ident; // 标识
unsigned short frag_and_flags; // 偏移量
unsigned char ttl; // 寿命
unsigned char proto; // 协议
unsigned short checksum; // 首部校验和
unsigned int sourceIP; // 源站IP
unsigned int destIP; // 目的站IP
};
//ICMP首部数据结构
struct ICMPHEADER
{
BYTE i_type; // 类型
BYTE i_code; // 代码
USHORT i_cksum; // 首部校验和
USHORT i_id; // 标识
USHORT i_seq; // 序列号
ULONG timestamp; // 时间戳(选用)
};
class CTracer
{
private:
CDialog* m_pWnd;
BOOL DecodeICMP(char* pBuffer,int bytes,int ttl);
BOOL RecvData(char* icmpRcvBuf,int* presult);
BOOL SendData(char* icmpData,int size);
BOOL SetTTL(SOCKET hSocket,int ttl);
void FillICMPData(char* icmpData,int size);
USHORT CheckSum(char* pBuffer,int size);
BOOL FillAddress(char* addrDest);
SOCKET m_hSocket; //SOCKET 句柄
SOCKADDR_IN m_addrDest; //目的站地址
SOCKADDR_IN m_addrFrom; //源站地址
char* icmpData;
char* icmpRcvBuf;
int m_nSeq;
public:
void SetWnd(CDialog* pWnd);
void Trace(char* destAddress);
CTracer();
virtual ~CTracer();
};
#endif // !defined(AFX_TRACER_H__008EDC72_F861_4FCF_950B_AFBA3783CBC9__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -