各个数据包格式图示

1,先看看各层的数据格式以及它们之间的相互包含关系


参考:http://www.360doc.com/content/07/0805/16/36481_654962.shtml


注意:这都是链路层的数据,因为可以看见MAC地址。

先看看类型(2Byte

类型为0800的,是ip数据包
类型为0806的,是arp数据包

也即ip包和arp包是平等关系,不是包含关系。

这里看看socket函数,
 sockfd=socket(int family,int type,int proto);


这个family参数可以是:AF_INET,AF_IENT6,AF_PACKET

第一个和第一个都是捕捉ip数据的,即在网络层工作,包的第一个字节就是ip的头部的第一个字节
第三个,可以捕捉链路层的包,包的第一个字节是Mac地址的第一个字节。


例子:

sockfd=socket(AF_PACKET,SOCK_RAW,ETH_P_IP),这个就是专门捕捉ip包的,可以看到mac地址。
代码:


注意看type
sockfd=socket(AF_PACKET,SOCK_RAW,ETH_P_ARP),这个是专门没捕捉arp包的,可以看到mac地址。

代码:直接改掉第三个参数即可
type0806.

接着,详细地看看每个包的格式
IP包:



IP包同等级的ARP包:

说明:
1arp包总共有28字节,这是不变的。
2arp包有两种类型,请求和应答。

3,结合第一张图可以仔细看看。

4,嵌在ip里面的tcp




4,嵌在ip里面的udp



5,嵌在ip里面的icmp






2,看在网络层的工作

例子:
sockfd=socket(AF_INET,SOCK_STREAMIPPROT_TCP)

这个捕捉的数据是从ip头部开始的,且只捕捉tcp包(tcp嵌在ip中的,这个都知道)
其实,最后一个参数可以写为0,即前面两个参数会默认后面的参数是IPPORT_TCP.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值