首先要安装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]

python nmap 操作系统 python nmap模块安装_IP

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的主机发现