VB 钩子详解

VB 钩子详解
VB 钩子详解

Windows钩子函数的概念和实现方法

首先我们必须大致了解Windows的基本运作机理,Windows作为一个多任务操作系统,它是分有层次概念的,运行在最底下的称为Ring 0层,在这一层里基本上都是一些硬件驱动程序和Windows的总内核,一般的应用程序极少极少运行在这层,当然也有例外,例如调试软件SoftICE(不过基本上这个软件的作用是Crack软件而不是调试)、还原精灵还有分区魔法大师,就是运行在Ring 0层的,另外就是著名的CIH病毒。运行在Ring 0级的程序能够对所有硬件进行直接地址级访问,所受到的限制也最小。

消息(Message)传递是Windows独有的一种机制,因为Windows规定运行在Ring 0以上的程序是没有权利知道究竟硬件发生了怎样的中断变化的,Windows统一将这些中断变化封装成一系列的消息(黑箱作业,也就是常说的Black Box),比如鼠标移动,系统产生一个OnMouseMove消息(但这条消息从何而来,相关的硬件中断向量是什么,程序无从得知),OnMouseMove这条消息最后送达每一个窗口程序以供处理。在更高层次的地方,比如说控件级,所有的消息还被封装成一系列“事件”,比如TextBox控件有KeyPress事件,实际上,这些事件都是林林种种的消息映射。事件的概念使得程序员能够更加傻瓜化地进行编程,但是从另一个角度来说,这种黑箱作业也使得程序员过分依赖系统的安排,限制了程序员的思维,举个例子,Windows为按钮控件封装了大部分常用的属性和事件,完成一般的常规妈作是没有问题的,但是很遗憾,或许是Windows的疏忽,按钮控件的字体颜色永远默认是黑色,而且Windows没有为此提供一个专门的接口来修改,碰到这种情况,程序员就会非常头疼。

钩子函数(Hook Function),就像一把钩子,它的作用是将消息在抵达窗口程序之前先钩到一个地方以便程序员进行分析,这个地方称为挂接函数链,消息在这里先被一系列的函数处理然后由程序员决定是否交还给Windows系统,在这里,你可以“吞噬”(Lickup)一些你不希望发生的消息,比如说你吞掉所有的键盘消息而不交还给系统,那么键盘将会失灵。当然,经过了这道周折,系统效率将会有极其微小的降低,但是,由于Windows规定所有不运行在Ring 0层的程序都不能直接访问硬件中断,因此作为一种中断驱动程序的补充,钩子函数在很多场合下是非常有用的,有时候甚至是唯一的方法。

下面就以键盘拦截为例讲述钩子函数的使用方法:

首先定义以下API:

Public Declare Function SetWindowsHookEx Lib "user32" _

Alias "SetWindowsHookExA" (ByVal idHook As Long, _

ByVal lpfn As Long, _

ByVal hmod As Long, _

ByVal dwThreadId As Long) As Long

SetWindowsHookEx,这个函数是一切钩子函数的根本,其作用是通知Windows进行钩子妈作并定义钩子函数。

参数1,idHook为定义需要进行的拦截类型,是键盘拦截?鼠标拦截?还是别的。如 WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。

参数2,lpfn为该挂接函数链的首地址指针,因为VB是没有指针这种数据类型的所以用Long 代替。lpfn为钩子函数,在 VB中可以使用 AddressOf 获得钩子函数的地址。这个函数因为钩子类型不同而有所不同。如键盘钩子为:

Public Function KeyboardProc(ByVal nCode As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long

如果 Code 不为 0,钩子函数必须调用 CallNextHookEx,将消息传递给下面的钩子。 wParam 和 lParam不是按键。

参数3,hmod为创建钩子函数那个实体的句柄,即你的程序本身的句柄(handle),hmod用于全局钩子,VB要实现钩子,必须设为0。

(关于句柄:每一个程序都有一个ID号称为进程,句柄则分得更细,每一个进程里的每一个控件的ID号称为句柄。

比如一个程序既有输入框又有下拉条,那么下拉条和输入框都有自己的ID号,这个称为句柄。)

参数4,dwThreadId ,为监控代码,0表示全局监控,dwThreadId用于线程钩子 VB 中可以设置为 App.ThreadID。

UnhookWindowsHookEx 函数为释放钩子,将钩子函数所占用的资源交还给系统,起一个简单的清道夫功能。

Private Declare Sub CopyMemory Lib "kernel32" _

Alias "RtlMoveMemory" _

(pDest As Any, _

pSource As Any, _

ByVal cb As Long)

CopyMemory 作用是将内存里的某一块数据pSource拷贝到另一个地址pDest。最后一个参数cb表示拷贝内容的字节大小。

Private Declare Function GetAsyncKeyState Lib "user32" _

(ByVal vKey As Long) As Integer

GetAsyncKeyState作用是获得各种辅助功能键的状态(如CTRL,SHIFT什么的)。

Private Declare Function CallNextHookEx Lib "user32" _

(ByVal hHook As Long, _

ByVal nCode As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long

CallNextHookEx 挂钩函数拦截了某条消息后,由CallNextHookEx决定是否将这些消息送还给Windows系统。

Private Type KBDLLHOOKSTRUCT

vkCode As Long

scanCode As Long

flags As Long

time As Long

dwExtraInfo As Long

End Type

KBDLLHOOKSTRUCT为键盘钩子的结构体定义,关于该结构的成员,我没有从API函数帮助库里找到任何资源,不过大概猜也能猜出来。

成员1:vkCode为虚拟键码

成员2:scanCode为扫描码

成员3:flags为功能键状态

成员4:扩展信息?

实际上本例中我们只是需要简单的知道vkCode然后用chr函数置换成字符即可,所谓的vkCode实际上和ASCIIC码是一一对应的。

Private Const HC_ACTION = 0

Private Const LLKHF_EXTENDED = &H1

Private Const LLKHF_INJECTED = &H10

Private Const LLKHF_ALTDOWN = &H20

Private Const LLKHF_UP = &H80

Private Const WH_KEYBOARD_LL = 13&

Public Const VK_TAB = &H9

Public Const VK_CONTROL = &H11

Public Const VK_ESCAPE = &H1B

Public Const VK_DELETE = &H2E

以上10个定义为常量定义,常量定义没有什么特别好说的,仅仅是帮助记忆而已。你完全可以在使用VK_DELETE的地方使用&H2E,如果你觉得&H2E比VK_DELETE更容易理解

的话...

Public KeyboardHandle As Long

全局变量KeyboardHandle 为键盘钩子函数句柄,这个变量在开始挂钩的时候产生,结束挂钩的时候需要用它进行清场。

好了,现在我们开始工作:

首先创建一个工程,因为我们需要一个实体来运行我们的钩子函数,所以必须创建一个工程,在窗体部分填写:

Private Const WH_KEYBOARD_LL = 13&

Windows规定,键盘拦截的ID号为13号拦截。

Public Sub HookKeyboard()

KeyboardHandle = SetWindowsHookEx( _

WH_KEYBOARD_LL, AddressOf KeyboardCallback, _

App.hInstance, 0&)

End Sub

定义一个不带参数的子程序HookKeyboard,

KeyboardHandle 存储钩子函数所产生的ID号,这个在清场的时候需要用到。SetWindowsHookEx 的4个参数,

第一个,WH_KEYBOARD_LL, 正如前面定义的常量,它为13

第二个,AddressOf KeyboardCallback,这是自VB5以来的一次革命,VB5之后增加了一个保留字AddressOf,它的作用是获取某一个函数的首地址指针,在VB5之前的版本是没有这个功能的,有了AddressOf,大大扩展了VB的功能,才使得VB能够调用绝大部分API函数。因为VB本身并不存在指针。此行的意思是获得挂接函数链的首地址。

第三个,App.hInstance,App也是VB的保留字,表示本程序本身,如App.Path表示本程序当前目录,App.hInstance表示的是本程序本身的句柄,关于句柄前面已有所描述。

第四个,0,表示全局拦截,意思就是拦截所有窗口下的键盘输入。

定义完钩子函数,下面进入函数的具体实现,这些函数属于全局函数,所以不能在窗体级定义,必须降低到“模块”级别,现创建一个模块,然后开始编写,注:在VB里调用API几乎都是模块级的,很少出现在窗体级。实际不必深究这个问题,只要记住凡是调用API就用模块来编写就没错了。

Public Function KeyboardCallback(ByVal Code As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

Static Hookstruct As KBDLLHOOKSTRUCT

If (Code = HC_ACTION) Then

Call CopyMemory(Hookstruct, ByVal lParam, Len(Hookstruct))

If (IsHooked(Hookstruct)) Then

KeyboardCallback = 1

Exit Function

End If

End If

KeyboardCallback = CallNextHookEx(KeyboardHandle, _

Code, wParam, lParam)

End Function

函数KeyboardCallback,是整个钩子函数的核心,

参数1:Code,表示拦截层次,之前我们已经说过,如果Code为0,则拦截所有窗口的键盘输入。

参数2:wParam表示是何种Windows消息

参数3:lParam表示某条Windows消息的具体内容的指针,它实际指向存储那个内容的内存地址。

下面详细叙述关于wParam和lParam:

wParam和lParam是Windows消息机制的两个最重要参数,整个Windows依靠这两个参数传递各种各样的消息,首先是wParam,它表示此次的消息类型是什么?是键盘?是鼠标?键盘里又分按下还是抬起,鼠标里又分是单击还是双击,等等。lParam是一个指针,它指向本条消息所存储的信息的内存区域的首地址,很显然,这个地址存放的东西是很灵活的,比如鼠标消息,那么这里可能存放的是各键的状态或者光标的X,Y座标。换成键盘消息,则是键码等等。总之,wParam区分了类别,lParam存放了该类别所存储的信息。因为VB 没有指针,好在这里并不需要更多的指针妈作,只是记录一个首地址,所以可以用Long来代替。

注:在本程序里,wParam始终为256和257,257表示抬起键盘,256表示按下键盘,lParam 每次运行都不一定一样,因为每次系统重启Windows都会重新定义消息指针,但是就一次进入而言,这个值是不会改变的,退出之后再进就有可能发生变化了。

Static Hookstruct As KBDLLHOOKSTRUCT

定义一个局部静态结构体实例,结构体为KBDLLHOOKSTRUCT。

If (Code = HC_ACTION) Then

Call CopyMemory(Hookstruct, ByVal lParam, Len(Hookstruct))

If (IsHooked(Hookstruct)) Then

KeyboardCallback = 1

Exit Function

End If

End If

If Code=HC_ACTION,这条鉴别Windows的消息来源,实际上我们之前已经将HC_ACTION 定义为0了,所以所有键盘消息都将从此通过,那么,这个鉴别的意义何在呢?因为有可能还有别的键盘拦截程序等待着这些消息,我们不应该将这些消息据为己有,而是该交还给系统。

Call CopyMemory(Hookstruct, ByVal lParam, Len(Hookstruct))

这里用到了CopyMemory,作用是将lParam地址的内容复制到本地变量Hookstruct里来,这里又是VB的一个弊端,因为没有指针,所以必须动用到CopyMemory来完成这个使命。

If (IsHooked(Hookstruct)) Then

KeyboardCallback = 1

Exit Function

End If

IsHooked是我们自己定义的一个函数,该函数过滤了我们不希望出现的键盘码,比如说我们现在就是要不允许用户输入A,那么就可以在IsHooked里将A吞噬掉,那么键盘就永远打不出A来了。该函数返回0或者1,1表示此键确为我们不想要的字符,那么吃掉这条消息,不将它交还系统,Exit Function直接退出函数。如果不是,则略过。

可以看到,在If语句的最后是:

KeyboardCallback = CallNextHookEx(KeyboardHandle, _

Code, wParam, lParam)

表示:如果前面的条件都不成立,那么说明这条消息并非我们需要的消息,此时我们将此消息释放,用CallNextHookEx交还给系统。

下面我们进行前面提到的IsHooked函数的定义,这个函数主要是过滤我们不想要的那些键或者键盘组合,这里我们屏蔽了Alt+TAB组合:

Public Function IsHooked(ByRef Hookstruct As KBDLLHOOKSTRUCT) _

As Boolean

If (KeyboardHook Is Nothing) Then

IsHooked = False

Exit Function

End If

有时候CopyMemory也会发生意想不到的事情,所以,当KeyboardHook = Nothing (无值)的情况下,退出,略过该函数,以防不可预知的错误。

If (Hookstruct.vkCode = VK_TAB) And _

CBool(Hookstruct.flags And _

LLKHF_ALTDOWN) Then

IsHooked = True

Exit Function

End If

以上拦截了Alt+Tab的键盘组合,并将IsHooked返回True(就是1),表示本次按键确实符合了过滤原则,应该吞吃掉。

End Function

最后一步,释放钩子函数:

Public Declare Function UnhookWindowsHookEx Lib "user32" _

(ByVal hHook As Long) As Long

Public Sub UnhookKeyboard()

If (Hooked) Then

Call UnhookWindowsHookEx(KeyboardHandle)

End If

End Sub

这个函数很简单,使用UnhookWindowsHookEx这个API释放之前由SetWindowsHookEx所定制的钩子函数。

一般而言,我们将钩子函数的创建放在窗体的Load部分,表示一进入程序立即启动钩子,而释放钩子则放在UnLoad部分,表示一旦程序关闭,我们需要立刻释放钩子所占用的资源。

结束语:

事实上,该例子演示了整个键盘拦截和屏蔽的功能,如果仅仅是需要知道用户按下了什么键,那么IsHooked函数是不需要的,并且我们也没有必要吞噬任何消息,只是让消息从我们的钩子函数里过一遍,知道它的值,然后再将此消息交还给系统即可,那样的话,程序将会更

加简单。另外,在调试这类超越了VB编译环境本身的API程序时必须注意存盘,不断地存盘,因为VB环境和这些API函数同属系统级,因此它无法管理这些API,一旦出现问题,整个VB环境会在毫无预知的情况下造成全线崩溃的局面(比如VB编译环境的界面不提示任何内容自己就莫名其妙地突然消失等等),所以在按下RUN之前一定要记得存盘!!

c#钩子实例

C#键盘勾子(Hook)拦截器,屏蔽键盘活动 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 运行机制 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook 子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Ho ok类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Ho ok链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。 钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。 钩子子程必须按照以下的语法: LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam ); HookProc是应用程序定义的名字。 nCode参数是Hook代码,Hook子程使用这个参数来确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。

游戏辅助制作原理

游戏辅助制作原理 目录 一、前言 (1) 二、认识辅助 (1) 三、辅助技术综述 (2) 动作模拟技术 (2) 封包技术 (9) 结束语 (13) 一、前言 游戏外辅程序,可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏辅助程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去说明一切吧。 不管游戏辅助程序是不是“合法”身份,但是它却是具有一定的技术含量的,在这些小小程序中使用了许多高端技术,如拦截Sock技术、拦截API技术、模拟键盘与鼠标技术、直接修改程序内存技术等等。本文将对常见的游戏辅助中使用的技术进行全面剖析。 二、认识辅助 游戏辅助的历史可以追溯到单机版游戏时代,只不过当时它使用了另一个更通俗易懂的名字——游戏修改器。它可以在游戏中追踪锁定游戏主人公的各项能力数值。这样玩家在游戏中可以达到主角不掉血、不耗费魔法、不消耗金钱等目的。这样降低了游戏的难度,使得玩家更容易通关。 随着网络游戏的时代的来临,游戏辅助在原有的功能之上进行了新的发展,它变得更加多种多样,功能更加强大,操作更加简单,以至有些游戏的辅助已经成为一个体系,比如《石器时代》,辅助品种达到了几十种,自动战斗、自动行走、自动练级、自动补血、加速、不遇敌、原地遇敌、快速增加经验值、按键精灵……几乎无所不包。 游戏辅助的设计主要是针对于某个游戏开发的,我们可以根据它针对的游戏的类型可大致可将辅助分为两种大类。 一类是将游戏中大量繁琐和无聊的攻击动作使用辅助自动完成,以帮助玩家轻松搞定攻击对象并可以快速的增加玩家的经验值。比如在《龙族》中有一种工作的设定,玩家的工作等级越高,就可以驾驭越好的装备。但是增加工作等级却不是一件有趣的事情,毋宁说是重复枯燥的机械劳动。如果你想做法师用的杖,首先需要做基本工作--?砍树。砍树的方法很

自己搜集总结的nmap常用命令及参数说明

nmap BT5(BackTrack--Information Gathering--Network Analysis--Network Scanners-nmap) -sP渗透内网之后判断当前网络那些主机在线 nmap-sP192.168.1/255 -vv现实详细的扫描过程 -sS使用SYN半开式扫描,这种扫描方式使得扫描结果更加正确(又称半开放,或 隐身扫描) nmap-vv-sS IP -O大写O代表OS判断主机操作系统 nmap-O IP 延时策略 -T(0-5)默认为3 0即Paranoid模式。为了避开IDS的检测使扫描速度极慢,nmap串所有的扫描, 每隔至少5分钟发送一个包 1即Sneaky模式。也差不多,只是数据包的发送间隔是15秒 2即Polite模式。不增加太大的网络负载,串行每个探测,并使每个探测间隔 0.4秒 3即Normal模式。nmap的默认选项,在不使网络过载或者主机/端口丢失的情况 下尽可能快速地扫描 4即Aggressive模式。设置5分钟的超时限制,对每台主机的扫描时间不超过5分 钟,并且对每次探测回应的等待时间不超过1.5秒。 5即lnsane模式。只适合快速的网络或者不在意丢失默些信息,每台主机的超时 限制为75秒,对每次探测只等待0.3秒。 nmap-sS-T1IP

-sV探测端口的服务类型/具体版本等信息 nmap-vv-sV IP -p端口号对某个端口的服务版本进行详细探测有助于升入的针对性攻击, 比如缓冲溢出攻击 nmap-vv-sV IP-p21 适用于内外网的探测,以内网操作为示例(外网参数同) 简单端口扫描:nmap-vv-sT(sS、sF、sU、sA)192.168.0.1-D127.0.0.1 (-D伪造的地址) OS检测:nmap-vv-sS-O192.168.0.1 RPC鉴别:nmap-sS-sR192.168.0.1Linux上的portmap就是一个简单的RPC服务,监听端口为111(默认) Ping扫射:nmap-sP172.16.15.0/24 1)获取远程主机的系统类型及开放端口 Get info about remote host ports and OS detection nmap-sS-P0-sV-O 这里的可以是单一IP,或主机名,或域名,或子网 -sS TCP SYN扫描(又称半开放,或隐身扫描) -P0允许你关闭ICMP pings. -sV打开系统版本检测 -O尝试识别远程操作系统

鼠标键盘钩子截获密码

利用鼠标键盘钩子截获密码。 源码示例:https://www.360docs.net/doc/0815492426.html,/soft/GetPass_Src.rar 钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的 钩子分类: 1、WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以监视发送到窗口过程的消息 3、WH_DEBUG 调试钩子 4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL 5、WH_JOURNALRECORD 监视和记录输入事件 6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件 7、WH_KEYBOARD 键盘钩子 9、WH_KEYBOARD_LL 低层键盘钩子 10、WH_MOUSE 鼠标钩子 11、WH_MOUSE_LL 底层鼠标钩子 12、WH_SHELL 外壳钩子 13、WH_MSGFILTER 和WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等 安装钩子: 调用函数SetWindowsHookEx安装钩子。其函数原型为: HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) idHook表示钩子类型,它是和钩子函数类型一一对应的。如,

WH_KEYBOARD,WH_MOUSE。 Lpfn是钩子函数的地址。 HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。(系统钩子必须在DLL中) dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。 SetWindowsHookEx返回所安装的钩子句柄。 卸载钩子 调用函数BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子 定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。一般为下: LRESULT WINAPI MyHookProc(int nCode ,WPARAM wParam,LPARAM lParam) 参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode 包含有关消息本身的信,比如是否从消息队列中移出。 实例: 下面我们通过安装鼠标钩子。和键盘钩子还截获输入的密码,并可查看*密码为例,来说明何何使用钩子。 1,进入向导,新建MFC AppWizard(dll) 取名为GetPass,选择MFC Extension DLL,完成。 2,新建一个CGetPassHook 类,基类:CObject,并加入StartHook,StopHook,函数,如下:class AFX_EXT_CLASS CGetPassHook : public CObject { public: BOOL StopHook();

c语言键盘钩子

在开始贴这段垃圾代码以前,先给大家道个歉,也先扇自己一巴掌。本来说好昨天把代码搞好的,谁知道还没开始整,就过了12点了,食言了。 代码还没有怎么写好,先把关键代码粘贴出来,等今天晚上把代码整理好,功能完善了再修改这个文章,顺便把写程序的过程、遇到的问题以及关键思路写出来。 下面是DLL的关键代码(C语言编写,考虑DLL的兼容性): //////////////////////////////////// //keyhook.c //作用:DLL主文件 //作者:zaroty //时间:2008年9月9日0:54:39 //博客:https://www.360docs.net/doc/0815492426.html,/zaroty /////////////////////////////////// #define _WIN32_WINNT 0x0500 //底层钩子需要设置系统版本号 #include #include #include "keyhook.h" #include "vKey.h" HHOOK CuhHook=NULL; HANDLE g_hModule; BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved) { switch(dwReason) { case DLL_PROCESS_ATTACH: g_hModule = (HINSTANCE)hModule; break; case DLL_PROCESS_DETACH: g_hModule=NULL; break; } return TRUE; } LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ) { KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)lParam; LPCSTR log=GetKeyName(pStruct->vkCode); if (wParam==WM_KEYDOWN) {

编写钩子程序实例

编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子。 1.定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不相同的。下面以鼠标钩子函数举例说明钩子函数的原型: LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam) 参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode包含有关消息本身的信息,比如是否从消息队列中移出。 我们先在钩子函数中实现自定义的功能,然后调用函数CallNextHookEx.把钩子信息传递给钩子链的下一个钩子函数。CallNextHookEx.的原型如下: LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) 参数hhk是钩子句柄。nCode、wParam和lParam 是钩子函数。 当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递。 2.安装钩子 在程序初始化的时候,调用函数SetWindowsHookEx安装钩子。其函数原型为:HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) 参数idHook表示钩子类型,它是和钩子函数类型一一对应的。比如,WH_KEYBOARD表示安装的是键盘钩子,WH_MOUSE表示是鼠标钩子等等。 Lpfn是钩子函数的地址。 HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。 SetWindowsHookEx返回所安装的钩子句柄。 3.卸载钩子 当不再使用钩子时,必须及时卸载。简单地调用函数BOOL UnhookWindowsHookEx( HHOOK hhk)即可。 值得注意的是线程钩子和系统钩子的钩子函数的位置有很大的差别。线程钩子一般在当前线程或者当前线程派生的线程内,而系统钩子必须放在独立的动态链接库中,实现起来要麻烦一些。 线程钩子的编程实例: 按照上面介绍的方法实现一个线程级的鼠标钩子。钩子跟踪当前窗口鼠标移动的位置变化信息。并输出到窗口。 (1)在VC++6.0中利用MFC APPWizard(EXE)生成一个不使用文档/视结构的单文档应用mousehook。打开childview.cpp 文件,加入全局变量: HHOOK hHook;//鼠标钩子句柄 CPoint point;//鼠标位置信息 CChildView *pV iew; // 鼠标钩子函数用到的输出窗口指针 在CChildView::OnPaint()添加如下代码: CPaintDC dc(this);

nmap命令详解

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定. -------------------------------------------------------------------------------- 1.名称 nmap-网络探测和安全扫描工具 2.语法 nmap [Scan Type(s)] [Options] 3.描述 nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。从扫描类型一节可以得到细节。nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。 为了提高nmap在non-root状态下的性能,软件的设计者付出了很大的努力。很不幸,一些内核界面(例如raw socket)需要在root状态下使用。所以应该尽可能在root使用nmap。 nmap运行通常会得到被扫描主机端口的列表。nmap总会给出well known端口的服务名(如果可能)、端口号、状态和协议等信息。每个端口的状态有:open、filtered、unfiltered。open状态意味着目标主机能够在这个端口使用accept()系统调用接受连接。filtered状态表示:防火墙、包过滤和其它的网络安全软件掩盖了这个端口,禁止nmap探测其是否打开。unfiltered表示:这个端口关闭,并且没有防火墙/包过滤软件来隔离nmap的探测企图。通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered

VB 钩子详解

Windows钩子函数的概念和实现方法 首先我们必须大致了解Windows的基本运作机理,Windows作为一个多任务操作系统,它是分有层次概念的,运行在最底下的称为Ring 0层,在这一层里基本上都是一些硬件驱动程序和Windows的总内核,一般的应用程序极少极少运行在这层,当然也有例外,例如调试软件SoftICE(不过基本上这个软件的作用是Crack软件而不是调试)、还原精灵还有分区魔法大师,就是运行在Ring 0层的,另外就是著名的CIH病毒。运行在Ring 0级的程序能够对所有硬件进行直接地址级访问,所受到的限制也最小。 消息(Message)传递是Windows独有的一种机制,因为Windows规定运行在Ring 0以上的程序是没有权利知道究竟硬件发生了怎样的中断变化的,Windows统一将这些中断变化封装成一系列的消息(黑箱作业,也就是常说的Black Box),比如鼠标移动,系统产生一个OnMouseMove消息(但这条消息从何而来,相关的硬件中断向量是什么,程序无从得知),OnMouseMove这条消息最后送达每一个窗口程序以供处理。在更高层次的地方,比如说控件级,所有的消息还被封装成一系列“事件”,比如TextBox控件有KeyPress事件,实际上,这些事件都是林林种种的消息映射。事件的概念使得程序员能够更加傻瓜化地进行编程,但是从另一个角度来说,这种黑箱作业也使得程序员过分依赖系统的安排,限制了程序员的思维,举个例子,Windows为按钮控件封装了大部分常用的属性和事件,完成一般的常规妈作是没有问题的,但是很遗憾,或许是Windows的疏忽,按钮控件的字体颜色永远默认是黑色,而且Windows没有为此提供一个专门的接口来修改,碰到这种情况,程序员就会非常头疼。 钩子函数(Hook Function),就像一把钩子,它的作用是将消息在抵达窗口程序之前先钩到一个地方以便程序员进行分析,这个地方称为挂接函数链,消息在这里先被一系列的函数处理然后由程序员决定是否交还给Windows系统,在这里,你可以“吞噬”(Lickup)一些你不希望发生的消息,比如说你吞掉所有的键盘消息而不交还给系统,那么键盘将会失灵。当然,经过了这道周折,系统效率将会有极其微小的降低,但是,由于Windows规定所有不运行在Ring 0层的程序都不能直接访问硬件中断,因此作为一种中断驱动程序的补充,钩子函数在很多场合下是非常有用的,有时候甚至是唯一的方法。 下面就以键盘拦截为例讲述钩子函数的使用方法: 首先定义以下API: Public Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long SetWindowsHookEx,这个函数是一切钩子函数的根本,其作用是通知Windows进行钩子妈作并定义钩子函数。 参数1,idHook为定义需要进行的拦截类型,是键盘拦截?鼠标拦截?还是别的。如 WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。

Python中使用PyHook监听鼠标和键盘事件实例

Python中使用PyHook监听鼠标和键盘事件实例 PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件。这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所以PyHook也只能运行在Windows平台。关于PyHook的使用,在它的官方主页上就有一个简单的教程,大体上来说,可以这样使用 ?123456789101112131415161718192021222324252627282930 313233343536373839404142434445464748495051525354555 6 # -*- coding: utf-8 -*- # 3import pythoncom 4import pyHook 5def onMouseEvent(event): # 监听鼠标事件print "MessageName:",event.MessageName print "Message:", event.Message print "Time:", event.Time print "Window:", event.Window print "WindowName:", event.WindowName print "Position:", event.Position print "Wheel:", event.Wheel print "Injected:", event.Injected print"---" # 返回

True 以便将事件传给其它处理程序# 注意,这儿如果返回False ,则鼠标事件将被全部拦截# 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了return True 23def onKeyboardEvent(event): # 监听键盘事件print "MessageName:", event.MessageName print "Message:", event.Message print "Time:", event.Time print "Window:", event.Window print "WindowName:", event.WindowName print "Ascii:", event.Ascii, chr(event.Ascii) print "Key:", event.Key print "KeyID:", event.KeyID print "ScanCode:", event.ScanCode print "Extended:", event.Extended print "Injected:", event.Injected print "Alt", event.Alt print "Transition", event.Transition print "---" # 同鼠标事件监听函数的返回值return True 42def main(): # 创建一个“钩子”管理对象hm = pyHook.HookManager() # 监听所有键盘事件 hm.KeyDown = onKeyboardEvent # 设置键盘“钩子”hm.HookKeyboard() # 监听所有鼠标事件 hm.MouseAll = onMouseEvent # 设置鼠标“钩子”hm.HookMouse() # 进入循环,如不手动关闭,程序将一直处于监听状态pythoncom.PumpMessages() 56if __name__ == "__main__": main()

端口扫描工具nmap使用实验

我们可以使用ping扫描的方法(-sP),与fping的工作方式比较相似,它发送icmp回送请求到指定范围的ip地址并等待响应。现在很多主机在扫描的时候都做了处理,阻塞icmp 请求,这种情况下。nmap将尝试与主机的端口80进行连接,如果可以接收到响应(可以是

syn/ack,也可以是rst),那么证明主机正在运行,反之,则无法判断主机是否开机或者是否在网络上互连。 扫描tcp端口 这里-sR是怎样在打开的端口上利用RPC命令来判断它们是否运行了RPC服务。 nmap可以在进行端口扫描的tcp报文来做一些秘密的事情。首先,要有一个SYN扫描(-sS),它只做建立TCP连接的前面一些工作,只发送一个设置SYN标志的TCP报文,一个RESET报文,那么nmap假设这个端口是关闭的,那么就不做任何事情了。如果接收到一个响应,它并不象正常的连接一样对这个报文进行确认,而是发送一个RET报文,TCP的三次握手还没有完成,许多服务将不会记录这次连接。 有的时候,nmap会告诉我们端口被过滤,这意味着有防火墙或端口过滤器干扰了nmap,使其不能准确的判断端口是打开还是关闭的,有的防火墙只能过滤掉进入的连接。 扫描协议 如果试图访问另一端无程序使用的UDP端口,主机将发回一个icmp“端口不可达”的提示消息,IP协议也是一样。每个传输层的IP协议都有一个相关联的编号,使用最多的是ICMP(1)、TCP(6)和UDP(17)。所有的IP报文都有一个“协议”域用于指出其中的传输层报文头所使用的协议。如果我们发送一个没有传输层报文头的原始IP报文并把其协议域编号为130[该编号是指类似IPSEC协议的被称为安全报文外壳或SPS协议],就可以判断这个协议是否在主机上实现了。如果我们得到的是ICMP协议不可达的消息,意味着该协议没有被实现,否则就是已经实现了,用法为-sO. 隐蔽扫描行为 nmap给出了几个不同的扫描选项,其中一些可以配套着隐藏扫描行为,使得不被系统日志、防火墙和IDS检测到。提供了一些随机的和欺骗的特性。具体例子如下: FTP反弹,在设计上,FTP自身存在一个很大的漏洞,当使用FTP客户机连接到FTP 服务器时,你的客户机在TCP端口21上与FTP服务器对话,这个TCP连接称为控制连接。FTP服务器现在需要另一条与客户机连接,该连接称为数据连接,在这条连接上将传送实际的文件数据,客户机将开始监听另一个TCP端口上从服务器发挥的数据连接,接下来执行一个PORT命令到服务器,告诉它建立一条数据连接到客户机的IP地址和一个新打开的端口,这种操作方法称为主动传输。许多客户机使用网络地址转换或通过防火墙与外界连接,所以主动传输FTP就不能正常工作,因为由服务器建立的客户机的连接通常不允许通过。 被动传输是大多数FTP客户机和服务器所使用的方法,因为客户机既建立控制连接又建立数据连接,这样可以通过防火墙或NAT了。

C#键盘钩子拦截键盘按键

C#键盘钩子,本文以C#语言为例,演示拦截键盘按键。首先打开VS创建一个窗体应用程序。如图: 需要引入以下两个命名空间。 using System.Runtime.InteropServices; using System.Diagnostics; 以下是全部源码: using System; using System.Collections.Generic; using https://www.360docs.net/doc/0815492426.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices;

using System.Diagnostics; namespace WindowsForms5107 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //定¨义?一?个?结á构1 public struct HookStruck { public int vkCode; public int scanCode; public int time; } public delegate int FunctionAddr(int ncode,IntPtr wParam,IntPtr iparam); [DllImport("user32.dll")] //参?数簓介é绍Θ?:阰hookID表括?示?参?数簓类え?型í,?有瓺鼠酣?标括?钩3子哩?,?键ü盘ì钩3子哩?等台?类え?型í,?callfunction:阰回?调獭?函ˉ数簓地?址·,?即′你?要癮转羇而?执′行D的?程ì序?地?址·。£ //hInstance:钩3子哩?程ì序?的?实害??柄括?。£threadID线?程ìId,你?要癮监à视酣?的?程ì序?的?iD,当獭纈d=0时骸?,?为a系μ统?钩3子哩?,?监à控?整?个?系μ统?

hook的使用实例

在网上找了好久都没有找到消息hook的实例,下面是我的例子给大家分享一下 下面是dll中的代码: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //我的经验,编译的时候会提示DllMain,已在DllMain.cpp中定义,把DllMain.cpp从源文件里删掉就好了 #include "stdafx.h" #include HHOOK hkey=NULL; HINSTANCE h_dll; #pragma data_seg(".MySec") //定义字段,段名.MySec HWND h_wnd=NULL; #pragma data_seg() #pragma comment(linker,"/section:.MySec,RWS") BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { h_dll=hinstDLL; // MessageBox(0,"运行dllman","",MB_OK); return TRUE; } LRESULT CALLBACK my_test(int nCode,WPARAM wParam,LPARAM iParam)// { /* if(nCode==HC_ACTION) { MessageBox(0,"成功!!","标题",MB_OK); } else { MessageBox(0,"失败!!","标题",MB_OK); } */ MessageBox(0,"被截取","",MB_OK); UnhookWindowsHookEx(hkey); return 1; } void SetHook(HWND hwnd) { h_wnd = hwnd; // MessageBox(0,"运行sethook","",MB_OK); hkey=SetWindowsHookEx(WH_KEYBOARD,my_test,h_dll,0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 下面是EXE的代码:有很多头文件是没用上的,我个人习惯都带着- -,虽然这不是好习惯

Nmap实验报告

本文档如对你有帮助,请帮忙下载支持! 网络扫描软件Nmap的应用 在网络攻击时,攻击者往往会使用网络和端口扫描软件对目标主机进行扫描,发现漏洞,为后续攻击做准备。本实验使用网络扫描软件Nmap对北邮官网1.隐藏扫描(Stealth Scanning) -sS为TCP同步扫描,原理是源主机发送一个TCP同步包(SYN),然后等待目的主机的回应。如果对方返回SYN|ACK包,就表示该目标端口打开。Wireshark抓包可以看出在扫描过程中,源主机(10.8.70.224)向目标主机(10.3.9.254)最可能打开的1000个端口发送了TCP同步包,其中只有80端口和3306端口返回了SYN|ACK包,说明目标主机开放了这两个端口。从Nmap扫描结果可以看出80端口提供的是http服务,3306提供的是mysql服务。 2.端口扫描(port scanning) -sT扫描是调用系统函数connect()用来打开一个链接,所以耗时要比-sS要多。RTTVAR(往返延时变量)很大,应该网络拥塞引起的。从wireshark抓包看出 源主机与目的主机之间建立了完全的TCP链接,探测到端口开放后立即发送RST 断开链接。 3.UDP扫描(UDP Scanning) UDP扫描是向目标主机的每个端口发送一个0字节的UDP包,如果收到端口不可到达的ICMP消息,端口就是关闭的。如wireshark抓包所示 源主机向目标机的1031端口发送了一个0字节的UDP包。 端口1031收到了ICMP消息,说明端口是关闭的。 端口123开启的是ntp服务。值得注意的是,此时发送的并不是0字节的UDP 包,而是内容为ntp的总长为224bit的UDP包。 4.Ping扫描(Ping Sweeping) 对源主机所在网段(,Nmap是通过发送ARP包来询问IP地址上的主机是否活动的,如果收到ARP回复包,那么说明该主机在线。如wireshark抓包所示 源主机广播所扫描网段的ARP请求,没有回复的主机均视为没有在线。 ,说明 、 5.TCP ACK扫描 TCP ACK扫描是向目标机的端口发送ACK包,如果返回一个RST包,则这个端口就视为unfiltered状态。如wireshark抓包所示 如90端口收到了RET包,说明这个端口处于unfiltered状态。 6.操作系统类型扫描 从扫描结果可以得到目标主机的详细信息。目标主机的操作系统为AVM FRITZ!Box WLAN7240WAP。 7.Traceroute路由跟踪扫描 使用-traceroute可以得到本机到目标主机之间的拓扑结构和路由信息。从Nmap结果可以看出,本地主机到10.3.9.254一共要经过4跳才能到达。拓扑图如下 再对校内的图书馆,教务处,论坛进行扫描后可以得到学校的网络拓扑图 对百度进行扫描后得到校园网到外网的拓扑图

用VB实现的全局键盘钩子

用VB实现的全局键盘钩子 2010-04-06 13:30 代码功能:实时监测Caps Lock、NumLock、Scroll Lock三个按件的状态,并显示在Label1 Label2 Label3三个标签中 '.bas模块中 Public m_hDllKbdHook As Long 'public variable holding 'the handle to the hook procedure Public Const WH_KEYBOARD_LL As Long = 13 'enables monitoring of keyboard 'input events about to be posted 'in a thread input queue Private Const HC_ACTION As Long = 0 'wParam and lParam parameters 'contain information about a 'keyboard message Public Const VK_CAPITAL As Long = &H14 Public Const VK_NUMLOCK As Long = &H90 Public Const VK_SCROLL As Long = &H91 Private Const LLKHF_UP As Long = &H80& 'test the transition-state flag Public Type KeyboardBytes kbByte(0 To 255) As Byte End Type Private Type KBDLLHOOKSTRUCT vkCode As Long 'a virtual-key code in the range 1 to 254 scanCode As Long 'hardware scan code for the key flags As Long 'specifies the extended-key flag, 'event-injected flag, context code, 'and transition-state flag time As Long 'time stamp for this message dwExtraInfo As Long 'extra info associated with the message End Type Public Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long

钩子函数捕捉键盘消息

利用钩子函数来捕捉键盘响应的windows应用程序一:引言: 你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数。因此本文将对钩子函数的相关知识进行阐述。当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述。(本文的程序为vc6.0的开发环境,语言是:C和win32 api)。 二:钩子概述: 微软的windowsX操作系统是建立在事件驱动的机制上的,也就是通过消息传递来实现。而钩子在windows操作系统中,是一种能在事件(比如:消息、鼠标激活、键盘响应)到达应用程序前中途接获事件的机制。而且,钩子函数还可以通过修改、丢弃等手段来对事件起作用。 Windows 有两种钩子,一种是特定线程钩子(Thread specific hooks),一种是全局系统钩子(Systemwide hooks)。特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx ()来设置钩子的。对于特定线程钩子,钩子的函数既可以是包含在一个.exe也可以是一个.dll。但是对于一个全局系统钩子,钩子函数必须包含在独立的dll中,因此,当我们要捕捉键盘响应时,我们必须创建一个动态链接库。但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。鉴于这一点,在windows ce中对钩子程序并不支持。所以当程序完成并退出时,应当释放钩子,调用函数:UnhookWindowsHookEx。 下面我们将举一个例子(捕捉键盘)来详细的讲解钩子函数的程序设计。 三:程序的设计: I:设置钩子 设置钩子是通过SetWindowsHookEx ()的API函数. 原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId) idhook:装入钩子的类型. lpfn: 钩子进程的入口地址 hMod: 应用程序的事件句柄 dwThreadId: 装入钩子的线程标示 参数: idHook: 这个参数可以是以下值: WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT、WH_DEBUG、WH_FOREGROUNDIDLE、 WH_GETMESSAGE、WH_JOURNALPLAYBACK、WH_JOURNALRECORD、WH_KEYBOARD、WH_KEYBOARD_LL、

Nmap扫描原理与用法

[+] Nmap扫描原理与用法 2012年6月16日 1Nmap介绍 Nmap基本命令和典型用法 ?全面进攻性扫描(包括各种主机发现、端口扫描、版本扫描、OS扫描及默认脚本扫描): nmap -A -v targetip ?Ping扫描: nmap -sn -v targetip ?快速端口扫描: nmap -F -v targetip ?版本扫描: nmap -sV -v targetip ?操作系统扫描: nmap -O -v targetip 2

Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。最新版的Nmap6.0在2012年5月21日发布,详情请参见:https://www.360docs.net/doc/0815492426.html,。 一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap 可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。 Nmap的优点: 1. 灵活。支持数十种不同的扫描方式,支持多种目标对象的扫描。 2. 强大。Nmap可以用于扫描互联网上大规模的计算机。 3. 可移植。支持主流操作系统:Windows/Linux/Unix/MacOS等等;源码开放,方便移植。 4. 简单。提供默认的操作能覆盖大部分功能,基本端口扫描nmap targetip,全面的扫描nmap –A targetip。 5. 自由。Nmap作为开源软件,在GPL License的范围内可以自由的使用。 6. 文档丰富。Nmap官网提供了详细的文档描述。Nmap作者及其他安全专家编写了多部Nmap 参考书籍。 7. 社区支持。Nmap背后有强大的社区团队支持。 8. 赞誉有加。获得很多的奖励,并在很多影视作品中出现(如黑客帝国2、Die Hard4等)。 9. 流行。目前Nmap已经被成千上万的安全专家列为必备的工具之一。 1.1 Zenmap

相关文档
最新文档