首先要安装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的主机发现