RAW_socket原始套接字截获数据包后的处理问题!在线等!哪位大哥救救我!

rageliu 2005-08-10 08:27:40



CSDN企业职位库最新职位

更多职位...
主  题: Raw_sock原始套接字的问题!做过的朋友帮个忙!自己摸索很慢的!
作  者: rageliu (我自横刀向天笑)
等  级:
信 誉 值: 100
所属社区: VC/MFC 网络编程
问题点数: 50
回复次数: 0
发表时间: 2005-08-09 19:18:00



前面用的是原始套接字sock
while (true)
{
char RecvBuf[MAX_PATH];
int ret = recv(sock, RecvBuf,sizeof(RecvBuf), 0); //始套接字sock
if (ret > 0)
{
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...................~~~~~~~~//就是这里
}
}
请问在if (ret > 0)的条件里怎么处理RecvBuf,使我可以从RecvBuf里面去掉协议头部,得到真正传输的数据(比如我见过别人做的提取出来的数据16进制显示 00 04 F1 11 55 6E等这样的形式)
请大家讲详细点 !谢谢

...全文
99 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rageliu 2005-08-10
我做了如下操作:
IP ip = *(IP*)RecvBuf;~~~~~~~这里是取得包中的ip头部是吗?
TCP tcp = *(TCP*)(RecvBuf + ip.HdrLen);~~~~~~~~~`如果是tcp协议!这就是取得tcp头部是吗?
那要取得数据怎么做呢?是象我下面这样吗?(自己的一点想法)
BYTE *pdata = NULL;
pdata = (BYTE*)(RecvBuf + ip.HdrLen + a)~~~~这里a是我加的~~我觉得就应该是TCP头部的长度是吗?
再有ntohs(ip.TotalLen)得到的是数据包的整体长度是吗?那怎么取得有效数据的长度呢?
回复
windcsn 2005-08-10
你收到的数据里面,包含IP头,然后根据IP头里面的协议,可以得到IP上面的是什么协议,从而按照这个协议头来将包解开,如果是TCP的话,去掉其头部数据以后就是真正你需要的数据了
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-08-10 08:27
社区公告
暂无公告