栏目

首页 首页 网络安全查看内容

一个简易网络嗅探器的实现

最近更新| 发布者: 站长-黑杰克| 查看: |

由于很多网络(常见共享HUB连接的内部网)是基于总线方式,物理上是广播的,即当一个机器发给另一个机器数据,共享HUB先收到,然后把它接收到的数据再发给其他的(来的那个端口不发)每一个接口.所以在共享HUB下同一网段的所有机器的网卡都能接收到数据。将局域阿中某台机器的网络接口设置为混杂(promiscuous)模式(即网卡可以接收其收到的所有数据包,下面会详细地讲).那么它就可以捕获网络上所有的报文和帧了.如图1所示。

一个简易网络嗅探器的实现 黑客技术 第1张

Sniffer(嗅探器)是一种常用的收集有用数据的方法.这些数据可以是用户的账号和密码,也可以是一些商用机密数据等。Sniffer的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。在合理的网络中,Sniffer的存在对系统管理员是至关重要的,系统管理员通过Sniffer可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通讯,有些甚至牵涉到各种协议。借助于Sniff er,系统管理员可以方便地确定出多少通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的是哪台主机、报文发送占用多少时间,或者相互主机的报文传送间隔时间等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。

嗅探的基本工作

原理就是通过将网卡设置为混杂模式,然后接收所有经过本主机(或设备)的包,并尝试对其进行解包分析。本文通过一个简单的嗅探器的编写.力图使大家能够了解嗅探软件的基本实现方式.并从原理上理解嗅探。本嗅探器的基本工作流程如图2所示,下面我们就来看看这个嗅探器的具体实现。

一个简易网络嗅探器的实现 黑客技术 第2张

一个简易网络嗅探器的实现 黑客技术 第3张

在进行主函数编写之前,首先我们需要建立几个特殊的数据结构iphdr.tcphdr和udpHdr.这几个数据结构分别代表lP头、TCP头和UDP头的包头结构,用于在接包以后对相应的包进行解析。现在我们来看主函数。主函数首先需要进行初始化,初始化的工作包括使用WSAStanup和Socket函数初始化接受用的套接字Sock.对sockeLin结构的地址变量myaddress赋值(指向本地lP地址).以及使用bind函数将套接字Sock和本地地址变量myaddress绑定在一起,具体内容如下。

一个简易网络嗅探器的实现 黑客技术 第4张

一个简易网络嗅探器的实现 黑客技术 第5张

然后我们使用一个函数WSAlocil()将网卡设置为混杂模式。

一个简易网络嗅探器的实现 黑客技术 第6张

接下来我通过一个简单的循环来接受经过网卡的包,然后进行解包就可以了

一个简易网络嗅探器的实现 黑客技术 第7张

这里,我们还需要定义个solve()函数来对接到的数据包进行分析。Solve接收从主函数传递来的缓冲区数据.然后按照IP头.TCP头.UDP头的格式对接收缓冲区数据进行读取,对没有加密的包可以直接读取其数据.加密的包读出的则是乱码。solve函数的具体内容如下。

1、取包头

一个简易网络嗅探器的实现 黑客技术 第8张

2、协议判断

一个简易网络嗅探器的实现 黑客技术 第9张

一个简易网络嗅探器的实现 黑客技术 第10张

3、tcp包的简单解析

一个简易网络嗅探器的实现 黑客技术 第11张

4、udp包的简单解析

一个简易网络嗅探器的实现 黑客技术 第12张

 

至此,我们的嗅探就已经基本完成了.图3是运行这个嗅探器抓包的结果。可以看到,这个嗅探器已经可以接收经过本网卡的所有数据包了,并可对不同协议的包进行区分.判断相应标志位,显示报文.已经具备了嗅探器的基本功能。但是本嗅探器由于使用手动抓包,因此丢包较严重,与EtHearl等使用PCAP抓包的工具相比,抓包率大约仅为50%。倘若想要编写一个真正的嗅探器,光靠手动抓包显然是远远不够的.必须要借助PCAP等工具包,才能使嗅探器的功能真正得到实现。



文章由天启科技原创,抄袭必究,转载请注明:
本文地址:http://www.goodgoodhack.com/a/wangluoanquan/2465.html
文章由天启科技站长黑杰克原创,免费学习黑客技术,业务联系站长QQ9326665

最新视频