当前位置: 首页 > news >正文

Nmap的API和库文件

目录

  • 预备知识
    • 关于nmap
  • 实验目的
  • 实验环境
  • 实验步骤一
  • 实验步骤二
  • 实验步骤三

预备知识

关于nmap

Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

实验目的

通过该实验了解nmap的API和库文件,并掌握其使用。

实验环境

kali,IP地址:随机分配
win,IP地址:10.1.1.100

实验步骤一

记得我们在Nmap的脚本编写实验里写的脚本吗?脚本内容的portrule中是这样的:

return port.protocol == "tcp" andport.number == 80 and port.service == "http" and port.state =="open"

有没有想过port的protocol,number,service,state是哪儿来的?
这些其实就是nmap提供给我们的API。API的核心功能就是向脚本提供关于主机和端口的信息,例如名字解析,主机和端口的状态、服务发现等。
Nmap中的引擎会向脚本传递如下两个Lua table类型的参数:host table,port table。
这两个table中包含了目标主机的host和port信息。
先来看看host table,包括的字段有:
todo
每个字段的具体含义可以去这里查看:https://nmap.org/book/nse-api.html。
这里就稍微介绍下host.os,它是操作系统匹配表的数组。操作系统匹配由一个可读的名称和一系列操作系统类组成。每个操作系统类由一个供应商、操作系统系列、操作系统生成、设备类型和该类的一组CPE条目组成。
格式如下:
在这里插入图片描述
如果能与nmap-os-db(nmap的主机指纹库)中的条目匹配,则会返回类似如下的详细信息:
todo
我们现在以mac_addr为例,看看通过它能得到什么信息。它表示目标的mac地址,只有处于同一子网的设备,这个参数才有效。
同样,我们用Halcyon创建一个名为apitest.nse的脚本,因为是host表的字段,所以执行规则是hostrule:
在这里插入图片描述
我们想要得到的是mac_addr,所以在action中return回host.mac_addr:
在这里插入图片描述
完整代码如图所示:
在这里插入图片描述
保存并update script db。
测试结果如下:

nmap --script apitest 10.1.1.100

在这里插入图片描述
可以看到打印出了mac地址,不过这个mac地址和我们平时见到的格式不太一样。因为通过host.mac_addr获取的mac地址是二进制编码的,我们要转换成字符串,需要引入stdnse库,stdnse包中有一个format_mac函数,能够将host.mac_addr转换成字符串。
所以在nse脚本开头加上:
在这里插入图片描述
action的return部分改为:
在这里插入图片描述
完整代码如下:
在这里插入图片描述
运行结果如图:
在这里插入图片描述
此时得到了可读的mac地址了。
host的其他字段请自行根据上述的方法测试。

实验步骤二

接下来再看看port。Port的字段比较少,包括number,protocol,service,verison,state等。
以之前写的脚本用到的

returnport.protocol == "tcp" and port.number == 80 and port.service =="http" and port.state == "open"

为例:
protocol标志了目标端口的类型,为tcp或udp。
number就是目标端口的编号。
service即端口上运行的服务。
state表示端口上运行的状态。
脚本就是通过判断80端口开放,运行着http,然后打印出this is a webserver的。
同样也写一个脚本测试一下。
需要注意,这时应该是portrule:
在这里插入图片描述
以及action是返回port.protocol:
在这里插入图片描述
完整代码:
在这里插入图片描述
测试结果如图:
在这里插入图片描述
可以看到分别打印出了对应的protocol,上图中都是tcp。

实验步骤三

前面我们在格式化host.mac_addr返回的mac地址时,使用了stdnse这个库文件,接下来我们来学习nse中的库文件。
自带的库文件都在/usr/share/nmap/nselib,Halcyon列出来了:
在这里插入图片描述
我们切换到对应的路径下,自己写一个库文件试试。

nano mylib.lua

在这里插入图片描述
这个库的功能是打印出某端口是否开放。
我们先声明所需的库文件“stdnse”,它保存了一些用于输入的函数。
然后定义一个函数,它需要一个参数,将参数传递给stdnse库,用于格式化输出format函数:
在这里插入图片描述
保存并退出。
接下来写个nse,在其中导入这个库文件:
在这里插入图片描述
调用这个函数:
在这里插入图片描述
这里PrintPort就是我们在mylib.lua这个库中定义的函数。
完整代码如下:
在这里插入图片描述
保存并update script db。
运行测试如下:

nmap --script uselib 10.1.1.100

todo

相关文章:

  • Linux命令 -文件权限配置的深入(chown/chmod/setfacl)
  • ubuntu安装selenium
  • React脚手架工具创建项目的详细介绍
  • 26_TokenMongodb
  • 【工具】使用 sealos 部署 k8s 集群
  • LeetCode 每日一题 2022/9/19-2022/9/25
  • T1046判断一个数能否同时被3和5整除 (信息学一本通C++)
  • Canal + MySQL + Zookeeper + Kafka 数据实时同步
  • 我们如何一键将录音转换成文字?
  • 给计算机专业新生的一些学习建议
  • Java处理时间格式CST和GMT转换
  • VUE之组合式API
  • WebMagic
  • 梧桐树在售的金玉满堂增额终身寿险历久弥新,持续补充养老现金流
  • LDR6035 PD单USB-C口可充放电OTG协议芯片特点
  • php的引用
  • Flex布局到底解决了什么问题
  • isset在php5.6-和php7.0+的一些差异
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • SQLServer插入数据
  • vue-loader 源码解析系列之 selector
  • Webpack 4x 之路 ( 四 )
  • 包装类对象
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 多线程事务回滚
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 面试遇到的一些题
  • 前端工程化(Gulp、Webpack)-webpack
  • 实现简单的正则表达式引擎
  • 使用docker-compose进行多节点部署
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序开发之路(一)
  • raise 与 raise ... from 的区别
  • #include
  • #宝哥教你#查看jquery绑定的事件函数
  • #传输# #传输数据判断#
  • #大学#套接字
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)(1.9) MSP (version 4.2)
  • (11)MATLAB PCA+SVM 人脸识别
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一)appium-desktop定位元素原理
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转载)OpenStack Hacker养成指南
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET : 在VS2008中计算代码度量值
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net FrameWork总结
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net图片验证码生成、点击刷新及验证输入是否正确