zoukankan      html  css  js  c++  java
  • tcpcopy用法

    目标:

    将线上服务lighttpd(8000端口)的流量引流到线下测试机

    一、测试机:

    tcpcopy-server,接收流量

    modprobe ip_queue
    iptables -L
    iptables -I OUTPUT -p tcp --sport 8000 -j QUEUE
    ./intercept -d -l intercept.log
    -d:后台
    -l:指定log

    二、线上:

    tcpcopy-client,复制流量

    ./tcpcopy -x 8000-10.46.43.14:8000 -d -n 1 -l tcpcopy.log
    -d:后台
    -l:指定log
    -n:流量复制的份数

    三、关闭:

    killall intercept
    killall tcpcopy
    iptables -F
    注意:
    当测试机打开
    iptables -I OUTPUT -p tcp --sport 8000 -j QUEUE
    将无法直接访问测试机的该服务,只能通过日志观察
     
    tcpcopy-0.9.10tcpcopy.tar
     
     
    抓包发现有意思的地方
    A:发起请求的机器:cq02-map-wpng03.cq02
    B:线上机器:cq01-map-lbsop-hbase00.cq01
    C:测试机器:cq01-map-lbsop-hbase01.cq01
    一:正常copy流量,三个机器和测试机的抓包图
    A机器:无和C交互。因为测试机器iptables -I OUTPUT -p tcp --sport 8000 -j QUEUE 把出的流量屏蔽了(放入queue,intercept去捕获,发给B的tcpcopy进程)
     
    B机器:有自己和C的交互,也有假A机器和测试机的交互(伪装的,否则本机怎么会抓到来源和目的都不是自己的机器呢,说明肯定实际是过了本机网卡,不过把协议头里的ip改了);每个发给C的请求都有两份,两份的seq完全一样,但是所有包的ack不一样(ack不一样是因为ack需要响应C发的,在测试机发的seq上加1,否则如果照抄自己回复给真A的,会露馅)
     
    C机器:有假A发给我的包(伪装的,其实是B机器发的),但没有回复出任何的包(因为iptables封了)。
     
    二:去掉C机器iptables的封禁
    A机器:有C机器发给A的第二次握手,和A发给C的复位包(第二次握手莫名奇妙,A并没有发给C第一次握手)
    B机器:有真A发给B的所有正常包;有假A发给C的第一次握手包。第二次握手没有,因为刚才C收到假A第一次握手,回第二次握手给真A(C无法区分真假),真A莫名奇妙,把这次请求复位了。假A也就没法干活了。还有假A发给C的复位确认包(133s后)
    C机器:有假A发来的第一次握手,会给真A的第二次握手,真A发来的复位包,假A发来的复位响应包。
  • 相关阅读:
    Spring MVC 通过ajax实现前后台交互
    一些基础的东西总结一下
    如何在页面中引用自定义标签
    Linux(centos)系统下安装fastdfs安装部署步骤,问题复现 并在java中集成测试demo
    Liunx下修改JVM内存大小
    在liunx下安装配置rabbitMQ详细教程
    Oracle创建用户、角色、授权、建表
    要做小程序的订阅推送 本篇 从小程序到后端!!!
    Thymeleaf入门入门入门入门入门入门入门入门入门入门入门
    git clone 解决Permission Denied (publickey)问题
  • 原文地址:https://www.cnblogs.com/zlingh/p/7753619.html
Copyright © 2011-2022 走看看