美文网首页
python3 实践asyncio写的一个扫描机器tcp端口的脚

python3 实践asyncio写的一个扫描机器tcp端口的脚

作者: 逐风细雨 | 来源:发表于2019-11-07 10:57 被阅读0次

    最近在学习asyncio模块,写个利用携程扫描机器tcp端口的脚本实践一下。因为asyncio模块在windows下面进行网络连接是并发的限制是509(具体原因可以去百度),因此通过信号量限制并发数为500个携程扫描公司测试环境中的机器,耗时4分钟的样子,平均的tps约:65535/(4*60)=273
    环境信息:
    python版本:3.7.4,操作系统win10专业版

    代码如下:

    import asyncio
    import time
    
    async def scan_host(host,port,semaphore):
        result_list = []
        async with semaphore:
            try:
                reader, writer = await asyncio.open_connection(host, port)
                if writer:
                    result_list.append(port)
                    writer.close()
            except Exception as e:
                pass
        return result_list
    
    
    async def run_scan_host(host):
        print(time.asctime())
        #加入信号量用于限制并数
        semaphore = asyncio.Semaphore(500)
        task_list = []
        #扫描的端口范围1-65535
        range_list = [i for i in range(1,65536)]
        for port in range_list:
            task_list.append(asyncio.create_task(scan_host(host,port,semaphore)))
    
      #打印扫描到的端口
        for res in asyncio.as_completed(task_list):
            port = await res
            if port:
                print(port)
    
        print(time.asctime())
    
    #扫描的主机ip
    host = "192.168.49.68"
    asyncio.run(run_scan_host(host))
    

    相关文章

      网友评论

          本文标题:python3 实践asyncio写的一个扫描机器tcp端口的脚

          本文链接:https://www.haomeiwen.com/subject/zsvmbctx.html