Linux上手工修改报文——tcprereplay使用

为了实验,可能由于诸多原因无法产生相应的报文,需要人工合成报文。现在,以VXLAN报文的手工合成为例,说明报文的修改过程。

tcpreplay这个命令大家应该不陌生,在安装tcpreplay之后会附属的有tcprewrite这个工具可以对报文进行修改。

准备工作

  1. 由tcpdump或者wireshark捕获下来的.pacp报文。
  2. 通过sudo apt install tcpreplay下载tcpreplay系列工具。

tcpprep:

  1. tcpprep:根据pcap文件,生成一个cache文件。将pacp数据包分解为客户端和服务器端。这个cache文件中保存着tcprewrite怎么修改报文,以及tcpreplay怎么发送报文的规则。也就是说,在你捕获的报文中有很多报文,这些报文可能有不同的源和目的(可能单播,可能广播),现在要确立一套规则,来规定你所捕获的报文,怎么个分发流程。
  2. tcpprep只能使用少数可选的参数
    1. -d [0~5],开启“唠叨verbosity”模式,数字越高,越唠叨。
    2. -a [string],自动分发模式。需要提供线索hint来告诉tcpprep,怎么进行分发。
    3. -c [string],使用逗号进行分隔,来匹配报文中的src ip。IPv4下,如:-c 192.168.20.0/24。
    4. -r [string],指定一个有规律的表达来匹配src ip。(regular expression是什么意思???)
    5. -p ,表示依据tcp或者udp的目的端口对报文进行区分。
    6. -e,依据源MAC进行区分。

tcprewrite:

  1. 最少有两个参数:
    1. --infile = input.pcap。原始数据包。
    2. --outfile=output.pcap。修改之后的数据包。
  2. 修改木洞主机MAC和源MAC
    1. tcprewrite --enet-dmac=00:55:22:AF:C6:37 --enet-smac=00:44:66:FC:29:AF  --infile=input.pcap --outfile=output.pcap
  3. 802.1Q VLAN tag信息的处理:
    1. 删除:tcprewrite --enet-vlan=del --infile=input.pcap --outfile=otput.pcap
    2. 添加:tcprewrite --enet-vlan=add --enet-vlan-tag=40 --enet-vlan-cfi=1 --enetvlan-pri=4 --infile=input.pcap --outfile=output.pcap
  4. 修改IP地址:
    1. 将10.0.0.0/8网段的IP替换为172.16.0.0/12,将192.168.0.0/16网段IP替换为172.168.0.0/12。
      tcprewrite --pnat=10.0.0.0/8:172.16.0.0/12,192.168.0.0/16:172.168.0.0/12 --infile=input.pcap --outfile=output.pcap
    2. 随机生成源IP:
      tcprewrite --seed=423 --infile=input.pcap --outfile=output.pcap
    3. 修改端口号
      tcprewrite --portmap=80:8080,22:8022 --infile=input.pcap --outfile=output.pcap

tcpprep -p --pcap=vxlan_test1.pcap --cachefile=test1.cache

tcprewrite --cachefile=test1.cache --endpoints="192.168.252.18:192.168.252.17" --infile=vxlan_test1.pcap --outfile=testvx1.pcap

 

修改IP地址成果如下:(依次为修改前,修改后的截图)

Linux上手工修改报文——tcprereplay使用_第1张图片

Linux上手工修改报文——tcprereplay使用_第2张图片

可以看到,现在IP已经变了,(注意:我截取的报文是VXLAN报文,所以有两层IP头部,在使用tcprewrite进行操作的时候,修改的是外层的IP)

现在修改mac地址:

tcprewrite --enet-smac="a4:1f:72:4e:42:ac" --enet-dmac="00:25:90:0a:08:8e" --infile=testvx1.pcap --outfile=testvx2.pcap

之后的报文:

可以看到现在mac地址也改变啦。到现在为止,已经改好了报文,那么将这个报文发送给指定的网卡呢?也就是tcpreplay的用法

tcpreplay:

  1. -l参数表示循环多少次。也就是总共发多少个包。
  2. -p参数表示每秒发多少个包。也就是每秒发多少个包。那么耗费的时间=-l/-p
  3. -i表示从哪个网卡发。
  4. -o 表示一次发送一个包。

实际验证,通过tcprewrite对对报文进行修改,则会自动的修改检验和等其他参数。也就是说,只要你修改好了特定的参数,那么会自动生成合法的报文。

(之前还想着要通过vim进行报文修改,然后自己算检验和的我怎么那么蠢呢?)

在目前,在我的能力下,我所需要的百分之两百已经有人需要过并且完成了。

你可能感兴趣的:(Linux上手工修改报文——tcprereplay使用)