昨晚今晚写了两晚,总算把Py Port Scanner 写完了,姑且称之为0.1版本,算是一个Python多线程端口扫描工具。
水平有限,实话中间有一些困惑和不解的地方,代码可能也写的比较乱。有些问题并未找到很好的解决方法,还望大家谅解。速度大家自己试验,我感觉还行。
送上效果图两份,分别是扫单IP和扫IP段:
源码:
# -*- 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("..")
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适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具