分析数据包PPP,GRE winpcap PPP GRE 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ip 包过长被拆开, 这很正常分析的话从最上层 ETH_HEADER PPPOE_HEADER 根据类型 ethtype 判断 PPPOE_HEADER然后根据 Protocol 判断包数据类型, 简单的不加密的话, 可以比较容易分析出承载的数据这个是一个工具, 网络嗅探 基于WinPcap写的, 可以看到PPP的一些信息, 可以得到简单承载的IP数据http://download.csdn.net/detail/zzz3265/7646935一下是该工具计算承载IP数据偏移的函数BOOL CNetFilter::CheckEarthPckInfo(PACK_INFO *pInfo){ ETH_HEADER *pEthHeader; WORD ethtype; CHAR *pEthType; WORD wPPP_Protocol; pEthHeader = pInfo->pEthHeader; if(pEthHeader == NULL) return FALSE; ethtype = htons(pEthHeader->ethtype); GetEthType(ethtype, &pEthType); pInfo->pEthType = pEthType; pInfo->pProtocol = pInfo->pEthType; if(ethtype == 0x0800) { pInfo->pIpHead = (IP_HEADER *)(pInfo->pPckDat + sizeof(ETH_HEADER)); pInfo->nIpSize = pInfo->nPckSize - sizeof(ETH_HEADER); } else if(ethtype == 0x8863 || ethtype == 0x8864) { pInfo->pPppHead = (PPPOE_HEADER *)(pInfo->pPckDat + sizeof(ETH_HEADER)); pInfo->nPppSize = pInfo->nPckSize - sizeof(ETH_HEADER); } if(pInfo->pPppHead) { wPPP_Protocol = htons(pInfo->pPppHead->wProtocol); GetPppType(wPPP_Protocol, &pInfo->pProtocol); if(wPPP_Protocol == 0x0021) // IP { pInfo->pIpHead = (IP_HEADER *)((BYTE*)pInfo->pPppHead + sizeof(PPPOE_HEADER)); pInfo->nIpSize = htons(pInfo->pPppHead->wDatLen)-sizeof(wPPP_Protocol); } } if(pInfo->pIpHead == NULL) { NData::DataToHex(pEthHeader->source_hwaddr, 6, pInfo->szSorAddr, sizeof(pInfo->szSorAddr)); NData::DataToHex(pEthHeader->dest_hwaddr, 6, pInfo->szDestAddr, sizeof(pInfo->szDestAddr)); } return TRUE;} ppp分帧,我觉得wireshark自己能组合起来的。除非是特别的协议。 SendMessage不是把消息放到队列里面,那是发到哪里去了? evc 画图窗口不能正常显示 关于窗口重叠的问题(为了实现具有阴影效果的对话框) GDI泄露 如何将数据写入excel 如何改变组合框的背景颜色,例如灰色 ListBox怎样才能自动换行的? VC6.0下如何向打印机输出数据? 请问:如果我在服务器端接收信息的时候如果出错,如何将没有接收到的其他信息清除掉? 关于Ring0 opencv MFC怎样实现在对话框创建时打开摄像头,关闭对话框关闭摄像头 紧急求助-CRichEditView打印问题
分析的话从最上层 ETH_HEADER PPPOE_HEADER 根据类型 ethtype 判断 PPPOE_HEADER
然后根据 Protocol 判断包数据类型, 简单的不加密的话, 可以比较容易分析出承载的数据这个是一个工具, 网络嗅探 基于WinPcap写的, 可以看到PPP的一些信息, 可以得到简单承载的IP数据
http://download.csdn.net/detail/zzz3265/7646935
一下是该工具计算承载IP数据偏移的函数
BOOL CNetFilter::CheckEarthPckInfo(PACK_INFO *pInfo)
{
ETH_HEADER *pEthHeader;
WORD ethtype;
CHAR *pEthType;
WORD wPPP_Protocol; pEthHeader = pInfo->pEthHeader;
if(pEthHeader == NULL)
return FALSE; ethtype = htons(pEthHeader->ethtype);
GetEthType(ethtype, &pEthType);
pInfo->pEthType = pEthType;
pInfo->pProtocol = pInfo->pEthType;
if(ethtype == 0x0800)
{
pInfo->pIpHead = (IP_HEADER *)(pInfo->pPckDat + sizeof(ETH_HEADER));
pInfo->nIpSize = pInfo->nPckSize - sizeof(ETH_HEADER);
}
else if(ethtype == 0x8863 || ethtype == 0x8864)
{
pInfo->pPppHead = (PPPOE_HEADER *)(pInfo->pPckDat + sizeof(ETH_HEADER));
pInfo->nPppSize = pInfo->nPckSize - sizeof(ETH_HEADER);
} if(pInfo->pPppHead)
{
wPPP_Protocol = htons(pInfo->pPppHead->wProtocol);
GetPppType(wPPP_Protocol, &pInfo->pProtocol);
if(wPPP_Protocol == 0x0021) // IP
{
pInfo->pIpHead = (IP_HEADER *)((BYTE*)pInfo->pPppHead + sizeof(PPPOE_HEADER));
pInfo->nIpSize = htons(pInfo->pPppHead->wDatLen)-sizeof(wPPP_Protocol);
}
} if(pInfo->pIpHead == NULL)
{
NData::DataToHex(pEthHeader->source_hwaddr, 6, pInfo->szSorAddr, sizeof(pInfo->szSorAddr));
NData::DataToHex(pEthHeader->dest_hwaddr, 6, pInfo->szDestAddr, sizeof(pInfo->szDestAddr));
}
return TRUE;
}