Python-Nmap 是一个网络映射器,在处理安全审计和发现网络方面非常重要。它作为一个开源项目存在;因此它是免费的。
所有核心操作系统都支持 Python-Nmap。但是,二进制包仅适用于 Windows、Linux 和 Mac OS X。通过以编程方式操作 Nmap 扫描结果,Nmap 在端口扫描任务中必不可少。下面我们就来看看如何在 Linux 中安装 python-nmap 库。
值得深入研究的 Nmap 的关键特性包括:
- 操作系统检测– 这涉及识别主机操作系统以及网络设备的硬件特征
- 端口扫描——Nmap 可以统计并列出整个目标和打开的端口
- 与目标的脚本化交互——在 Nmap 中,我们可以编写脚本,使用 Nmap 脚本引擎结合 Lua 编程语言在网络设备上执行操作。
- 版本检测——我们可以通过查询位于远程设备上的网络服务来确定应用程序版本号和应用程序名称。
- 主机发现——这是我们想要找出特定网络中的主机时的概念。例如,当我们想知道特定端口是否打开时。或者当他们提出 ICMP 请求时。此外,Nmap 还可以列出响应 TCP 的主机。
有两种不同的方法来测试 Nmap 方法:
方法一:第一种方法是在Python编写脚本并使用以下命令在终端上运行它们。
root@gfg:~# python script_name.py
# script_name.py
import nmap
nmap =nmap.PortScanner()
host = '127.0.0.1'
nmap.scan(host, '1-10')
print(nmap.command_line())
方法 2:第二种方法涉及通过命令行界面测试 Nmap 方法。为此,请打开终端并运行命令“Python”,以便获得如下所示的界面。
在 Ubuntu (Debian) 中安装 Nmap:
运行以下命令
root@gfg:~# sudo apt-get install nmap
在 Ubuntu (Debian) 中安装 Python-Nmap:
我们还需要名为 python-nmap 的Python模块。它负责计算机网络内的主机和服务发现。它通过在初始化向这些主机发送特定数据包后分析来自已识别主机的响应来实现此目的。
python-nmap有两种安装方式。第一个涉及在终端上安装,而第二个涉及下载 python-nmap 库并进行手动安装。
方法一:通过终端安装Python-Nmap
所以我们将运行以下命令:
root@gfg:~# pip install python-nmap
方法二:手动安装Python-Nmap
在第二种方法中,我们将列出下载 python-nmap 库直到它准备好使用所需的所有步骤。
步骤 1:使用 wget 下载 python-nmap 库,如下所示。
root@gfg:~# wget http://xael.org/norman/python/python-nmap/python-nmap-0.1.4.tar.gz
第二步:使用tar解压内容
root@gfg:~# tar xf python-nmap-0.1.4.tar.gz
第 3 步:将目录更改为提取的内容
root@gfg:~# cd python-nmap-0.1.4
第四步:安装Python-Nmap
root@gfg:~# python setup.py install
第五步:确认Python-Nmap安装成功,可以使用了。
root@gfg:~# python
我们还需要一个虚拟环境来分离不同模块之间的关注点并区分其他项目。如果您决定编写Python脚本并运行它们而不是命令行界面,这很重要。
以下命令将有助于创建虚拟环境
python -m venv my_virtual_environment_name
在命令行界面上测试 Nmap
按键盘上的 Ctrl + Alt + T 打开终端。然后,输入单词Python并按键盘上的 Enter 键
root@gfg:~# python
为了测试各种 Nmap 命令,我们将首先使用以下命令导入 Nmap 模块。
>>> import nmap
接下来我们需要实例化Nmap的端口扫描器如下
>>> nmap =nmap.PortScanner()
>>> host = '127.0.0.1'
接下来是将端口和主机范围设置为扫描,如下所示:
>>> nmap.scan(host, '1-10')
接下来,我们可以打印用于扫描的命令行命令,如图所示
>>> print(nmap.command_line())
使用 Nmap 获取 127.0.0.1 的主机名
>>> nmap['127.0.0.1'].hostname()
'localhost'
>>>
如果我们想获取Nmap上的扫描信息,请执行以下操作:
>>> print nmap.scaninfo()
结果将类似于:
{'tcp': {'services': '1-10', 'method': 'connect'}}
要扫描每个主机,我们需要运行以下命令
>>> for host in nmap.all_hosts():
... print('Host : %s (%s)' % (host, nmap[host].hostname()))
... print('State : %s' % nmap[host].state())
同样,我们也可以扫描所有协议。它返回被扫描的特定网络的协议。
>>> nmap['127.0.0.1'].all_protocols()
我们案例的结果是:
[tcp]
获取特定主机的状态如下
>>> nmap['127.0.0.1'].state()
它将指示主机是启动还是关闭。在我们的例子中,
'up'
Keys() 方法负责在提供范围的同时显示所有活动端口的信息。下面是如何使用keys()方法。
>>> nmap['127.0.0.1']['tcp'].keys()
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
验证给定端口的端口信息。例如,对于给定主机上的 20 如下
>>> nmap['127.0.0.1'].has_tcp(20)
False
>>>