用法摘要:
★tcpdump指定接口抓包的话,可以直接拿tcpreplay回放;
★tcpdump -i any抓的包,需要用tcprewrite重写dlt格式:
#tcprewrite --dlt=enet -i dump_any.cap -o enet_h.cap
注:tcpdump -i any 抓的包的dlt格式是LINUX_SLL,在wireshark上看,多2个FF字节,ethernet头显示为“Linux cooked Capture”,包直接重放的话,会变成0xFFFF协议,而不是0x0800协议。tcprewrite可以转换dlt格式LINUX_SLL==>EN10MB
★tcpreplay默认是按照抓包的速度重放,指定-x(倍数) -p(pps) -M(mbps) -t(最快)参数后,改变重放的速度。
★2.x版本的tcpreplay可以直接修改包;
3.x版本的tcpreplay如果需要修改报文,需要先用tcprewrite改,再用tcpreplay放。
★tcpreplay的选项顺序是必须把option写前面,把pcap_file(s)写最后的,否则参数会不生效,却没有报错信息。
★mac广播:将dmac改为ff:ff:ff:ff:ff:ff
★wireshark提取包:
先filter出想要提取的包,然后“另存为”,选择“displayed”,这样就可以将filter出的包另存为一个文件了。
★tcprewrite重写dlt格式DLT_LINUX_SLL==>enet时出现错误:"DLT_LINUX_SLL pcap's must contain only ethernet packets",解决patch:
Index: src/tcpedit/plugins/dlt_linuxsll/linuxsll.c
===================================================================
--- src/tcpedit/plugins/dlt_linuxsll/linuxsll.c (revision 2455)
+++ src/tcpedit/plugins/dlt_linuxsll/linuxsll.c (working copy)
@@ -197,9 +197,9 @@
if (ntohs(linux_sll->type) == ARPHRD_ETHER) { /* ethernet */
memcpy(&(ctx->srcaddr), linux_sll->address, ETHER_ADDR_LEN);
- } else {
+/* } else {
tcpedit_seterr(ctx->tcpedit, "%s", "DLT_LINUX_SLL pcap's must contain only ethernet packets");
- return TCPEDIT_ERROR;
+ return TCPEDIT_ERROR; */
}
return TCPEDIT_OK; /* success */
参考:maillist:
参考资料
tcpreplay官网:
Tcpreplay wiki的FAQ:
一个典型的使用方法:
用tcpreplay对网络程序进行压力测试
libpcap:
libnet-dev:(libnet后期叫libnet-dev)
阅读(11512) | 评论(0) | 转发(0) |