tcprewrite使用方法
1. 简介
在Linux系统中分析和测试网络流量时,tcprewrite 是一个功能强大的工具,它允许你灵活地修改pcap文件中的数据包信息,从链路层到传输层以及应用层,甚至包括VLAN标签等。本篇文章基于Ubuntu系统,想写介绍了tcprewrite的安装以及它的基本使用方法和常见应用场景。
2. tcprewrite 安装
在Ubuntu系统上,安装tcprewrite最为便捷的方式是使用apt包管理器。
2.1更新软件包列表
首先,打开终端,确保你的系统软件包列表是最新的:
sudo apt update
2.2安装tcpreplay套件
执行以下命令进行安装:
sudo apt install tcpreplay
2.3 验证安装
安装完成后,可以通过检查tcprewrite的版本来确认安装是否成功:
$ tcprewrite -v
tcprewrite error: The infile option is required
tcprewrite (tcprewrite) - Rewrite the packets in a pcap file.
Usage: tcprewrite [ -<flag> [<val>] | --<name>[{=| }<val>] ]...-r, --portmap=str Rewrite TCP/UDP ports-s, --seed=num Randomize src/dst IPv4/v6 addresses w/ given seed-N, --pnat=str Rewrite IPv4/v6 addresses using pseudo-NAT-S, --srcipmap=str Rewrite source IPv4/v6 addresses using pseudo-NAT-D, --dstipmap=str Rewrite destination IPv4/v6 addresses using pseudo-NAT-e, --endpoints=str Rewrite IP addresses to be between two endpoints--tcp-sequence=num Change TCP Sequence (and ACK) numbers /w given seed-b, --skipbroadcast Skip rewriting broadcast/multicast IPv4/v6 addresses-C, --fixcsum Force recalculation of IPv4/TCP/UDP header checksums-m, --mtu=num Override default MTU length (1500 bytes)--mtu-trunc Truncate packets larger then specified MTU-E, --efcs Remove Ethernet checksums (FCS) from end of frames--ttl=str Modify the IPv4/v6 TTL/Hop Limit--tos=num Set the IPv4 TOS/DiffServ/ECN byte--tclass=num Set the IPv6 Traffic Class byte--flowlabel=num Set the IPv6 Flow Label-F, --fixlen=str Pad or truncate packet data to match header length--fuzz-seed=num Fuzz 1 in X packets. Edit bytes, length, or emulate packet drop--fuzz-factor=num Set the Fuzz 1 in X packet ratio (default 1 in 8 packets)--skipl2broadcast Skip rewriting broadcast/multicast Layer 2 addresses--dlt=str Override output DLT encapsulation--enet-dmac=str Override destination ethernet MAC addresses--enet-smac=str Override source ethernet MAC addresses--enet-subsmac=str Substitute MAC addresses--enet-mac-seed=num Randomize MAC addresses--enet-mac-seed-keep-bytes=num Randomize MAC addresses--enet-vlan=str Specify ethernet 802.1q VLAN tag mode--enet-vlan-tag=num Specify the new ethernet 802.1q VLAN tag value--enet-vlan-cfi=num Specify the ethernet 802.1q VLAN CFI value--enet-vlan-pri=num Specify the ethernet 802.1q VLAN priority--hdlc-control=num Specify HDLC control value--hdlc-address=num Specify HDLC address--user-dlt=num Set output file DLT type--user-dlink=str Rewrite Data-Link layer with user specified data-d, --dbug=num Enable debugging output-i, --infile=str Input pcap file to be processed-o, --outfile=str Output pcap file-c, --cachefile=str Split traffic via tcpprep cache file-v, --verbose Print decoded packets via tcpdump to STDOUT-A, --decode=str Arguments passed to tcpdump decoder--skip-soft-errors Skip writing packets with soft errors-V, --version Print version information-h, --less-help Display less usage information and exit-H, --help display extended usage information and exit-!, --more-help extended usage information passed thru pager--save-opts[=arg] save the option state to a config file--load-opts=str load options from a config fileOptions are specified by doubled hyphens and their name or by a single
hyphen and the flag character.Please send bug reports to: <tcpreplay-users@lists.sourceforge.net>
2.4 备选安装方案
如果你想体验最新的功能或者需要特定版本,也可以选择从源码编译安装。这通常涉及下载源码包,然后执行标准的./configure && make && sudo make install流程。不过对于大多数用户来说,使用apt安装已经足够。
3. 使用方法
tcprewrite 是 TCP 数据流重放工具集 Tcpreplay 中的一个重写数据包工具,主要用于重写pcap文件中的数据包头部信息 .
tcprewrite 的功能非常丰富,下面表格中列举了一些常用参数及其应用场景:
| 功能类别 | 常用参数 | 说明与示例 |
|---|---|---|
| 修改MAC地址 | --enet-smac / --enet-dmac | 修改源/目的MAC地址。示例:--enet-smac=00:11:22:33:44:55,00:66:77:88:99:00 (分别指定server和client的源MAC) |
| 修改IP地址 | --endpoints | 修改一对IP地址。示例:--endpoints=192.168.1.100:10.0.0.1 (将client IP改为192.168.1.100, server IP改为10.0.0.1) |
--srcipmap / --dstipmap | 分别修改源/目的IP地址映射。示例:--srcipmap=192.168.1.50:172.16.0.10 | |
--pnat | 不区分源目地进行IP映射。示例:--pnat=192.168.0.0/16:10.0.0.0/24 | |
| 修改端口号 | --portmap | 修改TCP/UDP端口。示例:--portmap=80:8080 (将80端口映射到8080) ,或--portmap=8000-8999:80 (将8000-8999端口范围映射到80端口) |
| VLAN操作 | --enet-vlan | 添加或删除VLAN标签。示例:--enet-vlan=add (添加) 或 --enet-vlan=del (删除) |
| 校验和 | --fixcsum | 强烈建议在修改3层或4层头部后使用,强制重新计算IP/TCP/UDP校验和,确保数据包有效。 |
4. 使用案例
4.1 替换udp端口号
tcprewrite对于端口的修改是不区分源端口和目标端口的,凡是出现的端口会一股脑地全部给你替换了
$ tcprewrite --portmap="1234:5678" -i 1234.pcap -o 5678.pcap
4.2 替换源ip地址
tcprewrite --srcipmap=192.168.1.2/12:10.10.10.1/24 --infile=input.pcap --outfile=output.pcap
4.3 替换目标ip地址
tcprewrite --dstipmap=192.168.1.2/12:10.10.10.1/24 --infile=input.pcap --outfile=output.pcap
