Python 端口扫描(全连接扫描,多线程)

如果要计算扫描了多久的话,可以导入time模块,然后 程序开始运行的时间 减去 程序结束运行的时间 最后输出时间的差。

from socket import *
import threading      #导入线程相关模块
lock = threading.Lock()
openNum = 0
threads = []              #定义线程列表
def portScanner(host,port):
    global openNum
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((host,port))
        lock.acquire()        #因为openNum是个全局变量,每个线程不能对openNum 同时操作,只有获得所的线程才可以操作 openNum
        openNum+=1
        print('[+] %d open' % port)
        lock.release()        #线程对全局变量openNum操作完成后,需要释放所,其他线程才可以继续修改全局变量openNum
        s.close()
    except:                     #如果端口没开,那么就直接pass,不执行其他输出操作。
        pass
def main():
    setdefaulttimeout(1)
    ports = [20, 21, 22, 23, 80, 111, 3306]     #定义要扫描的端口,也可以在for中使用range进行定义,看个人需求,例如 for p in range(1,1024): 
    for p in ports:
        t = threading.Thread(target=portScanner,args=('192.168.60.130',p))
        threads.append(t)
        t.start()
    for t in threads:        #等待线程列表中的所以线程的执行完毕
        t.join()
    print('[*] The scan is complete!')
    print('[*] A total of %d open port' % (openNum))
if __name__ == '__main__':
    main()

原文发布于微信公众号 - 编程坑太多(idig88)

原文发表时间:2018-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

SDN开发笔记(五):应用程序集成到ODL控制器

前言 继之前分享的几篇文章之后,这篇文章分享我开发odl应用程序过程当中如何将自己写的模块集成到odl控制器当中,这里假设我们已经搭建好开发环境,并且具备YAN...

41550
来自专栏Java帮帮-微信公众号-技术文章全总结

Linux常用命令

Linux常用命令 常用指令 ls   显示文件或目录 -l 列出文件详细信息l(list) -a ...

56560
来自专栏Rgc

redis权限认证及登录

64910
来自专栏Kevin-ZhangCG

Servlet+Tomcat总结

14330
来自专栏linux运维学习

linux学习第六十七篇:告警系统主脚本,告警系统配置文件,告警系统监控项目

告警系统主脚本 把shell脚本放到/usr/local/sbin/下 创建mon目录来存放告警系统脚本。在/mon目录分别创建bin,conf,log,mai...

347130
来自专栏C/C++基础

Linux下使用gdb调试core文件

当程序运行过程中出现Segmentation fault (core dumped)错误时,程序停止运行,并产生core文件。core文件是程序运行状态的内存映...

28430
来自专栏云计算与大数据

研发:Idea工具因为版本工具设置问题,导致全是红色

I have the current status of my files in the folders coloured red/brown. I tried...

15530
来自专栏专注研发

linux常用命令

     -a          列出当前目录下所有文件及目录,包括隐藏的a(all)

22810
来自专栏java一日一条

Java Socket 编程原理及教程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进...

11810
来自专栏24K纯开源

使用Qt installer framework制作安装包

一、介绍     使用Qt库开发的应用程序,一般有两种发布方式: (1)静态编译发布。这种方式使得程序在编译的时候会将Qt核心库全部编译到一个可执行文件中。其优...

35380

扫码关注云+社区

领取腾讯云代金券