#coding=UTF-8
#!/usr/bin/env python
import nmap
import optparse
def nmapScan(tgtHost,tgtPort):
'''
#创建nmap扫描器,初始化PortScanner模块
#class PortScanner()
# __init__(self, nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap'))
#初始化时先检测系统中是否存在Nmap版本,根据nmap_search_path中字符串进行搜索,无返回值。
'''
nmScan = nmap.PortScanner() #创建一个PortScanner()类对象
'''
#扫描指定主机
#scan(self, hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False)
#hosts 主机
#ports 端口
#arguments 扫描参数
#sudo
#返回值为目标扫描结果列表
'''
nmScan.scan(tgtHost,tgtPort) #调用PortScanner类的scan()函数,将目标和端口作为参数输入并进行nmap扫描
#输出扫描结果中的状态信息
state=nmScan[tgtHost]['tcp'][int(tgtPort)]['state']
print ("[*] " + tgtHost + " tcp/"+tgtPort +" "+state)
def main():
parser = optparse.OptionParser('usage %prog ' + '-H <target host> -p <target port>')
parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')
parser.add_option('-p', dest='tgtPort', type='string', help='specify target port[s] separated by comma')
(options, args) = parser.parse_args()
tgtHost = options.tgtHost
######这段代码支持以逗号分割及以-分割的端口范围
tgtPorts = []
tgtPorts_cache = str(options.tgtPort).split(',')
i = int(len(tgtPorts_cache))
for m in range( 0,i ):
tgtPorts_split = str(tgtPorts_cache[m]).split('-')
if(len(tgtPorts_split) < 2):
tgtPorts.extend(tgtPorts_split)
#print(tgtPorts)
else:
for n in range(int(tgtPorts_split[0]),int(tgtPorts_split[1])+1):
tgtPorts.append(str(n))
#print(tgtPorts)
######以下列表是你需要扫描的端口列表
#tgtPorts = str(options.tgtPort).split(',')
if (tgtHost == None) | (tgtPorts[0] == None):
print (parser.usage)
exit(0)
for tgtPort in tgtPorts:
nmapScan(tgtHost, tgtPort)
if __name__ == '__main__':
main()