如果使用Pycharm 需要使用os模块将Nmap文件路径添加到系统变量中
或者直接将Pycharm的路径和Nmap的路径添加到系统变量重启Pycharm 就可以了 下面这个代码,简单实现了对端口的扫描,后续应该还会发一个新的,更完善一点
# import os
# os.environ["PATH"] += os.pathsep + 'D:\\Application program\\Nmap'
# #添加系统环境变量,添加nmap路径
import nmap
nm =nmap.PortScanner() #实例化nmap对象
# nm.scan(('47.95.38.111'))
nm.scan('47.95.38.111','22,21','-sV')
print(nm.command_line())
#获取需要扫描的主机IP地址和端口
target_host=input('请输入需要扫描的主机ip地址')
target_ports=input('请输入需要扫描的端口')
#去除输入的空格,便于进行检查
target_ports=target_ports.replace(" ","")
#判断用户输入的端口号,是否是范围,如果是范围,则按照范围生成逗号分隔的字符串
if '-' in target_ports:
start_port,end_port=target_ports.split('-',',',' ','/')
target_ports=','.join([str(port) for port in range(int(start_port),int(end_port)+1)])
#输出扫描结果
nm.scan(hosts=target_host,arguments="-p"+target_ports)
#all_hosts() 你所输入的ip地址范围内去判断
for host in nm.all_hosts():
#hostnam()判断ip地址情况
print('Host:%s(%s)'%(host,nm[host].hostname()))
#state()状态
print('State:%s'%nm[host].state())
#all_protocols() 协议
for proto in nm[host].all_protocols():
print("Protocol:%s"%proto)
lport=nm[host][proto].keys()
print(type(lport))
for port in lport:
print('port:%s\tstate:%s'%(port,nm[host][proto][port]['state']))