TSval是本端填写的时间戳,
TSecr是回显给对端的时间戳。
两端必须都分别在SYN包和SYN|ACK包中开启时间戳选项,时间戳功能才能生效。
1. tcpdump相关操作
1.1. 绑定相应的网络接口设备
tcpdump -i eth0
1.2. 通过端口抓包
tcpdump tcp port 9132
1.3. 通过目的端口抓包
tcpdump tcp dst port 9132
1.4. 通过协议抓包
tcpdump tcp -i eth0
1.5. 保存到抓包报文
tcpdump tcp -i eth0 -w ./log.cap
1.6. 抓取报文后隔指定的时间保存一次
tcpdump -i eth3 -s0 -G 60 -Z root -w %Y_%m%d_%H%M%S.pcap
这里解释下-G选项 后面接时间 单位为秒 本例中的时间为60秒
2. 执行tcpdump运行的脚本
2.1 由于ppp-gprs这种网络接口,只有在拨号成功的情况下才会生成网络设备,而tcpdump在执行时如果没有检测到设备会退出,所以添加如下的脚本进行网络设备判断,网络设备存在时就执行tcpdump。runTcpdump.sh默认执行的网络接口是eth0,如果要换成其它网络接口(如ppp0),只需在执行脚本时传递对应的网络接口参数即可,如./runTcpdump ppp0
#! /bin/sh
interface="eth0"
if [ $1 ]; then
interface=$1
fi
echo "select interface "${interface}
while true
do
#ifconfig -a | grep ${interface}
ifconfig | grep ${interface}
if [ $? == 0 ]; then
echo "start tcpdump "${interface}
#/mnt/ext/tcpdump -i ${interface} host 58.251.74.100 -w /mnt/data/ppp0.cap
#/mnt/ext/tcpdump -i ${interface} host 58.251.74.100 -w /mnt/data/tcpdump/ppp0.cap
#/mnt/ext/tcpdump -i ${interface} host 58.251.74.100 -G 20 -w /mnt/data/tcpdump/%Y-%m-%d_%H-%M-%S.cap
/mnt/ext/tcpdump -i ${interface} host 58.251.74.100 -G 20 -w /mnt/data/tcpdump/%Y-%m-%d_%H-%M-%S.cap
break
fi
#echo "ppp0 device was not fount!"
usleep 10000
done
2.2. 有些设备是动态生成的,而tcpdump在没有执行相应的接口设备时会默认选择第一个(我的就默认绑定了eth0),但是像第7这种设备(ppp0)是实时的,监听的设备会导致一些信息丢失,所以不能绑定接口,只能绑定协议或端口,另外在执行绑定前必须关闭所有的接口设备,这样在执行如下的命令时就会监听所有的接口
[root@mike /mnt/app]#/mnt/ext/tcpdump host 58.251.74.100 -w /mnt/data/tcpdump/gprs2.cap
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes0 packets captured
使用tcpdump -D查看接口设备,
使用tcpdump -i any 可以监控所有的设备
3. KeepAlive
3.1 KeepAlive都支持哪些设置项
a. KeepAlive默认情况下是关闭的,可以被上层应用开启和关闭
b. tcp_keepalive_time: KeepAlive的空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2小时)
c. tcp_keepalive_intvl: KeepAlive探测包的发送间隔,默认值为75s
d. tcp_keepalive_probes: 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次)
3.2 在Linux内核设置, KeepAlive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效, 查看当前的配置
a. cat /proc/sys/net/ipv4/tcp_keepalive_time
b. cat /proc/sys/net/ipv4/tcp_keepalive_intvl
c. cat /proc/sys/net/ipv4/tcp_keepalive_probes
3.3 在Linux中我们可以通过修改 /etc/sysctl.conf 的全局配置
a. net.ipv4.tcp_keepalive_time=7200
b. net.ipv4.tcp_keepalive_intvl=75
c. net.ipv4.tcp_keepalive_probes=9
3.4 添加上面的配置后输入 sysctl -p 使其生效,你可以使用 sysctl -a | grep keepalive 命令来查看当前的默认配置