注意,这里讲述的是1.0系列的tcpcopy
首先请先了解1.0系列架构相关内容:
http://blog.csdn.net/wangbin579/article/details/8949315
http://blog.csdn.net/wangbin579/article/details/8950282
了解了原理后,我们来讲解一下如何使用pcap接口来发送请求数据包
在在线系统,采用如下方式编译tcpcopy
./configure --pcap-send
代表采用pcap机制来发包,也即避开ip层,从数据链路层发包;
tcpcopy运行命令:
sudo ./tcpcopy -x 在线端口号@在线机器的出口网卡地址-测试机器的IP地址:测试机器的端口@下一跳的网卡地址 -s 运行intercept的机器IP地址 -o 出口网卡设备 -i 抓包网卡设备
举例:
sudo ./tcpcopy -x 80@00:13:21:B2:5E:42-122.55.176.148:18080@00:0F:1F:03:F2:E6 -s 10.110.12.162 -o eth1 -i eth0
意思是tcpcopy捕获在线80端口的应用请求到122.55.176.148机器的18080端口中去。
具体地,从网卡设备号eth0上面抓请求数据包,从00:13:21:B2:5E:42网卡地址(相应网卡设备号为eth1)发送出去,被复制的请求数据包的目的网卡地址为00:0F:1F:03:F2:E6(由于是同一网段内,下一跳的mac地址就是测试机器的mac地址),而intercept运行在10.110.12.162机器上,用来捕获路由过来的响应数据包。
注意事项:
1)在线机器的出口网卡地址不仅必须要和-o的出口网卡设备号相匹配,而且最好要和测试机器的IP地址所需要的网卡地址要匹配
2)在同一网段的情况下,测试机器的目的网卡地址最好要和测试机器的IP地址相匹配;不同网段情况下,目的mac地址为下一跳的地址(可以借助于tcpdump手段获取下一跳的mac地址,如果抓包文件没有显示,则只能采用其它手段来获取)
3)需要设置网卡地址的目的是为了解决数据包的路由问题,因为从数据链路层发送数据包,不再享受ip层提供的路由功能,只能自己显式制定
4)评论部分是针对0.9系列的评论,而非1.0系列
5)本文档更新时间为2014.8.25