OUT OF DATE 数据已过期,仅供参考。
新测算正在路上
单位ns
函数 | 10万次耗时(ns) | RASP部署后 10万次耗时(ns) | 单次耗时增加(ns) |
eval | 420657664 | 4182479403 | 37618.21739 |
exec | 476141113 | 4270316348 | 37941.75235 |
open | 964069073 | 3136696119 | 21726.27046 |
函数 | 1000次耗时(ns) | RASP部署后 1000次耗时(ns) | 单次耗时增加(ns) |
os.system | 16474522181 | 18780354989 | 2305832.808 |
os.popen | 2673084314 | 3271188191 | 598103.877 |
os.spawnv | 1912338997 | 38530645339 | 1940725.536 |
函数 | 10000次耗时(ns) | RASP部署后 10000次耗时(ns) | 单次耗时增加(ns) |
socket.write | 80.82350815599999 | 88.31086746599999 | 0.007487359310000002 |
urllib.request.urlopen | 14046693797 | 32928861551 | 1888216.7754 |
requests.delete | 16755691027 | 17882416779 | 112672.5752 |
requests.get | 23120288591 | 24186248660 | 106596.0069 |
requests.head | 17150316595 | 18258220484 | 110790.3889 |
requests.options | 16314505056 | 17840175898 | 152567.0842 |
requests.patch | 16778217062 | 18071625952 | 129340.889 |
requests.post | 17056531938 | 17959836641 | 90330.4703 |
requests.put | 16728765026 | 17770903809 | 104213.8783 |
requests.reqeust | 23003279880 | 24134463809 | 113118.3929 |
import time
import timeit
class Builtins:
# avoid timeit using exec
@staticmethod
def bench_eval():
st = time.perf_counter_ns()
for i in range(100000):
eval("1024*1024*{}".format(i), globals(), {})
et = time.perf_counter_ns()
return et - st
@staticmethod
def bench_open():
st = time.perf_counter_ns()
for i in range(100000):
open("/etc/passwd").close()
et = time.perf_counter_ns()
return et - st
@staticmethod
def bench_exec():
st = time.perf_counter_ns()
for i in range(100000):
exec("1024*1024*{}".format(i), globals(), {})
et = time.perf_counter_ns()
return et - st
class Requests():
@staticmethod
def bench_get():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.get('http://localhost/')",
number=10000,
)
@staticmethod
def bench_post():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.post('http://localhost/')",
number=10000,
)
@staticmethod
def bench_put():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.put('http://localhost/')",
number=10000,
)
@staticmethod
def bench_head():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.head('http://localhost/')",
number=10000,
)
@staticmethod
def bench_delete():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.delete('http://localhost/')",
number=10000,
)
@staticmethod
def bench_options():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.options('http://localhost/')",
number=10000,
)
@staticmethod
def bench_patch():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.patch('http://localhost/')",
number=10000,
)
@staticmethod
def bench_reqeust():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import requests",
stmt="requests.request('GET', 'http://localhost/')",
number=10000,
)
class Os:
@staticmethod
def bench_system():
return timeit.timeit(timer=time.perf_counter_ns,
setup='import os', stmt='os.system("w > /dev/null")', number=1000
)
@staticmethod
def bench_popen():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import os",
stmt="os.popen('w > /dev/null')", number=1000)
@staticmethod
def bench_spawnv():
return timeit.timeit(timer=time.perf_counter_ns,
setup="import os",
stmt='os.spawnv(os.P_WAIT, "/bin/w", [">", "/dev/null"])',
number=1000)
def setup_rasp(iast=False):
import rasp
rasp.setup_var(iast, False)
rasp.setup_client()
rasp.hook()
if __name__ == "__main__":
# print(Builtins.bench_eval())
# os
import sys
point = sys.argv[1]
if point == "os":
raw_os_system = Os.bench_system()
raw_os_popen = Os.bench_popen()
raw_os_spawnv = Os.bench_spawnv()
setup_rasp()
rasp_os_system = Os.bench_system()
rasp_os_popen = Os.bench_popen()
rasp_os_spawnv = Os.bench_spawnv()
print("os.system: ", raw_os_system, rasp_os_system,
(rasp_os_system-raw_os_system)/1000)
print("os.popen: ", raw_os_popen, rasp_os_popen,
(rasp_os_popen-raw_os_popen)/1000)
print("os.spawnv: ", raw_os_spawnv, rasp_os_spawnv,
(rasp_os_spawnv-raw_os_spawnv)/1000)
if point == "builtin":
raw_eval = Builtins.bench_eval()
raw_exec = Builtins.bench_exec()
raw_open = Builtins.bench_open()
setup_rasp()
rasp_eval = Builtins.bench_eval()
rasp_exec = Builtins.bench_exec()
rasp_open = Builtins.bench_open()
print("eval:", raw_eval, rasp_eval, (rasp_eval-raw_eval)/100000)
print("exec:", raw_exec, rasp_exec, (rasp_exec-raw_exec)/100000)
print("open:", raw_open, rasp_open, (rasp_open-raw_open)/100000)
if point == "requests":
requests_bench = [func for func in dir(
Requests) if func.startswith("bench")]
print(requests_bench)
requests_res = {}
for func in requests_bench:
res = getattr(Requests, func)()
print(res)
requests_res["raw_{}".format(func)] = res
setup_rasp(iast=True)
for func in requests_bench:
res = getattr(Requests, func)()
print(res)
requests_res["rasp_{}".format(func)] = res
for func in requests_bench:
raw = requests_res.get("raw_{}".format(func))
rasp = requests_res.get("rasp_{}".format(func))
print("requests.{}:".format(
func[6:]), raw, rasp, (rasp-raw)/10000)