python端口扫描工具_Python实现的多线程端口扫描工具分享
# -*- 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实现的多线程端口扫描工具分享相关推荐
- python多程优化_Python 基本功: 13. 多线程运算提速
小编在前两天开通了一个 Python 金融的专栏,顺便用 TuShare 下载了几只 A股的数据,有兴趣的小伙伴可以去看一下: 多多教Python:Python 金融: TuShare API 获取股 ...
- fish工具_Python程序员使用哪些开发工具
Python程序员使用哪些开发工具?很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效 ...
- python 指定端口读取网站_Python实现局域网指定端口扫描
Python实现局域网指定端口扫描 import socket import threading # 创建接收路由列表 routers = [] # 创建互斥锁 lock = threading.Lo ...
- python计算密集型任务_Python多进程和多线程测试比高低,只为证明谁是最快的“仔”
目的 前面分别详细介绍了python的多进程和多线程,如果还没看前面文章的,请先看下之前的文章详解内容.有任何疑问请留言.那这里就不再对多线程和多进程的实现和用法再赘述了.那各位同学学习了python ...
- python压力测试模块_Python编写服务器压力测试小工具(仅供测试)
想知道你的网站能支持多少用户一起访问吗?想知道你的网站在遭遇DDOS时能坚持多长时间嘛? 此文章只适用于Apache服务器,不适用于Nginx及其它服务器.考虑到Apache服务器的特性,一个连接对应 ...
- python并发与并行_python多进程,多线程分别是并行还是并发
匿名用户 1级 2017-09-30 回答 展开全部 并发和并行 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话, ...
- python实现火车票查询工具_Python 实现一个火车票查询的工具
原标题:Python 实现一个火车票查询的工具 作者 sexycoder 本文转载自简书,转载需授权 使用 python 实现一个查询火车票的小工具 主要功能: 输入出发车站,到达车站,时间,然后返回 ...
- python线程同步锁_Python实现的多线程同步与互斥锁功能示例
本文实例讲述了Python实现的多线程同步与互斥锁功能.分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 import threading i ...
- python 线程 的类库_python类库32[多线程]
一 python 多线程 因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且 ...
最新文章
- 批着DDD,实则是以数据库为中心------数据库已死
- 如何用excel制作xy曲线图_用Excel制作一个简易抽奖小程序,可一次抽取多人
- 《代码大全2》读书笔记(七)
- P4780-Phi的反函数【dfs】
- 学成在线--20.新增课程(最后完善)
- Java IO 系统
- 最适合说故事的插画素材,应用到UI设计中,感情线有了!
- 回顾2020年那些“领域第一本”,每一本都强烈推荐!
- SQLServer数据库文件压缩
- 【ES6】for of用法
- 计算机安全模式无法启动,电脑安全模式启动不了怎么办
- 【网页处理与文本分析】某电视剧弹幕信息情感分析
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极
- Mandelbrot 并行实现
- 【定语从句练习题】who、which
- 新书推荐 |《Redis 5设计与源码分析》
- 常见的网络安全攻击及防御技术概述
- web 端 打开qq对话框
- 这瓶普普通通的六神花露水_凭什么能卖到500块?
- python批量修改json文件
热门文章
- 多迪技术总监揭秘:PHP为什么是世界上最好的语言?
- Centos中不从skel目录里向其中复制任何文件错误的解决方法
- 网络安全初创公司SafeBreach获1500万美元A轮融资
- iOS:多线程技术GCD的使用
- CentOS6.5 搭建Open***服务器
- Prototype 字符串
- Linux查看主板的相关信息
- 有谁用过sendinput摸拟一个鼠标击键?
- [WCF安全系列]绑定、安全模式与客户端凭证类型:NetNamedPipeBinding、NetTcpBinding与NetMsmqBinding...
- vba数组dim_NDArray — —一个基于Java的N-Dim数组工具包