首先要安装namp模块。
官网下载:
https://xael.org/pages/python-nmap-en.html
进入相关目录后进行安装
python3 setup.py install
nmap常用方法:
>>> dir(nmap)
['ET', 'PortScanner', 'PortScannerAsync', 'PortScannerError', 'PortScannerHostDict', 'PortScannerTimeout', 'PortScannerYield', 'Process', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__last_modification__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'convert_nmap_output_to_encoding', 'csv', 'io', 'nmap', 'os', 're', 'shlex', 'subprocess', 'sys']
1、基于IMCP的主机发现
root@kali:~/code/chap4/4.2.1# python3 nmap_ICMP_host.py -i 8.8.8.8
[8.8.8.8] is [up]
nmap_ICMP_host.py
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3
4 import nmap
5 import optparse
6
7
8 def NmapScan(targetIP):
9 # 实例化PortScanner对象
10 nm = nmap.PortScanner()
11 try:
12 # hosts为目标IP地址,argusments为Nmap的扫描参数
13 # -sn:使用ping进行扫描
14 # -PE:使用ICMP的 echo请求包(-PP:使用timestamp请求包 -PM:netmask请求包)
15 result = nm.scan(hosts=targetIP, arguments='-sn -PE')
16 # 对结果进行切片,提取主机状态信息
17 state = result['scan'][targetIP]['status']['state']
18 print("[{}] is [{}]".format(targetIP, state))
19 except Exception as e:
20 pass
21
22
23 if __name__ == '__main__':
24 parser = optparse.OptionParser('usage: python %prog -i ip \n\n'
25 'Example: python %prog -i 192.168.1.1[192.168.1.1-100]\n')
26 # 添加目标IP参数-i
27 parser.add_option('-i','--ip',dest='targetIP',default='192.168.1.1',type='string',help='target ip address')
28 options,args = parser.parse_args()
29 # 判断是单台主机还是多台主机
30 # ip中存在-,说明是要扫描多台主机
31 if '-' in options.targetIP:
32 # 代码意思举例:192.168.1.1-120
33 # 通过'-'进行分割,把192.168.1.1和120进行分离
34 # 把192.168.1.1通过','进行分割,取最后一个数作为range函数的start,然后把120+1作为range函数的stop
35 # 这样循环遍历出需要扫描的IP地址
36 for i in range(int(options.targetIP.split('-')[0].split('.')[3]),int(options.targetIP.split('-')[1])+1):
37 NmapScan(options.targetIP.split('.')[0] + '.' + options.targetIP.split('.')[1] + '.' + options.targetIP.split('.')[2] + '.' + str(i))
38 else:
39 NmapScan(options.targetIP)
2、基于TCP的主机发现
3、基于UDP的主机发现
4、基于ARP的主机发现