SD,UNIX,Windows下的网络扫描和嗅探工具包,其基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务,还可以推断主机所用的操作系统。Nmap还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。该软件收集了众多操作系统端口打开和关闭时的特征,支持目前流行的Linux、*BSD和Solaris2.5.1/2.6多种操作系统。目前版本的nmap扫描器从一个文件中读取操作系统特征模板。
下面举一个实例:
>FingerPrint IRIX 6.2-6.3#Thanks to Lamont Granquist
它说明这是一个IRIX6.2-6.3操作系统特征,注释指出该特征由Lamont Granquist提供。
>TSeq(Class=i800)
它说明ISN特征是“i800class”,即每一个新序列号比上一个序列号大800的整数倍。>T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT)
T1代表test1。这个测试是向打开的端口发送带有多个TCP选项的SYN数据包。DF=N说明返回包的 “Don't fragment”位必须没有设置。W=C000|EF2A说明返回包的窗口值必须为0xC000或0xEF2A。ACK=S++说明返回包的ACK值必须为初始化序列号加1。Flags=AS说明返回包的ACK和SYN标记位必须被设置。Ops=MNWNNT说明返回包的TCP选项及其顺序必须为:
>T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
Test2(第二个测试)向打开端口发送带有相同TCP选项的NULL(空)数据包。Resp=Y说明必须接收
到返回包。Ops=说明返回包中的所有TCP选项必须都没有被设置。‘%Ops=’匹配任意TCP选项。
>T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AS%Ops=M)
Test3(第三个测试)向打开端口发送带有TCP选项的SYN|FIN|URG|PSH数据包。
>T4(DF=N%W=0%ACK=O%Flags=R%Ops=)
这是向打开端口发送ACK数据包。注意这里没有Resp=字符串。说明返回包不是必须的(例如数据包被丢弃或有防火墙)。
>T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=)
>T6(DF=N%W=0%ACK=O%Flags=R%Ops=)
>T7(DF=N%W=0%ACK=S%Flags=AR%Ops=)
以上测试是针对关闭端口的SYN、ACK和FIN|PSH|URG数据包测试,并设置了相同的TCP选项。
>PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
这个是对“端口不可到达”信息的测试。DF=N前面已经介绍过了。TOS=0说明IP服务类型域应为0。接着的两个是IP包头总长度和返回IP包总长度(16进制值)。RID=E说明期望返回包RID值与发送的UDP包的值相同。RIPCK=E说明校验和应该正常(如果不正常则RIPCK=F)。UCK说明UDP包校验和也应该正常。ULEN=134是UDP包长度为0x134。DAT=E说明正确返回UDP数据,这个是大多数情况下的缺省设置。
5.基于VC++平台的远程主机操作系统探测功能的实现过程
1)调用GetIpAddress()获得远程主机的IP,并检查IP的合法性
2)调用探测函数StartProbe(),先判断输入的IP是否是本机主机,若是,返回FALSE,不进行探测;
3)启动线程
for(i=0;i 2/2 首页 上一页 1 2 |