EnjoyTech 发表于 2006-10-3 10:06:47

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

使用 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,并不能获取以太网数据帧头部。

是函数获取的数据格式不是这个格式吗?我主要的目的之一是要获取这个以太网数据帧头部,不知如何解决?请指教!

EnjoyTech 发表于 2006-10-3 10:19:49

socket是这么调用的
sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);

dzho002 发表于 2006-10-3 18:26:24

For IPv6
sock=socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6);

EnjoyTech 发表于 2006-10-4 15:05:29

对于IPv6,我是这么调用的
sock=socket(PF_INET6, SOCK_RAW, IPPROTO_TCP)

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

dzho002 发表于 2006-10-5 03:47:49

阅读 rfc2292 的 1, 2, 3, 4, 5章

piky 发表于 2006-10-9 22:29:06

recvfrom中的buffer只包含数据吧,socket信息存在from中
具体信息可以看一下struct sockaddr 这个结构

EnjoyTech 发表于 2006-10-12 10:56:36

现在解决了。
sock=socket(AF_PAOCKET,SOCK_RAW,ETH_P_IP);
就能获取以太网数据帧了。
谢谢大家的指点!
页: [1]
查看完整版本: recvfrom函数获取的数据包的格式问题?似乎不一致!