Visual C++制作一个Sniffer实例

Sniffer是网络中一种常见的嗅探技术。对于网络管理员而言,他可以利用Sniffer来获取相关的网络流量情况进而发现一些潜在的网络性能或者安全问题;而对于黑客而言,Sniffer则能够帮助他得到一些重要的数据诸如用户名和密码或者其他的商业机密。Sniffer工作在用户看不见也注意不到的网络底层,隐蔽性极强,如被非法利用将会造成极大的危害,而利益受损的用户可能还浑然不觉。

为了使读者对Sniffer的原理有一个深入的理解,本实例实现一个Sniffer来捕捉用户名和密码,如果抓到密码的话,就在屏幕上面打印出来,同时还输出源计算机和目的计算机的IP地址,至于其他的信息我们则进行简单的抛弃而不做任何处理。程序编译运行后,启动控制台,运行snifpass.exe文件后,使用IE登录163.com,使用您的用户名和密码登录会员区时,sniffer获取的结果如下图所示:

图一、sniffer程序界面效果图

一、实现方法

在说明Sniffer实现方法之前,让我们先来看看以太网的工作方式。我们知道,以太网是一种基于广播信道的通信网络,在这种广播网络中,数据的发送是以广播方式来进行的。当一台计算机向另外一台计算机发送数据时,该数据将同时被发送到局域网中的其他所有计算机的网卡上。这样一来,每台计算机的网卡都能够收到这个数据帧。但在正常情况下,网卡只接受两种数据帧:

1、和自己的MAC地址相匹配的数据帧。

2、网络中的广播数据帧。

换而言之,只要网卡发现自己收到的数据帧和自己的MAC地址并不匹配,网卡就简单的将其抛弃,不做任何处理。所以在正常情况下,网络中的通信还是安全的。

但是以太网卡还有一种特殊的接收模式:混杂模式。在混杂模式下面,网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。

好了,现在Sniffer的原理已经浮出水面,我们来总结一下实现Sniffer的两个条件:

1、 我们需要一个共享式以太网环境。

2、我们需要将网卡的接收模式设置为混杂模式。

满足这两个条件后,我们就可以在网络中不动声色的来嗅探我们想要的数据了。下面我们来分析一下一个基本的Sniffer是如何实现的。

为了能够在网络上捕捉所有的数据包,我们首先需要将网卡设置为混杂模式。在Windows环境下面我们要用到一个函数:WSAIoctl()。在MSDN里我们可以看到该函数的定义如下:

int WSAIoctl (
 SOCKET s,
 DWORD dwIoControlCode,
 LPVOID lpvInBuffer,
 DWORD cbInBuffer,
 LPVOID lpvOUTBuffer,
 DWORD cbOUTBuffer,
 LPDWORD lpcbBytesReturned,
 LPWSAOVERLAPPED lpOverlapped,
 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE
);

该函数共有九个参数,第一个参数s是套接字描述符;第二个参数是I/O控制命令,有很多个命令可供选择,但在我们的程序中将只使用SIO_RCVALL命令。第三、第四个参数是对输入参数进行了描述。第五、第六个参数用于自调用返回的任何数据。第七个参数对应于实际返回的字节数。最后两个参数是lpOverlapped和lpCompletionROUTINE,在随重叠I/O调用这个函数时使用。在我们的程序中将其设置为NULL。

通过这个函数我们可以将网卡设置为混杂模式,并允许指定的套接字接收网络上的所有IP数据包。解决了网卡混杂模式设置的问题,下面我们就可以做一个实际的Sniffer,毕竟只有通过亲自动手写程序你才能够真正理解Sniffer。在这个例子中,我们将只捕捉用户名和密码,如果抓到密码的话,就在屏幕上面打印出来,同时还输出源计算机和目的计算机的IP地址,至于其他的信息我们则进行简单的抛弃而不做任何处理。

时间: 2025-01-27 04:58:04

Visual C++制作一个Sniffer实例的相关文章

PHP开发制作一个简单的活动日程表Calendar_php实例

材料取之深入PHP与JQuery开发,这本书实际上就是讲述一个活动日程表. 此文章适合从其它语言(如java,C++,python等)转到php,没有系统学习php,或者是php初学者,已经对程序有较深理解的朋友 以上为文件目录结构,public为程序根目录,目的是为了安全方面的考虑,把核心程序放在外界访问不到的地方. 本地的演示地址为:http://localhost/index.php 首先是数据库的脚本: /* Navicat MySQL Data Transfer Source Serv

Flash制作时钟的实例教程

核心提示:Flash制作时钟的实例教程. 本例为用Flash AS3.0制作时钟的实例教程,为Flash AS入门教程第八课的延伸教程,希望能给朋友们带来帮助. AS3.0实例教程二-时钟的制作 效果: 虽然制作时钟老套了点,但它确可以较全面地应用到时间日期和间隔等知识,仍不失为较好的入门练习. 一. AS3.0时间日期简介 时间和日期主要应用在读取时间日期和设置时间间隔两个方面.在AS3.0中时间日期仍然是用Date类来读取,与AS2.0相比3.0要获取时间日期更加方便一些.同样的要使用Dat

Flash8制作一个动态交互的几何画板

动态|交互 在这个教程里我们将学习如何利用Flash制作一个交互的几何画板,在这个画板里可以改变线条粗细也可以改变颜色. 先看看效果吧!  点击这里下载源文件 制作步骤: 1.创建背景.新建立一个Flash文档,把第一个图层命名为interface bkg,我们在这个图层里绘制几何画板的背景.然后使用矩形工具在舞台上绘制一个宽100px的矩形,矩形的高不太重要,我们可以随时调整高度.调整的方法很多,这里我不详细讲解了. 2.创建选择线条粗细的按钮. 新建立一个图层改名为line thicknes

Flash制作一个精美的课件退出窗口

    作者:安徽省潜山中学 王晓苏 为了方便用户使用,课件中都应该有一个[退出]按钮.但为了防止误操作,应在单击该按钮时出现一个对话框窗口,让用户选择是否真的退出.在Flash中,我们可以很容易地制作一个类似于Windows XP"关闭计算机"的精美退出窗口(图1). 图1 制作思路:先制作对话框窗口的背景面板,再制作两个按钮,然后加入命令. 制作方法如下: 1. 启动Flash MX,选择"插入→新建元件"命令打开"创建新元件"对话框,在&q

使用Photoshop CS5制作一个冰雪城堡

这是一篇效果十分漂亮的Photoshop实例教程,主要为大家介绍使用photoshop制作一个冰雪城堡的方法. (1)运行Photoshop CS5,打开本书附带光盘"大本钟.psd"文件. (2)复制"背景"图层,执行"滤镜"→"风格化"→"照亮边缘"命令.

Flash制作卷轴动画实例教程

  用Flash软件制作书法卷轴动画,是考试中必考的试题,本文对Flash制作卷轴动画实例 进行了具体阐述供阅读.大家请仔细阅读下文! 1.新建文档,然后导入图片,在舞台的第一帧拖入图片,调节到合适的大小并按(F8)转化为影片剪辑元件(提示:转化为影片剪辑的目的是为了能够使用模糊滤镜) 2.新建层,复制图层1的第一帧,粘贴到图层2的第一帧,在第二层的第一帧选择影片剪辑元件,在属性栏选择-添加滤镜-模糊(15左右,视舞台大小及图片分辨率),在图层1和图层2的第90帧按F5插入帧(提示:90帧是影片

PS制作一个奇异的星球撞击效果教程

photoshop实例教程,主要为大家介绍在photoshop中使用素材合成的方法制作一个奇妙的太空场景. 先看photoshop教程效果图. 新建文档,背景填充黑色. 建新层,用白色1-4像素画笔点几下,作为星空. 打开素材1 拖入文档中,去色,ctrl+L色阶调整对比度,图层模式滤色,不透明度15%. 分类: PS入门教程

制作一个简单的app的过程

问题描述 制作一个简单的app的过程 请问谁能帮忙推荐一个制作app的完整视频,,就是是先设计界面还是怎么样?或者详述一下过程 解决方案 我是先设计界面,包括页面的跳转也一起写好,然后再添加数据库和响应函数,视频教程没有,但是有一本挺不错的电子书,上面是根据实例一个个的向读者渗透安卓的知识,如果想要的话可以私下联系我 解决方案二: 一个简单的arm开发板的制作过程[Android开发]找乐,一个笑话App的制作过程记录 解决方案三: 先做界面,界面元素名会在后台程序中用到.

基于PHP制作验证码_php实例

网站注册.登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,为了防止网站被机器恶意注册. 生成验证码无非就那么几个步骤,首先是获取一个随机字符串,然后创建一个布画,将生成的字符串写到布画上,我们还可以在布画上画线画雪花,现在帖一段生成验证码的代码. 源代码: <?php session_start(); //开启session //创建随机码,并保存在session中 for($i=0;$i<4;$i++) { $_nmsg.=dechex(mt_rand(0,15)); } //保