# -*- coding: utf-8 -*-

__author__ = 'Phtih0n'

import threading, socket, sys, cmd, os, Queue

#扫描常用端口

PortList = [21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015]

#得到一个队列

def GetQueue(list):

PortQueue = Queue.Queue(65535)

for p in list:

PortQueue.put(p)

return PortQueue

#单IP扫描线程个数

nThread = 20

#线程锁

lock = threading.Lock()

#超时时间

Timeout = 3.0

#打开的端口列表

OpenPort = []

class ScanThread(threading.Thread):

def __init__(self, scanIP):

threading.Thread.__init__(self)

self.IP = scanIP

def Ping(self, Port):

global OpenPort, lock, Timeout

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.settimeout(Timeout)

address = (self.IP, Port)

try:

sock.connect(address)

except:

sock.close()

return False

sock.close()

OpenPort.append(Port)

if lock.acquire():

print "IP:%s  Port:%d" % (self.IP, Port)

lock.release()

return True

class ScanThreadSingle(ScanThread):

def __init__(self, scanIP, SingleQueue):

ScanThread.__init__(self, scanIP)

self.SingleQueue = SingleQueue

def run(self):

while not self.SingleQueue.empty():

p = self.SingleQueue.get()

self.Ping(p)

class ScanThreadMulti(ScanThread):

def __init__(self, scanIP, PortList):

ScanThread.__init__(self, scanIP)

self.List = PortList[:]

def run(self):

for p in self.List:

self.Ping(p)

class Shell(cmd.Cmd):

u'''Py Port Scanner 0.1 使用说明:

port [port..] 设置扫描的端口,用逗号分隔。

默认:21, 22, 23, 25, 80, 135, 137, 139, 445, 1433, 1502, 3306, 3389, 8080, 9015

example:port 21,23,25

example: port 1000..2000

example: port 80,443,1000..1500

scan [IP] 扫描某一IP地址

example: scan 192.168.1.5

search [IP begin]-[IP end] 扫描某一IP段

example: search 192.168.1.1-192.168.1.100

time [timeout] 设置超时时间,默认为3秒

example: time 5

cls 清楚屏幕内容

listport 打印端口列表

help 打开本帮助

'''

def __init__(self):

cmd.Cmd.__init__(self)

reload(sys)

sys.setdefaultencoding('utf-8')

self.prompt = "Port Scan >>"

self.intro = "Py Port Scanner 0.1"

def do_EOF(self, line):

return True

def do_help(self, line):

print self.__doc__

#设置端口

def do_port(self, line):

global PortList

PortList = []

ListTmp = line.split(',')

for port in ListTmp:

if port.find("..") < 0:

if not port.isdigit():

print "输入错误"

return False

PortList.append(int(port))

else:

RangeLst = port.split("..")

if not (RangeLst[0].isdigit() and RangeLst[1].isdigit()):

raise ValueError

exit()

for i in range(int(RangeLst[0]), int(RangeLst[1])):

PortList.append(i)

def do_scan(self, line):

global nThread, PortList

ThreadList = []

strIP = line

SingleQueue = GetQueue(PortList)

for i in range(0, nThread):

t = ScanThreadSingle(strIP, SingleQueue)

ThreadList.append(t)

for t in ThreadList:

t.start()

for t in ThreadList:

t.join()

def do_search(self, line):

global nThread, PortList

ThreadList = []

(BeginIP, EndIP) = line.split("-")

try:

socket.inet_aton(BeginIP)

socket.inet_aton(EndIP)

except:

print "输入错误"

return

IPRange = BeginIP[0:BeginIP.rfind('.')]

begin = BeginIP[BeginIP.rfind('.') + 1:]

end = EndIP[EndIP.rfind('.') + 1:]

for i in range(int(begin), int(end)):

strIP = "%s.%s" % (IPRange, i)

t = ScanThreadMulti(strIP, PortList)

ThreadList.append(t)

for t in ThreadList:

t.start()

for t in ThreadList:

t.join()

def do_listport(self, line):

global PortList

for p in PortList:

print p,

print '\n'

def do_time(self, line):

global Timeout

try:

Timeout = float(line)

except:

print u"参数错误"

def do_cls(self, line):

os.system("cls")

if '__main__' == __name__:

try:

os.system("cls")

shell = Shell()

shell.cmdloop()

except:

exit()

python端口扫描工具_Python实现的多线程端口扫描工具分享相关推荐

  1. python多程优化_Python 基本功: 13. 多线程运算提速

    小编在前两天开通了一个 Python 金融的专栏,顺便用 TuShare 下载了几只 A股的数据,有兴趣的小伙伴可以去看一下: 多多教Python:Python 金融: TuShare API 获取股 ...

  2. fish工具_Python程序员使用哪些开发工具

    Python程序员使用哪些开发工具?很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效 ...

  3. python 指定端口读取网站_Python实现局域网指定端口扫描

    Python实现局域网指定端口扫描 import socket import threading # 创建接收路由列表 routers = [] # 创建互斥锁 lock = threading.Lo ...

  4. python计算密集型任务_Python多进程和多线程测试比高低,只为证明谁是最快的“仔”

    目的 前面分别详细介绍了python的多进程和多线程,如果还没看前面文章的,请先看下之前的文章详解内容.有任何疑问请留言.那这里就不再对多线程和多进程的实现和用法再赘述了.那各位同学学习了python ...

  5. python压力测试模块_Python编写服务器压力测试小工具(仅供测试)

    想知道你的网站能支持多少用户一起访问吗?想知道你的网站在遭遇DDOS时能坚持多长时间嘛? 此文章只适用于Apache服务器,不适用于Nginx及其它服务器.考虑到Apache服务器的特性,一个连接对应 ...

  6. python并发与并行_python多进程,多线程分别是并行还是并发

    匿名用户 1级 2017-09-30 回答 展开全部 并发和并行 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话, ...

  7. python实现火车票查询工具_Python 实现一个火车票查询的工具

    原标题:Python 实现一个火车票查询的工具 作者 sexycoder 本文转载自简书,转载需授权 使用 python 实现一个查询火车票的小工具 主要功能: 输入出发车站,到达车站,时间,然后返回 ...

  8. python线程同步锁_Python实现的多线程同步与互斥锁功能示例

    本文实例讲述了Python实现的多线程同步与互斥锁功能.分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 import threading i ...

  9. python 线程 的类库_python类库32[多线程]

    一 python 多线程 因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且 ...

最新文章

  1. 批着DDD,实则是以数据库为中心------数据库已死
  2. 如何用excel制作xy曲线图_用Excel制作一个简易抽奖小程序,可一次抽取多人
  3. 《代码大全2》读书笔记(七)
  4. P4780-Phi的反函数【dfs】
  5. 学成在线--20.新增课程(最后完善)
  6. Java IO 系统
  7. 最适合说故事的插画素材,应用到UI设计中,感情线有了!
  8. 回顾2020年那些“领域第一本”,每一本都强烈推荐!
  9. SQLServer数据库文件压缩
  10. 【ES6】for of用法
  11. 计算机安全模式无法启动,电脑安全模式启动不了怎么办
  12. 【网页处理与文本分析】某电视剧弹幕信息情感分析
  13. 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极
  14. Mandelbrot 并行实现
  15. 【定语从句练习题】who、which
  16. 新书推荐 |《Redis 5设计与源码分析》
  17. 常见的网络安全攻击及防御技术概述
  18. web 端 打开qq对话框
  19. 这瓶普普通通的六神花露水_凭什么能卖到500块?
  20. python批量修改json文件

热门文章

  1. 多迪技术总监揭秘:PHP为什么是世界上最好的语言?
  2. Centos中不从skel目录里向其中复制任何文件错误的解决方法
  3. 网络安全初创公司SafeBreach获1500万美元A轮融资
  4. iOS:多线程技术GCD的使用
  5. CentOS6.5 搭建Open***服务器
  6. Prototype 字符串
  7. Linux查看主板的相关信息
  8. 有谁用过sendinput摸拟一个鼠标击键?
  9. [WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding...
  10. vba数组dim_NDArray — —一个基于Java的N-Dim数组工具包