如何tcpreplay Socket数据?
背景
客户端连接服务端 接收数据 解析数据 入库
服务端(端口:8090) ==> 客户端
需求
本地想跑这个客户端应用 但是不能连线上的服务端 于是想能否在客户端上tcpdump来自服务端端口8090的数据 然后将dump的数据在本地tcpreplay一下 这样的话 客户端就能跑了
生产环境
服务端(8090) ==> 客户端(解析 入库)
本地环境
Mock server(8090) && tcp replay dump file ==> 客户端(解析 入库)
实验验证
tcpdump数据
本地起了个Server 端口8090 每隔1秒往客户端发送数据: 当前时间戳
同时起了个Client 连接端口8090 接收服务端传过来的数据 然后打印一下
# dump源端口是8090的数据 捕捉10条数据
➜ ~ sudo tcpdump -i lo0 -nn -s0 -v src port 8090 -c 10 -w test.pcap
# 查看捕捉的数据 都是服务端发给客户端的数据
➜ ~ tcpdump -r test.pcap
11:13:24.772928 IP localhost.8090 > localhost.50969: Flags [P.], seq 3586243504:3586243518, ack 1284618522, win 6379, options [nop,nop,TS val 741399489 ecr 741398485], length 14
11:13:25.775746 IP localhost.8090 > localhost.50969: Flags [P.], seq 14:28, ack 1, win 6379, options [nop,nop,TS val 741400491 ecr 741399489], length 14
...
Replay dump file
现在有了dump数据 怎么把上一步捕捉的数据 发给客户端呢
- 启动一个Mock Server 什么都不做 仅仅监听8090端口
INFO: server listening on localhost:8090 (xSocket 2.8.15)
- 启动客户端连接Mock Server(8090端口)
➜ ~ lsof -i:8090
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Shadowsoc 1097 zhugw 5u IPv4 0xe7dccacf94a472b5 0t0 TCP *:8090 (LISTEN)
java 34607 zhugw 40u IPv6 0xe7dccacfb3a69df5 0t0 TCP localhost:8090 (LISTEN)
java 34607 zhugw 49u IPv6 0xe7dccacfb3a6a975 0t0 TCP localhost:8090->localhost:52286 (ESTABLISHED)
java 34610 zhugw 45u IPv6 0xe7dccacfb3a6c635 0t0 TCP localhost:52286->localhost:8090 (ESTABLISHED) replay 上一步的dump file
➜ ~ sudo tcpreplay -ilo0 test.pcap
Warning: Unable to process unsupported DLT type: BSD loopback (0x0)Actual: 10 packets (700 bytes) sent in 4.01 seconds
Rated: 174.5 Bps, 0.001 Mbps, 2.49 pps
Statistics for network device: lo0Successful packets: 10 Failed packets: 0 Truncated packets: 0 Retried packets (ENOBUFS): 0 Retried packets (EAGAIN): 0
但是客户端并没接收到数据 这是什么原因呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论