资讯专栏INFORMATION COLUMN

使用 python-nmap 进行端口扫描

GraphQuery / 3118人阅读

摘要:利用模块进行端口扫描简单的实现方式实现了三种输入方式单个端口扫描例如多个端口扫描例如连续端口扫描例如多层字典嵌套取值如果是连续的端口其他的情况上面的代码有点复杂改良之后的代码如下优化结构

利用 python-nmap模块进行端口扫描,简单的实现方式

实现了三种输入方式
1)单个端口扫描,例如 python scanport.py -H host -P port
2)多个端口扫描,例如 python scanport.py -H host -P port1,port2,.....
3)连续端口扫描,例如 python scanport.py -H host -P start_port-end_port

#coding:utf-8

import nmap
import optparse
import sys

class INFO:
    HEADER = "33[95m"
    OKBLUE = "33[94m"
    OKGREEN = "33[92m"
    WARNING = "33[93m"
    ARNING = "33[93m"
    FAIL = "33[91m"
    ENDC = "33[0m"
    BOLD = "33[1m"
    UNDERLINE = "33[4m"


def scanport(host, port):
    nm =nmap.PortScanner()
    try:
        result = nm.scan(host,port)
        state = result["scan"][host]["tcp"][int(port)]["state"]# 多层字典嵌套取值
        if state =="open":
            print INFO.OKBLUE+"[*] "+host+ " tcp/"+port+" "+state+INFO.ENDC
        else:
            print INFO.WARNING+"[*] "+host+ " tcp/"+port+" "+state+INFO.ENDC
    except Exception,e:
        raise e


if __name__ == "__main__":
    parser = optparse.OptionParser("usage %prog -H  -p  or -p -")
    parser.add_option("-H", dest="Host", type="string", help="specify target host")
    parser.add_option("-P", dest="Port", type="string", help="specify target port[s] separated by "-""or ",")
    (options, args) = parser.parse_args()

    if options.Host ==None or options.Port==None:
        print parser.usage
        sys.exit()

    host = options.Host
    ports = options.Port
    print host,ports
    
    #如果是连续的端口
    if "-" in ports:
        ports_list = ports.split("-")
        for p in range(int(ports_list[0]),int(ports_list[1])+1):
           scanport(host, str(p))
           
    #其他的情况
    else:
        ports_list = ports.split(",")
        for p in ports_list:
            scanport(host, p)

上面的代码有点复杂,改良之后的代码如下:
优化结构

import nmap,argparse, sys
class INFO:
    HEADER = "33[95m"
    OKBLUE = "33[94m"
    OKGREEN = "33[92m"
    WARNING = "33[93m"
    ARNING = "33[93m"
    FAIL = "33[91m"
    ENDC = "33[0m"
    BOLD = "33[1m"
    UNDERLINE = "33[4m"
    



def scan_port(host, port):
    nm = nmap.PortScanner()
    try:
        result= nm.scan(host,port)
        print result
        state = result["scan"][host]["tcp"][int(port)]["state"]
        if state == "open":
            print INFO.OKBLUE+"[*] "+host+ " tcp/"+port+" "+state+INFO.ENDC
        else:
            print INFO.WARNING + "[*] " + host + " tcp/" + port + " " + state + INFO.ENDC
    except Exception,e:
        raise e

def get_args():
    parger = argparse.ArgumentParser(description="port scan script")
    parger.add_argument("-H", "--host", help="specify target host")
    parger.add_argument("-P", "--port", help="specify target port")
    args = parger.parse_args()
    print args
    if args.host == None:
        parger.error("host is required")
        sys.exit()
    if args.port == None:
        parger.error("host is required")
        sys.exit()
    else:
        return args

        
def main():
    args = get_args()
    if "-" in args.port:
        ports_list = args.port.split("-")
        for p in range(int(ports_list[0]),int(ports_list[1])+1):
            scan_port(args.host, str(p))
    else:
        ports_list = args.port.split(",")
        for p in ports_list:
            scan_port(args.host, p)  
    

if __name__ == "__main__":
    main()
           

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44375.html

相关文章

  • [Violent Python for Hackers]常用工具收集整理

    摘要:常用工具后面的三个工具无法安装,原因目前不知,后面用来时再寻找解决方法是一个非常强大的加密解密对于信息的加密和破解是需要经常用到的在下,安装报错后,需要安装一个的软件即可,详细看安装的报错信息在下,发现找不到此发现只在系统下才自带有此模 0:常用工具 #后面的三个工具无法安装,原因目前不知,后面用来时再寻找解决方法 pip install python-nmap python-blue...

    xiangchaobin 评论0 收藏0
  • #yyds干货盘点# web安全day14:扫描与报破

    摘要:干货盘点安全扫描与报破远程桌面可以发现这个设备被扫描出来,它就是我们的我们还可以尝试扫描它的操作系统。使用干货盘点安全扫描与报破远程桌面可以看到它运行的是或者或者,尽管不能完全一致,但是大致上为我们提供了准确的内容。 1、扫描技术扫描技术就是批量判断局域网中有哪些设备在线、这些设备的哪些服务开放。我们可以使用ping工具测...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动
阅读需要支付1元查看
<