基於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()
測試:
相關文章
- java編寫一個埠掃描器Java
- 1-編寫一個埠掃描器
- 最簡單的編寫基於執行緒的程式碼的方法之一:派生執行緒類(轉)執行緒
- 基於python的多執行緒暴破指令碼Python執行緒指令碼
- 用BCB寫一個最簡單的多執行緒 (轉)執行緒
- 掃描整個網段的多執行緒程式(轉)執行緒
- 請教一個多執行緒編寫的題!執行緒
- 通過shell指令碼防止埠掃描指令碼
- python掃描埠Python
- python 埠掃描Python
- 多執行緒掃描資料夾耗時方法分析執行緒
- POSTMAN 單執行緒簡易刷星指令碼Postman執行緒指令碼
- python編寫的簡單的mysql巡檢指令碼PythonMySql指令碼
- Python簡單實現多執行緒例子Python執行緒
- 編寫執行R指令碼指令碼
- 關於程式與執行緒的一個簡單解釋執行緒
- 基於MFC的編寫執行緒快速入門 (轉)執行緒
- 使用Python編寫一個多執行緒的12306搶票程式Python執行緒
- Python多執行緒併發的簡單測試Python執行緒
- wxWidgets簡單的多執行緒執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- Redis大key掃描Python指令碼RedisPython指令碼
- Python-FTP漏洞掃描指令碼PythonFTP指令碼
- python 多執行緒就這麼簡單(續)Python執行緒
- ObjC 多執行緒簡析(一)-多執行緒簡述和執行緒鎖的基本應用OBJ執行緒
- GCD 多執行緒安全 單寫多讀GC執行緒
- InsightScan:Python多執行緒Ping/埠掃描 + HTTP服務/APP 探測,可生成Hydra用的IP列表Python執行緒HTTPAPP
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 編寫多執行緒應用程式,模擬多個人通過一個山洞:執行緒
- 利用多執行緒寫一個賣票程式執行緒
- 自己寫的殺mysql執行緒的指令碼MySql執行緒指令碼
- OS開發基礎——多執行緒的簡單應用執行緒
- python多執行緒基礎Python執行緒
- Shell:如何寫一個多選選單的指令碼指令碼
- 關於 Python 多執行緒/多程式Python執行緒
- 程式與執行緒的一個簡單解釋執行緒
- Golang多執行緒簡單鬥地主Golang執行緒
- 多執行緒 -- 初學簡單例子執行緒單例