首页 > 代码库 > tcpprobe ——监听TCP信息的内核模块
tcpprobe ——监听TCP信息的内核模块
1 tcpprobe模块的加载与卸载
1) 用modprobe加载tcpprobe
// 如果是通过修改.config来编译tcpprobe的,可以使用modprobe加载
# modprobe tcp_probe port=5001 // 监听所有本地端口是5001的TCP流,仅在cwnd变化时捕捉信息
# modprobe tcp_probe full=1 port=5001 // full选项表示每次收到数据包都捕捉信息
2) 用insmod加载
// 如果是普通内核模块形式编译的,则使用insmod加载
# insmod tcp_probe.ko full=1 port=5001
3 )卸载tcpprobe
// 卸掉tcpprobe模块的命令也很简单,只要当前没有任务在使用tcpprobe模块即可卸载
# rmmod tcp_probe
2 tcpprobe模块的使用
加载tcpprobe模块后,会新增一个/proc/net/tcpprobe的接口,可以通过这个接口获取tcpprobe捕捉的信息。
# cat /proc/net/tcpprobe > data.out & // tcpprobe捕捉的信息是持续性的,因此读这个接口可以放到后台读 # pid=$! // 保存上一个读命令的pid,用于结束读tcpprobe接口 # iperf -c otherhost // 使用iperf建立一个TCP流 # kill $pid
记录在data.out中的数据大致是这个样子:
11.172120204 193.168.0.2:8089 193.168.0.25:54320 32 0x842ccad 0x84299c5 10 168 14608 143
每行的各列分别为:
timestamp //时间戳saddr:port // 源IP及端口,我的数据是在发送端捕捉的,所以port是固定的8089 daddr:port // 目的IP及端口 skb->len // 收到的数据包skb大小,收到的都是ACK包,所以len都比较小。 snd_nxt // 下一个待发送数据的序列号 snd_una // 待确认数据的序列号 snd_cwnd // 拥塞窗口大小 ssthresh // 慢启动阈值 snd_wnd // 接收窗口大小 srtt // smoothed RTT
参考:http://perthcharles.github.io/2014/12/19/tcp-probe-intro/
tcpprobe ——监听TCP信息的内核模块
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。