http://blog.csdn.net/kzm2008/article/details/5372834
man 7 ip
man 7
packet
Packet sockets are
used to receive or send raw packets at the device driver (OSI Layer
2) level. They allow the
user to implement protocol modules in user space on top of the
physical layer. 用AF_INET,上层代码无法获取以太头部信息。
1.原始套接字(raw
socket)1.1
原始套接字工作原理与规则原始套接字是一个特殊的套接字类型,它的创建方式跟TCP/UDP创建方法几乎是一摸一样,例如,通过
CODE:
[Copy to clipboard]
int sockfd;
sockfd =
socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);
这两句程序你就可以创建一个原始套接字.然而这种类型套接字的功能却与TCP或者UDP类型套接字的功能有很大的不同:TCP/UDP类型的套接字只能够访问传输层以及传输层以上的数据,因为当IP层把数据传递给传输层时,下层的数据包头已经被丢掉了.而原始套接字却可以访问传输层以下的数据,,所以使用
raw套接字你可以实现上至应用层的数据操作,也可以实现下至链路层的数据操作.
比如:通过
CODE:
[Copy to clipboard]
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))