基於python編寫一個簡單的多執行緒埠掃描指令碼
基於python編寫一個簡單的多執行緒埠掃描指令碼
程式碼如下:
import threading
import queue
import socket
import optparse
import sys
#建立埠掃描類
class PortScaner(threading.Thread):
#需要傳入埠佇列,目標ip,探測超時資訊
def __init__(self,portqueue,ip,timeout=3):
threading.Thread.__init__(self)
self._portqueue = portqueue
self._ip = ip
self._timeout = timeout
def run(self):
while True:
#判斷埠列表是否為空
if self._portqueue.empty():
break
port = self._portqueue.get(timeout=0.5)
try:
#建立socket物件為sock,並設定其套接字家族和型別
'''socket.socket ( family ,type ,proto)
family: 套接字家族可以使 AF_UNIX 或者 AF_INET
type: 套接字型別,可以根據是面向連線的 SOCK_STREAM 還是非連線的 SOCK_DGRAM
protocol: 一般不填,預設為 0
'''
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#sock.settimeout(timeout):設定套接字操作的超時期,timeout是一個浮點數,單位是秒。值為None表示沒有超時期。一般,超時期應該在剛建立套接字時設定,因為它們可能用於連線的操作(如connect())
sock.settimeout(self._timeout)
#sock.connect_ex() :主動初始化TCP伺服器連線;一般address的格式為元組(hostname,port),如果連線出錯,返回出錯碼。
result_code = sock.connect_ex((self._ip, port))
#若埠開發,返回0
if result_code == 0:
sys.stdout.write("[%d]open \n" % port)
except Exception as e:
print(e)
finally:
sock.close()
#定義命令標準函式
def get_information():
#建立命令解析模組
parser = optparse.OptionParser()
# ip 引數 -i
parser.add_option('-i', '--ip', dest='targetip', default='127.0.0.1', type='string', help='target IP')
# 埠引數 -p
parser.add_option('-p', '--port', dest='port', default='80', type='string', help='scan_port')
# 執行緒引數 -t
parser.add_option('-t', '--thread', dest='threadNum', default='100', type='int', help='thread number')
(options, args) = parser.parse_args()
StartScan(options.targetip, options.port, options.threadNum)
#定義掃描函式
def StartScan(targetip,port,threadNum):
#埠列表
portList = []
portNumb = port
#判斷單埠還是範圍埠
'''
eg:192.168.1.1-100
用split函式通過"-"將ip段劃分為192.168.1.1和100,再將192.168.1.1進行分割,取出最後一位數字與100組成int型數字範圍
for迴圈遍歷
'''
if '-' in port:
for i in range(int(port.split('-')[0]),int(port.split('-')[1])+1):
portList.append(i)
else:
portList.append(int(port))
#目標ip地址
ip = targetip
#執行緒列表
threads = []
#執行緒數量
threadNumber = threadNum
#埠佇列
portQueue = queue.Queue()
#生成埠,加入埠佇列
for port in portList:
portQueue.put(port)
for t in range(threadNumber):
threads.append(PortScaner(portQueue,ip,timeout =3))
#啟動執行緒
for thread in threads:
thread.start()
#阻塞執行緒
for thread in threads:
thread.join()
#主函式
if __name__ =='__main__':
get_information()
測試:
相關文章
- 使用Python編寫一個多執行緒的12306搶票程式Python執行緒
- 通過shell指令碼防止埠掃描指令碼
- python掃描埠Python
- InsightScan:Python多執行緒Ping/埠掃描 + HTTP服務/APP 探測,可生成Hydra用的IP列表Python執行緒HTTPAPP
- Python簡單實現多執行緒例子Python執行緒
- POSTMAN 單執行緒簡易刷星指令碼Postman執行緒指令碼
- 多執行緒掃描資料夾耗時方法分析執行緒
- Redis大key掃描Python指令碼RedisPython指令碼
- Python-FTP漏洞掃描指令碼PythonFTP指令碼
- 關於程式與執行緒的一個簡單解釋執行緒
- python多執行緒基礎Python執行緒
- ObjC 多執行緒簡析(一)-多執行緒簡述和執行緒鎖的基本應用OBJ執行緒
- 自己寫的殺mysql執行緒的指令碼MySql執行緒指令碼
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- Shell:如何寫一個多選選單的指令碼指令碼
- python多執行緒、鎖、event事件機制的簡單使用Python執行緒事件
- redis的bigkey掃描指令碼Redis指令碼
- 【Python】用Python實現一個簡單的執行緒池模型效果程式碼分析講解Python執行緒模型
- OS開發基礎——多執行緒的簡單應用執行緒
- Python編寫一個簡單計算器Python
- 代理ip 多執行緒 python寫法執行緒Python
- Android 基於zxing的二維碼掃描功能的簡單實現及優化Android優化
- Golang多執行緒簡單鬥地主Golang執行緒
- python寫的指令碼在kail Linux 執行Python指令碼AILinux
- 一個簡單的BypassUAC編寫
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- Java多執行緒之Executor框架和手寫簡易的執行緒池Java執行緒框架
- 簡單的多執行緒複製檔案執行緒
- 埠掃描器
- 【從0開始編寫webserver·基礎篇#01】為什麼需要執行緒池?寫一個執行緒池吧WebServer執行緒
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- 利用 Powershell 編寫簡單的瀏覽器指令碼瀏覽器指令碼
- 多執行緒系列(1),多執行緒基礎執行緒
- java多執行緒 wait() notify()簡單使用Java執行緒AI
- Java多執行緒就是這麼簡單Java執行緒
- 多執行緒下指令重排與DCL單列模式執行緒模式
- [譯] 多執行緒簡介:一步一步來接近多執行緒的世界執行緒