网络流量监视 之三

    上篇网络流量监视 之二 写到通过raw socket捕获到了包括IP头数据包,下面的工作就是分析该数据包了

    数据包结构很多地方都有介绍的,具体如下

    ----------------------------------------------

  | ip header | tcp header(or x header) | data |

  ----------------------------------------------

    其中IP头部分如下

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 

    数据结构定义如下(IPV4):

    把2进制数据转换成对应的数据结构,使用以下的转换函数

    转换完成的数据并不能直接使用,熟悉网络的人应该知道,IP包头采用的是网络字节序,需要转换成对应的本机字节序,对于ushort类型的数据,需要将高低位字节进行交换

 

    下面一一列举数据结构各个字段的意义:

 

    一  ip_verlen,前4位存放着IP的版本号,后4位存放着IP头长度

    通过 ip_verlen >> 4 得到值来判断数据包的IP协议版本号(4或者是6)

    通过 ip_verlen & 0x0f 得到IP包头长度(注意该值需要乘4才是包头长度)

 

    二  ip_tos,服务器类型 ,本文不使用

    三  ip_totallength,数据包长度

 

    四  ip_id, 16位标识 

 

    五  ip_offset, 分片偏移, 其前3位为标识

 

    六  ip_ttl,8位生存时间 TTL 

 

    七  ip_protocol,8位协议 (TCP, UDP 或其他) 

 

    八  ip_checksum,16位IP首部校验和 

 

    九  ip_srcaddr,32位源IP地址 

 

    十  ip_destaddr ,32位目的IP地址 

 

 

    下面是实现IP头解析的代码

    在网络流量监视 之二 的基础上,增加相关代码,把IP头的解析信息也写入到日志文件中

    让我们看看效果吧

 

OK,已经可以看到捕获包的基本IP信息了,利用这些信息,我们可以在网络流量监视 之一的基础上对网络数据流量进行更加详细的监视了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值