为了dump有用的数据,去除一些TCP协议握手的数据包,tcpdump有一些参数可以控制,过滤出push的数据包
1、tcpdump数据去除握手的数据包
TCP/IP协议的数据包有一字段TCP flags (URG,ACK,PSH,RST,SYN,FIN),每个字段各占一个字节,其中PSH字段如果为1,则是client发往Server端的数据包,在tcpdump工具中,tcp[13]代表flag的数据值
# Unskilled 32
# Attackers 16
# Pester 8
# Real 4
# Security 2
# Folks 1
因此,tcpdump -w online.pcap -s0 tcp and dst host 10.48.42.20 and port 1987 and 'tcp[13] & 8 != 0' and 'tcp[13] & 7 == 0' and 'tcp[13] & 4 == 0' and 'tcp[13] & 3 == 0' -vvv
通过该命令就能过滤掉一些握手的数据包,能够减少1/4的流量包
2、qps精度控制
假设要发送的qps为m,控制精度在ms,平均在毫秒以内
1、记录发送第一个数据包的当前时间:T
2、发送第N-1个数据包的实际发送完成时间是:T(N-1)
3、理论上开始发送N的时间是:T(N) = T + 1000/m * (N-1)
4、if T(N) > T(N-1):
time.sleep(T(N) - T(N-1))
send(data)
else:
send(data)