zoukankan      html  css  js  c++  java
  • Python脚本写端口扫描器(socket,python-nmap)

    目录

    Socket模块编写

    扫描给定主机是否开放了指定的端口

    python-nmap模块编写 

    扫描给定ip或给定网段内指定端口是否开放


    一个用python写的简单的端口扫描器,python环境为 3.7.0,windows系统

    Socket模块编写

    扫描给定主机是否开放了指定的端口

    TCP连接扫描是利用TCP的三次握手来确定主机的端口是否开放。确定主机端口开放之后,给端口发送消息,接收端口返回的消息,然后判断该端口运行的服务。

    使用时,-H 参数可以提供主机的域名或者ip地址,-p/-P 写要扫描的端口,多个端口用逗号分隔

    # -*- coding: utf-8 -*-
    """
    Created on Sat Nov  3 16:44:28 2018
    @author: 小谢
    """
    import optparse
    from socket import *
    import threading
    threadLock=threading.Lock()    #实例化threadLock对象
    def connScan(Host,Port):
        try:
            conn=socket(AF_INET,SOCK_STREAM)
            conn.connect((Host,Port))
            conn.send('test message'.encode("utf-8")) #发送测试信息给端口
            results=conn.recv(100)                    #接收主机返回的信息
            threadLock.acquire()                      #加锁
            print('[+]%d/tcp open'% Port)
            print('[+] '+results.decode("utf-8"))
            conn.close()
        except Exception as e:
            threadLock.acquire()
            print(e)
            print('[-]%d/tcp closed'% Port)
        finally:
            threadLock.release()           #释放锁
            conn.close()
    def portScan(Host,Ports):
        try:
            IP=gethostbyname(Host)          ##获得对应主机的ip地址
        except:
            print("[-] Cannot resolve '%s':Unknown host" %Host)
            return
        try:
            Name=gethostbyaddr(Host)     ##获得ip对应主机的信息
            print ("
    [+] Scan Results for:"+Name[0])
        except:
            print ("
    [+] Scan Results for:"+IP)
        setdefaulttimeout(1)
        for Port in Ports:
            print ("Scanning port "+Port)
            connScan(Host,int(Port))
    def main():
        usage="usage %prog -H <target host> -p/-P <target ports>"
        parser=optparse.OptionParser(usage)  #创建对象实例
        parser.add_option('-H',dest='Host',type='string',help='target host')   ##需要的命令行参数
        parser.add_option('-P','-p',dest='Ports',type='string',help='target ports')
        (options,args)=parser.parse_args()
        Host=options.Host
        Ports=str(options.Ports).split(',')
        if (Host==None)|(Ports==None):         ##如果主机和端口都是空的话
            print(parser.usage)
            exit(0)
        portScan(Host,Ports)
    if __name__=='__main__':
        main()

    python-nmap模块编写 

    我们还可以通过调用nmap进行端口扫描。

    扫描给定ip或给定网段内指定端口是否开放

    -H 参数可以扫描一个ip地址也可以扫描一个网段,-p 只能指定一个端口

    # -*- coding: utf-8 -*-
    """
    Created on Thu Nov  8 14:26:15 2018
    @author: 小谢
    """
    import nmap
    import optparse
    
    def Test(Hosts,port):
        nm=nmap.PortScanner()
        nm.scan(Hosts,port)
        port_int=int(port)                            #将端口从字符串转化为int类型的
        for t in nm.all_hosts():
            if nm[t].has_tcp(port_int):                #如果445端口提供了TCP协议
                state=nm[t]['tcp'][port_int]['state']  #判断该TCP 445 端口的状态
                if state=='open':
                    print ('[+]Found Target Host:'+t)
        return
    def main():
        usage="usage %prog -H <target host> -p/-P <target port>"
        parser=optparse.OptionParser(usage)  #创建对象实例
        parser.add_option('-H',dest='Host',type='string',help='target host')   ##需要的命令行参数
        parser.add_option('-P','-p',dest='Port',type='string',help='target ports')
        (options,args)=parser.parse_args()
        Hosts=options.Host
        Port=options.Port
        if (Hosts==None)|(Port==None):         #如果主机和端口都是空的话
            print(parser.usage)
            exit(0)                           #退出
        else:
            Test(Hosts,Port)
    if __name__=='__main__':
        main()

    相关知识点:Python中的optparse模块的使用

                         Python中的socket网络模块 

  • 相关阅读:
    Calendar类的应用
    使用Date和SimpleDateFormat类表示时间
    java中基本类型和字符串类型的转换
    java中的包装类
    java中的字符
    List的增删改插
    异常总结
    java中的异常链
    java中的异常抛出以及自定义异常
    spring mvc异常统一处理常见的有3种方式:
  • 原文地址:https://www.cnblogs.com/csnd/p/11807828.html
Copyright © 2011-2022 走看看