如何截获网络数据包?截获的原理是什么?

如题所述

网络数据报文的拦截有很多层面的拦截,不知道你想讨论的是什么层面的拦截

1)网卡层面的截获(截获和自己同网段的计算机发送的信息,包括送往自己的数据包
这个拦截过程得从网络数据包发送和接受原理说起
一个网络数据报文的发送过程是这样的:
a)发送方的应用层将要发送的数据报文,通过Socket调用提交TCP/IP层
b)TCP/IP层经过层层封装,将这些数据报文封装成IP数据报文,送往数据链路层,一般以太网用的是802.X的桢结构,封装成数据祯。
c)以太网数据链路层是使用一个叫做MAC地址的东西来标识网口的,每一网口的MAC地址都是世界唯一的。
d)数据链路层将目的方的MAC地址和自己的MAC地址分别填入目标MAC和源MAC的字段中,发送到物理层(也就是网线上)
网络数据报文的接受过程是这样的:
每个网卡在收到物理链路上发送来的数据桢之后,都会自动检测收到的这个MAC地址是否和自己的网卡MAC地址相同,如果相同,则接受,否则就丢弃。
这样就可以实现对于数据包的过滤过程。

而很多网络拦截工具,例如Sniffer或者Ethereal,都将网卡的这个功能给打破了。
他们定义了一个网卡所谓的混杂模式,在这里,网卡不管收到的这个数据包是否是给自己的(目的MAC和自己网卡的MAC是否相同),都往上层送,都能对数据流进行分析。
这个是网络层面拦截的基本原理。

2)应用层和Socket层面的拦截
这个方法主要是通过系统Hook的方式来实现,例如一台计算机打算往网络发送东西,一般情况下应用程序都不会自己开发网络协议层,都会??

其实我的 原理就是 百度无所不能。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答