python_小脚本_使用nmap实现端口扫描

378 阅读1分钟

如果使用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']))

image.png