tcpcopy使用,看这一篇就够了!!!!(以0.9.10说明)

本文详细介绍了tcpcopy的使用步骤,包括服务的启动和退出,以及tcpcopy的工作原理。首先,需要在源和目标机器上安装必要的工具并配置iptables规则。tcpcopy能从线上服务器抓取请求,修改属性并发送到测试服务器。测试服务器通过intercept进程处理响应,只返回IP头以保持TCP连接。整个过程适用于复制如nginx等服务的流量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 目录

     

    准备工作

    服务启动(原则:先线下,后线上)

    服务退出(原则:先线上,后线下)

    tcpcopy原理解释

    tcpcopy工作流程(以访问nginx为例,访问其他服务程序同理)


  • 准备工作

  • 服务启动(原则:先线下,后线上)

    • 线下机器:

      • cd /home/work/opbin/tcpcopy-0.9.10 
      • modprobe ip_queue
        •  载入ip_queue模块,用于处理线下服务的响应包,内核大于3.5时不需要该操作
      • iptables -L
        • 查看当前的iptables规则
      • iptables -I OUTPUT -p tcp —sport $port -j QUEUE
        • sport后需要填写需被导入线上流量程序的port(就是线下服务监听的端口)
        • 命令含义解释:添加一项iptables的规则,将端口$port的tcp响应包跳转到队列中
        • iptables的相关基础知识请查看:https://www.cnblogs.com/ilinuxer/p/6364064.html
      • nohup ./intercept  -x 127.0.0.1& 
        • -x后面表示允许回包 (如果机器上已有启动的intercept服务可以不用再启动intercept,再启动的服务会出错退出。)
    • 线上机器:
      • cd /home/work/opbin/tcpcopy-0.9.10
      • chmod +x *
      • nohup ./tcpcopy -x $port1-$ip:$port2 & 
        •  port1为需要copy的本机端口,port2为需要发往的机器ip和端口
        • 其他可选参数:-r 20 流量减少 -n 2 流量扩大
        • port1与后面的信息用『-』分隔
        • 多个机器之间用『,』分隔
  • 服务退出(原则:先线上,后线下)

    • 线上机器:

      • killall -9 tcpcopy
    • 线下机器:
      • killall -9 intercept
      • iptables -D OUTPUT 1
      • iptables -L

  • tcpcopy原理解释

    • tcpcopy可以从线上服务器的IP层抓取在线请求的数据包,修改相关属性,利用raw socket output技术(packet injection 技术之一)将其发送给测试服务器进行测试。

    • 发送到测试服务器的数据包会在TCP/IP协议栈被识别,其中带有payload(tcp data)的数据包最终进入到测试服务器的上层应用(如nginx),上层应用在处理完请求之后,将响应传递给测试服务器的TCP/IP协议栈。

    • 在测试服务器上启用ip_queue模块,并使用iptables在IP层将响应结果数据包发往QUEUE(ip_queue)。

    • 测试服务器上运行在用户空间的拦截程序(intercept进程),通过打开netlink的socket接受内核通过ip_queue所传递来的网络数据包(即上层应用的响应内容)进行裁定,将结果返回内核,进行出队列的操作。intercept进程默认会丢弃上层应用的响应内容,返回ip header,以释放tcp连接。

  • tcpcopy工作流程(以访问nginx为例,访问其他服务程序同理)

    • ① 一个访问到达线上前端机;

    • ② socket数据包在ip层被拷贝了一份传给tcpcopy进程;

    • ③ tcpcopy修改包的目的及源地址,发给目标测试机;

    • ④ 拷贝的包到达目标测试机;

    • ⑤ 目标测试机的nginx处理访问,并返回结果;

    • ⑥ 返回结果在ip层被截获、丢弃,由intercpet进程拷贝返回结果的ip header并返回;

    • ⑦ ip header被发送给线上前端机的tcpcopy进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值