📄 packettreedata.cpp
字号:
case ICMP:
m_DataTree.InsertItem(_T("协议:ICMP"),hIpItem,TVI_LAST);
break;
case TCP:
m_DataTree.InsertItem(_T("协议:TCP"),hIpItem,TVI_LAST);
break;
case EGP:
m_DataTree.InsertItem(_T("协议:EGP"),hIpItem,TVI_LAST);
break;
case IGP:
m_DataTree.InsertItem(_T("协议:IGP"),hIpItem,TVI_LAST);
break;
case UDP:
m_DataTree.InsertItem(_T("协议:UDP"),hIpItem,TVI_LAST);
break;
default:
{
sprintf(buffer,"协议:%d (不支持)",ip->protocol);
m_DataTree.InsertItem(_T("协议:UDP"),hIpItem,TVI_LAST);
}
break;
}
//报头校验码
memset(buffer,0,256);
sprintf(buffer,"报头校验码:0x%02x%02x",ip->crc_val[0],ip->crc_val[0]);
m_DataTree.InsertItem(_T(buffer),hIpItem,TVI_LAST);
//发送端地址
memset(buffer,0,256);
sprintf(buffer,"源地址:%d.%d.%d.%d",ip->src_addr[0],ip->src_addr[1],ip->src_addr[2],ip->src_addr[3]);
m_DataTree.InsertItem(_T(buffer),hIpItem,TVI_LAST);
//接收端地址
memset(buffer,0,256);
sprintf(buffer,"目标地址:%d.%d.%d.%d",ip->des_addr[0],ip->des_addr[1],ip->des_addr[2],ip->des_addr[3]);
m_DataTree.InsertItem(_T(buffer),hIpItem,TVI_LAST);
switch(ip->protocol)
{
case ICMP:
{
int len=PROTOCOL_DEFINE::get_IP_HEADER_length(ip);
PROTOCOL_DEFINE::ICMP_HEADER * icmp=(PROTOCOL_DEFINE::ICMP_HEADER *)((DWORD)ip+len);
//InsertICMPTree(icmp,hIpItem);
}
break;
case TCP:
{
int len=PROTOCOL_DEFINE::get_IP_HEADER_length(ip);
PROTOCOL_DEFINE::TCP_HEADER * tcp=(PROTOCOL_DEFINE::TCP_HEADER *)((DWORD)ip+len);
//InsertTCPTree(tcp,hIpItem);
}
break;
case EGP:
break;
case IGP:
break;
case UDP:
{
int len=PROTOCOL_DEFINE::get_IP_HEADER_length(ip);
PROTOCOL_DEFINE::UDP_HEADER * udp=(PROTOCOL_DEFINE::UDP_HEADER *)((DWORD)ip+len);
//InsertUDPTree(udp,hIpItem);
}
break;
default:
break;
}
}
/*void CPacketTreeData::InsertICMPTree(PROTOCOL_DEFINE::ICMP_HEADER * icmp,HTREEITEM hItem)
{
char buffer[256];
HTREEITEM hICMPItem=m_DataTree.InsertItem(_T("ICMP"),hItem,TVI_LAST);
//类型字段
memset(buffer,0,256);
sprintf(buffer,"类型:%d",icmp->type);
HTREEITEM hTypeItem=m_DataTree.InsertItem(_T(buffer),hICMPItem,TVI_LAST);
switch(icmp->type)
{
case 0:
m_DataTree.InsertItem(_T("对会应请求的响应"),hTypeItem,TVI_LAST);
break;
case 3:
m_DataTree.InsertItem(_T("IP数据报到达不了接收端"),hTypeItem,TVI_LAST);
break;
case 4:
m_DataTree.InsertItem(_T("抑制从发送端传来的数据"),hTypeItem,TVI_LAST);
break;
case 5:
m_DataTree.InsertItem(_T("请求变更路径"),hTypeItem,TVI_LAST);
break;
case 8:
m_DataTree.InsertItem(_T("响应请求"),hTypeItem,TVI_LAST);
break;
case 11:
m_DataTree.InsertItem(_T("通知发送端TTL已为0"),hTypeItem,TVI_LAST);
break;
case 12:
m_DataTree.InsertItem(_T("通知数据报形式等出错"),hTypeItem,TVI_LAST);
break;
case 13:
m_DataTree.InsertItem(_T("要求对方送出时间信息"),hTypeItem,TVI_LAST);
break;
case 14:
m_DataTree.InsertItem(_T("对要求时间戳的回应"),hTypeItem,TVI_LAST);
break;
case 15:
m_DataTree.InsertItem(_T("由路邮器查询地址等信息"),hTypeItem,TVI_LAST);
break;
case 16:
m_DataTree.InsertItem(_T("对查询信息的会应"),hTypeItem,TVI_LAST);
break;
case 17:
m_DataTree.InsertItem(_T("地址掩码请求消息"),hTypeItem,TVI_LAST);
break;
case 18:
m_DataTree.InsertItem(_T("地址掩码会应消息"),hTypeItem,TVI_LAST);
break;
default:
m_DataTree.InsertItem(_T("未知类型值"),hTypeItem,TVI_LAST);
break;
}
//代码
memset(buffer,0,256);
sprintf(buffer,"代码:%d",icmp->code);
m_DataTree.InsertItem(_T(buffer),hICMPItem,TVI_LAST);
//校验码
memset(buffer,0,256);
sprintf(buffer,"校验码:0x%02x%02x",icmp->check_sum[0],icmp->check_sum[1]);
m_DataTree.InsertItem(_T(buffer),hICMPItem,TVI_LAST);
}
void CPacketTreeData::InsertTCPTree(PROTOCOL_DEFINE::TCP_HEADER * tcp,HTREEITEM hItem)
{
char buffer[256];
HTREEITEM hTCPItem=m_DataTree.InsertItem(_T("TCP"),hItem,TVI_LAST);
//发送端端口
memset(buffer,0,256);
sprintf(buffer,"发送端端口:%d",tcp->src_port[0]*0x100+tcp->src_port[1]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//接收端端口
memset(buffer,0,256);
sprintf(buffer,"接收端端口:%d",tcp->des_port[0]*0x100+tcp->des_port[1]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//顺序号
memset(buffer,0,256);
sprintf(buffer,"顺序号:0x%02x%02x%02x%02x",tcp->sequence_no[0],
tcp->sequence_no[1],tcp->sequence_no[2],tcp->sequence_no[3]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//确认号
memset(buffer,0,256);
sprintf(buffer,"确认号:0x%02x%02x%02x%02x",tcp->ack_no[0],
tcp->ack_no[1],tcp->ack_no[2],tcp->ack_no[3]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//报头长
memset(buffer,0,256);
sprintf(buffer,"报头长:%d字节",(tcp->offset_reser_con[0]>>4)*32/4);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//控制位
memset(buffer,0,256);
int control=tcp->offset_reser_con[1]&63;
sprintf(buffer,"控制位:%d",control);
HTREEITEM hCItem=m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
if(control&32)
m_DataTree.InsertItem(_T("URG(紧急数据指针有效)"),hCItem,TVI_LAST);
if(control&16)
m_DataTree.InsertItem(_T("ACK(确认有效)"),hCItem,TVI_LAST);
if(control&8)
m_DataTree.InsertItem(_T("PSH(传输强制功能)"),hCItem,TVI_LAST);
if(control&4)
m_DataTree.InsertItem(_T("RTS(请求连接重新设置)"),hCItem,TVI_LAST);
if(control&2)
m_DataTree.InsertItem(_T("SYN(请求顺序号同步处理)"),hCItem,TVI_LAST);
if(control&1)
m_DataTree.InsertItem(_T("FIN(发送结束)"),hCItem,TVI_LAST);
//窗口
memset(buffer,0,256);
sprintf(buffer,"窗口:%d位",tcp->window[0]*0x100+tcp->window[1]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//校验码
memset(buffer,0,256);
sprintf(buffer,"校验码:0x%02x%02x",tcp->checksum[0],tcp->checksum[1]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
//紧急数据指针
memset(buffer,0,256);
sprintf(buffer,"紧急数据指针:0x%02x%02x",tcp->urgen_pointer[0],tcp->urgen_pointer[1]);
m_DataTree.InsertItem(_T(buffer),hTCPItem,TVI_LAST);
}
void CPacketTreeData::InsertUDPTree(PROTOCOL_DEFINE::UDP_HEADER * udp,HTREEITEM hItem)
{
char buffer[256];
HTREEITEM hUDFItem=m_DataTree.InsertItem(_T("UDP"),hItem,TVI_LAST);
//发送端端口
memset(buffer,0,256);
sprintf(buffer,"发送端端口:%d",udp->src_port[0]*0x100+udp->src_port[1]);
m_DataTree.InsertItem(_T(buffer),hUDFItem,TVI_LAST);
//接收端端口
memset(buffer,0,256);
sprintf(buffer,"接收端端口:%d",udp->des_port[0]*0x100+udp->des_port[1]);
m_DataTree.InsertItem(_T(buffer),hUDFItem,TVI_LAST);
//用户数据报长度
memset(buffer,0,256);
sprintf(buffer,"数据报长度:%d",udp->length[0]*0x100+udp->length[1]);
m_DataTree.InsertItem(_T(buffer),hUDFItem,TVI_LAST);
//校验码
memset(buffer,0,256);
sprintf(buffer,"校验码:0x%02x%02x",udp->check_sum[0],udp->check_sum[1]);
m_DataTree.InsertItem(_T(buffer),hUDFItem,TVI_LAST);
}*/
BOOL CPacketTreeData::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: 在此添加额外的初始化
m_DataDisplay.SetBPR(8);
m_DataDisplay.SetAddressBase(0);
m_DataDisplay.SetOptions(TRUE, TRUE, TRUE, FALSE);
m_DataDisplay.SetAllowDeletes(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -