前言
年底事情比较少,加上家里已经把局域网组上了,算是一个比较理想的试验环境,因此决定抓紧年底的时间,边看资料边动手,恶补一下网络协议。文章纯属心得纪录,仅供探讨和参考,内容根据试验结果不定期更新,如有问题,欢迎指正。
(1) Sniffer&IP协议
Sniffer一般翻译为嗅探器,主要用于监视网络中传送的数据。Sniffer的用法很多,网管可以用Sniffer观察网络状态,玩家可以用它分析网络游戏的封包结构,黑客更可以用之进行网络攻击,可谓是居家旅游,杀人灭口必备佳品。不管如何,sniffer可以算是基础工具之一,因此非常适合作为我们的第一个试验品。
试验产品名:
Sniffer
预期输出结果:可对网络传送中数据包进行监控
确定了目标之后,我们来分析实现Sniffer的步骤。首先网络中应用程序主要使用TCP和UDP协议进行数据传输,只要能捕捉到这些数据就可以算是一个可用的Sniffer了。TCP和UDP都属于传输层协议,通过网络层的IP协议传送。IP协议提供无连接、不可靠的数据传输功能,IP协议将TCP以及UDP数据封装在自己包内,然后添上IP协议的包头进行发送。因此,要捕捉TCP以及UDP包内容,只要捕捉IP包即可。
决定了捕捉内容,接着就要确定捕捉方式。使用Socket进行包侦听是没有疑问的,但是问题在于我们平时应用中使用的Socket都是基于TCP(listen/connect)或者UDP(send/receive),并且绑定端口。为了实现对IP包的捕捉,需要将Socket设置为接收原始IP数据包,这样我们可以接收IP包并进行解析。此外,由于在数据链路层上,数据是以广播的方式发送,因此我们在对socket做recevice不仅可以收到该网卡接收的包,还可以收到网卡发送出去的包(原本以为网卡会自己进行过滤地说...另外,关于网卡混杂模式,后面有说明)。
现在,所有的条件都已经具备,以下为各步骤的实现。