Python使用PyNmap进行网络扫描的详细步骤!
Python使用PyNmap进行网络扫描的详细步骤!
使用 PyNmap 进行网络扫描是一个非常有效的方式,PyNmap 是 Nmap 工具的一个 Python 封装,它允许你在 Python 脚本中使用 Nmap 的强大功能,本文介绍了如何使用 PyNmap 进行网络扫描的详细步骤,需要的朋友可以参考下。
实现步骤
1. 安装 PyNmap
首先,你需要安装 PyNmap。你可以通过 pip 来安装它:
1
|
pip install python-nmap |
此外,你还需要确保在系统中安装了 Nmap。你可以从 Nmap 官网 下载并安装它,或者通过包管理器进行安装:
- 在 Ubuntu 上安装 Nmap:
1
|
sudo apt-get install nmap |
- 在 macOS 上安装 Nmap:
1
|
brew install nmap |
2. 使用 PyNmap 进行基础网络扫描
一旦安装完成,你可以使用 PyNmap 进行各种类型的网络扫描。以下是一些常见的用法示例:
2.1 扫描单个主机
以下是如何使用 PyNmap 扫描单个主机的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import nmap # 创建一个 Nmap 扫描器对象 nm = nmap.PortScanner() # 扫描目标主机的特定端口(如 22, 80, 443) nm.scan( '127.0.0.1' , '22-443' ) # 打印扫描结果 for host in nm.all_hosts(): print (f 'Host: {host} ({nm[host].hostname()})' ) print (f 'State: {nm[host].state()}' ) for proto in nm[host].all_protocols(): print (f 'Protocol: {proto}' ) lport = nm[host][proto].keys() for port in lport: print (f 'Port: {port}\tState: {nm[host][proto][port]["state"]}' ) |
2.2 扫描整个网络
你可以使用 PyNmap 扫描整个网络,查找在线的主机:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import nmap # 创建一个 Nmap 扫描器对象 nm = nmap.PortScanner() # 扫描整个子网,例如 192.168.1.0/24 nm.scan( '192.168.1.0/24' ) # 打印扫描结果 for host in nm.all_hosts(): print (f 'Host: {host} ({nm[host].hostname()})' ) print (f 'State: {nm[host].state()}' ) for proto in nm[host].all_protocols(): print (f 'Protocol: {proto}' ) lport = nm[host][proto].keys() for port in lport: print (f 'Port: {port}\tState: {nm[host][proto][port]["state"]}' ) |
2.3 执行操作系统检测
Nmap 支持操作系统检测功能,你可以通过 PyNmap 调用这一功能:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import nmap # 创建一个 Nmap 扫描器对象 nm = nmap.PortScanner() # 执行操作系统检测(-O 参数) nm.scan( '192.168.1.1' , arguments = '-O' ) # 打印操作系统检测结果 for host in nm.all_hosts(): if 'osclass' in nm[host]: for osclass in nm[host][ 'osclass' ]: print (f 'OS Type: {osclass["osfamily"]}, Accuracy: {osclass["accuracy"]}%' ) |
2.4 使用 Nmap 脚本引擎 (NSE)
你还可以使用 Nmap 脚本引擎 (NSE) 来执行更复杂的扫描,例如漏洞检测、服务版本检测等:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import nmap # 创建一个 Nmap 扫描器对象 nm = nmap.PortScanner() # 使用 NSE 脚本进行扫描(例如探测 HTTP 服务版本) nm.scan( '192.168.1.1' , arguments = '--script http-enum' ) # 打印扫描结果 for host in nm.all_hosts(): print (f 'Host: {host} ({nm[host].hostname()})' ) print (f 'State: {nm[host].state()}' ) if 'hostscript' in nm[host]: for script in nm[host][ 'hostscript' ]: print (f "Script: {script['id']} -> {script['output']}" ) |
3. 解析和处理扫描结果
PyNmap 返回的数据结构非常直观,你可以轻松解析和处理扫描结果。例如,nm.all_hosts() 返回所有扫描到的主机,nm[host].all_protocols() 返回该主机的所有协议(如 TCP、UDP),而 nm[host][proto][port] 返回指定端口的详细信息(如状态、服务类型等)。
4. 其他常用功能
- 快速扫描主机(ping 扫描):
1
|
nm.scan(hosts = '192.168.1.0/24' , arguments = '-sn' ) |
- 服务和版本检测:
1
|
nm.scan( '192.168.1.1' , '1-1024' , '-sV' ) |
- 获取特定端口的详细信息:
1
|
print (nm[ '192.168.1.1' ][ 'tcp' ][ 80 ]) |
5. 总结
PyNmap 是一个强大而灵活的工具,可以用来进行各种类型的网络扫描,包括端口扫描、操作系统检测、服务版本检测以及使用 Nmap 脚本引擎 (NSE) 执行高级扫描。它适合与 Python 脚本集成,用于自动化网络安全审计和测试。
使用 PyNmap 时,确保你有适当的权限,避免对未经授权的网络进行扫描,这是违反法律的。
共有 0 条评论