找回密码
 注册
查看: 2468|回复: 6

recvfrom函数获取的数据包的格式问题?似乎不一致!

[复制链接]
发表于 2006-10-3 10:06:47 | 显示全部楼层 |阅读模式
使用 recvfrom(sock,buffer,sizeof(buffer),0,(struct sockaddr *) &from,&fromlen)
获取的数据包,格式上是否是 以太网数据帧头部+IP(或ARP)数据包头部+TCP(UDP,ICMP)的头部+传输数据?

看到一篇文章里面是如上这么说的,但是我在一个程序里面直接对buffer进行如下操作
ip=(struct IP *)buffer;
也能得到 Ip的头部信息;但是如果对IPv6这么直接用得到的信息又不对;
同时如果先对buffer执行 ehdr=(struct *)buffer,并不能获取以太网数据帧头部。

是函数获取的数据格式不是这个格式吗?我主要的目的之一是要获取这个以太网数据帧头部,不知如何解决?请指教!
 楼主| 发表于 2006-10-3 10:19:49 | 显示全部楼层
socket是这么调用的
sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
回复

使用道具 举报

发表于 2006-10-3 18:26:24 | 显示全部楼层
For IPv6
sock=socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
回复

使用道具 举报

 楼主| 发表于 2006-10-4 15:05:29 | 显示全部楼层
对于IPv6,我是这么调用的
sock=socket(PF_INET6, SOCK_RAW, IPPROTO_TCP)

得不到以太帧也就罢了,得到的IP数据包直接赋值到Ipv6包头结构,也不正确,不能得到正确的Ipv6地址等字段
回复

使用道具 举报

发表于 2006-10-5 03:47:49 | 显示全部楼层
阅读 rfc2292 的 1, 2, 3, 4, 5章
回复

使用道具 举报

发表于 2006-10-9 22:29:06 | 显示全部楼层
recvfrom中的buffer只包含数据吧,socket信息存在from中
具体信息可以看一下struct sockaddr 这个结构
回复

使用道具 举报

 楼主| 发表于 2006-10-12 10:56:36 | 显示全部楼层
现在解决了。
sock=socket(AF_PAOCKET,SOCK_RAW,ETH_P_IP);
就能获取以太网数据帧了。
谢谢大家的指点!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-6 16:03 , Processed in 0.022228 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表