**
通用:多线程平均读取列表,划分占比
适用:自定义按照参数输入域名、端口、参数,协议,进行自定义请求get、post方式,获取返回值。
使用模块:os、sys、re、datetime、threading、from time import sleep,ctime、requests**
参数解析:
- ag 协议(输入http、https等)
- ip 域名(后接endinput结尾,方便处理自定义输入),支持单个ip输入,支持单个域名输入,支持ip的B段,C段解析,支持域名解析。 (IPB、IPC段存在算法问题,需要使用到python的IP裤,来对输入的类似哦B、C段IP进行解析,将解析过后的进行get,post方式进行传输。)
- url 域名子级(按输入作为域名子级)
- m 请求方式(get or post )如若get返回405 or 404,可切换到post试
- tag 判断接口返回值中是否存在输入的值
- t 开启的线程数量,计算每个线程分配url。
以下为测试api接口:
测试1:https://api.github.com/users
python send_packet.py -ag https -ip api.github.comendinput -port “”
-url users -param “” -m get -timeout 10 -tag “123” -t 2
测试2:https://www.wanandroid.com/article/list/0/json python
send_packet.py -ag https -ip www.wanandroid.comendinput -port “” -url
article/list/0/json -param “” -m get -timeout 10 -tag “123” -t 2
import datetime
import sys
import re
import threading
from time import sleep,ctime
import requests
class myThread(threading.Thread):
"""docstring for myThread"""
def __init__(self, threadID, name, s, e, data):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.s = s
self.e = e
self.data = data
def run(self):
print("Starting" + self.name + ctime())
#获得锁,成功获得锁定后返回True
#可选timeout参数,如果不填写则一直阻塞到获取锁
#否则超时后返回False
threadLock.acquire()
#线程需要执行的方法
printGetPost(self.s,self.e,self.name,self.data)
# 释放锁
threadLock.release()
def printGetPost(s,e,name,data):
try:
s = int(s)
e = int(e)
print(s)
print(e)
for i in range(s,e):
#获取请求体
url = data["ip_list"][i]
print(url)
#定义参数
params = ""
#获取超时时间
timeout = int(data["timeout"])
#获取请求方式
mean = data["mean"]
try:
temp = data["ip_list"][i].split("?")[-1].split("&")
for v in range(0,len(temp)):
temp[v] = temp[v].split("=")
except Exception as e:
pass
print(eval(str(temp)))
time_stamp = datetime.datetime.now().timestamp()
temp_ip_filename = str(data["ip_list"][i].split("//")