- 扫描单个主机或 IP 地址:
nmap [options] <target>
例如:nmap 192.168.0.1
- 扫描多个主机或 IP 地址:
nmap [options] <target1> <target2> ...
例如:nmap 192.168.0.1 192.168.0.2
- 扫描整个网段:
nmap [options] <IP/mask>
例如:nmap 192.168.0.0/24
- 扫描多个端口:
nmap [options] -p <port1,port2,...> <target>
例如:nmap -p 80,443,8080 192.168.0.1
- 扫描指定端口范围:
nmap [options] -p <port1-port2> <target>
例如:nmap -p 1-1000 192.168.0.1
- 扫描所有端口:
nmap [options] -p- <target>
例如:nmap -p- 192.168.0.1
- 扫描指定协议:
nmap [options] -sU <target> # 扫描 UDP 端口nmap [options] -sT <target> # 扫描 TCP 端口(默认)
例如:nmap -sU 192.168.0.1
- 扫描操作系统:
nmap [options] -O <target>
例如:nmap -O 192.168.0.1
- 扫描服务和应用程序:
nmap [options] -sV <target>
例如:nmap -sV 192.168.0.1
10 扫描等级:
nmap [options] -T <target>
例如:nmap -T0`5 192.168.0.1
0 ( Paranoid )
1 ( Sneaky )
2 ( Polite )
3 ( Normal )
4 ( Aggressive )
5 ( Insane )
Paranoid(慢速):尽量减少扫描器对目标系统的影响,发送最少的数据包,最小化扫描器的输出。可以使用此模式进行轻松的探测。
Sneaky(隐蔽):与 Paranoid 模式相似,但可以发送更多的数据包,具有更高的扫描速度。这种模式可以用于更深入的扫描,但需要扫描器的运行时尽可能不被目标系统检测到。
Polite(礼貌):在不影响目标系统的情况下,发送足够的数据包以提供有用的输出。这是最常用的模式之一,适用于大多数情况。
Normal(正常):在短时间内发送大量的数据包,以实现较快的扫描速度。默认模式。
Aggressive(侵略):发送更多的数据包以提供更详细的输出,并尝试探测更多的端口。这种模式可以帮助识别那些被隐藏的服务或主机,但会对目标系统产生更多的影响,可能会被检测到。
Insane(疯狂):以最快的速度发送最多的数据包,以实现最快的扫描速度和最完整的扫描。这种模式可能会对目标系统产生严重的影响,可能会被检测到。
以上是 nmap 的一些常用用法,还有很多其它参数和选项可以使用,具体可以查看 nmap 的官方文档或使用 nmap --help 命令查看。
以下是用python调用nmap实现扫描的代码
import nmap
# 接收用户输入的 IP 和端口
ip_address = input('请输入要扫描的 IP 地址:')
port = input('请输入要扫描的端口号:')
try:
# 创建端口扫描对象
nm = nmap.PortScanner()
except nmap.PortScannerError:
print('Nmap not found', sys.exc_info()[0])
sys.exit(0)
except:
print("Unexpected error:", sys.exc_info()[0])
sys.exit(0)
try:
# 调用扫描方法,参数指定扫描主机 hosts,nmap 扫描命令行参数 arguments
nm.scan(hosts=ip_address, arguments='-v -sS -p '+port)
except Exception as e:
print("Scan erro:" + str(e))
# 遍历扫描主机
for host in nm.all_hosts():
print('----------------------------------------------------')
# 输出主机及主机名
print('Host : %s (%s)' % (host, nm[host].hostname()))
# 输出主机状态,如 up、down
print('State : %s' % nm[host].state())
for proto in nm[host].all_protocols():
# 遍历扫描协议,如 tcp、udp
print('----------')
# 输入协议名
print('Protocol : %s' % proto)
# 获取协议的所有扫描端口
lport = nm[host][proto].keys()
# 端口列表排序
list(lport).sort()
# 遍历端口及输出端口与状态、类型、服务
for port in lport:
print('port : %s\tstate : %s\ttype : %s\tservice : %s' % (port, nm[host][proto][port]['state'], nm[host][proto][port]['product'], nm[host][proto][port]['name']))
版权归原作者 刘天远 所有, 如有侵权,请联系我们删除。