Radamsa的TCP客户端/服务器模式用法
目录
需要的工具
模拟一个简单的HTTP服务器
模拟待测服务器
用tcpflow捕获8080端口的流量
生成正常流量样本(供tcpflow捕获)
开始使用Radamsa作为客户端
Radamsa作为客户端模式
总结
需要的工具
Radamsa: https://gitlab.com/akihe/radamsa
tcpflow:捕获端口流量
sudo apt install tcpflow
模拟一个简单的HTTP服务器
本次测试在kali-Linux虚拟机上进行
模拟待测服务器
# 保存为 simple_http_server.py
from http.server import BaseHTTPRequestHandler, HTTPServerclass Handler(BaseHTTPRequestHandler):def do_GET(self):self.send_response(200)self.end_headers()self.wfile.write(b"Hello, World!")if __name__ == "__main__":server = HTTPServer(("0.0.0.0", 8080), Handler)print("HTTP服务启动,监听 8080 端口...")server.serve_forever()
在第一个终端运行该脚本
python3 simple_http_server.py

用tcpflow捕获8080端口的流量
打开第二个终端,最好创建一个专门的目录
sudo tcpflow -i lo port 8080 # -i lo:监听本地回环接口(适合本地测试)

此时tcpflow正在记录客户端与服务端的通信
生成正常流量样本(供tcpflow捕获)
打开第三个终端,用curl发送正常HTTP请求到服务端,来让tcpflow捕获
curl http://127.0.0.1:8080 # 发送一个简单的GET请求

这时候,tcpflow终端会显示捕获到的流量,当前目录会生成一个127.000.000.001.53554-127.000.000.001.08080 的文件(文件名可能不同,取决于客户端端口),该文件就是包含正常 HTTP 请求的原始样本。
我们这时候去查看样本内容

第二个
cat 127.000.000.001.34090-127.000.000.001.08080

开始使用Radamsa作为客户端
基于样本,用Radamsa生成变异数据,并通过TCP发送给服务端(8080端口),测试崩溃
# -o 127.0.0.1:8080:作为TCP客户端,连接服务端
# -n inf:无限生成变异数据(按Ctrl+C终止)
# 最后指定样本文件(tcpflow捕获的流量文件)
radamsa -o 127.0.0.1:8080 -n inf 127.000.000.001.34090-127.000.000.001.08080


服务端开始报错
Radamsa作为客户端模式
现在让Radamsa作为TCP客户端,向连接的服务器发送变异数据
radamsa -o :9090 -n inf 127.000.000.001.34090-127.000.000.001.08080

再打开一个终端充当服务器
nc 127.0.0.1 9090
#或者其他服务器程序

(不知道怎么回事需要回车一次接受一次=-=)
总结
请大家务必规范行为,不触碰法律界限
- 流量捕获:
tcpflow记录正常网络通信,生成radamsa所需的样本文件。 - TCP 客户端模式:
radamsa -o 目标IP:端口向服务端发送变异流量,测试服务稳定性。 - TCP 服务器模式:
radamsa -o :端口向客户端发送变异流量,测试客户端兼容性。
这只是一个简单的测试,Radamsa工具还有待研究,欢迎各位来讨论!
