问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

tcpdump可否抓到http2

发布网友 发布时间:2022-04-20 07:11

我来回答

1个回答

热心网友 时间:2023-09-09 19:23

tcpmp -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 为"GET"前两个字母"GE"
0x4854 为"HTTP"前两个字母"HT"

说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手
里面的几个概念:
SYN: (同步序列编号,Synchronize Sequence Numbers)
ACK: (确认编号,Acknowledgement Number)
FIN: (结束标志,FINish)

TCP三次握手(创建 OPEN)
客户端发起一个和服务创建TCP链接的请求,这里是SYN(J)
服务端接受到客户端的创建请求后,返回两个信息: SYN(K) + ACK(J+1)
客户端在接受到服务端的ACK信息校验成功后(J与J+1),返回一个信息:ACK(K+1)
服务端这时接受到客户端的ACK信息校验成功后(K与K+1),不再返回信息,后面进入数据通讯阶段
数据通讯
客户端/服务端 read/write数据包
TCP四次握手(关闭 finish)
客户端发起关闭请求,发送一个信息:FIN(M)
服务端接受到信息后,首先返回ACK(M+1),表明自己已经收到消息。
服务端在准备好关闭之前,最后发送给客户端一个 FIN(N)消息,询问客户端是否准备好关闭了
客户端接受到服务端发送的消息后,返回一个确认信息: ACK(N+1)
最后,服务端和客户端在双方都得到确认时,各自关闭或者回收对应的TCP链接。
详细的状态说明(以及linux相关参数调整)
SYN_SEND
客户端尝试链接服务端,通过open方法。也就是TCP三次握手中的第1步之后,注意是客户端状态
sysctl -w net.ipv4.tcp_syn_retries = 2 ,做为客户端可以设置SYN包的重试次数,默认5次(大约180s)引用校长的话:仅仅重试2次,现代网络够了
SYN_RECEIVED
服务接受创建请求的SYN后,也就是TCP三次握手中的第2步,发送ACK数据包之前
注意是服务端状态,一般15个左右正常,如果很大,怀疑遭受SYN_FLOOD攻击
sysctl -w net.ipv4.tcp_max_syn_backlog=4096 , 设置该状态的等待队列数,默认1024,调大后可适当防止syn-flood,可参见man 7 tcp
sysctl -w net.ipv4.tcp_syncookies=1 , 打开syncookie,在syn backlog队列不足的时候,提供一种机制临时将syn链接换出
sysctl -w net.ipv4.tcp_synack_retries = 2 ,做为服务端返回ACK包的重试次数,默认5次(大约180s)引用校长的话:仅仅重试2次,现代网络够了
ESTABLISHED
客户端接受到服务端的ACK包后的状态,服务端在发出ACK在一定时间后即为ESTABLISHED
sysctl -w net.ipv4.tcp_keepalive_time = 1200 ,默认为7200秒(2小时),系统针对空闲链接会进行心跳检查,如果超过net.ipv4.tcp_keepalive_probes * net.ipv4.tcp_keepalive_intvl = 默认11分,终止对应的tcp链接,可适当调整心跳检查频率
目前线上的监控 waring:600 , critial : 800
FIN_WAIT1
主动关闭的一方,在发出FIN请求之后,也就是在TCP四次握手的第1步
CLOSE_WAIT
被动关闭的一方,在接受到客户端的FIN后,也就是在TCP四次握手的第2步
FIN_WAIT2
主动关闭的一方,在接受到被动关闭一方的ACK后,也就是TCP四次握手的第2步
sysctl -w net.ipv4.tcp_fin_timeout=30, 可以设定被动关闭方返回FIN后的超时时间,有效回收链接,避免syn-flood.
LASK_ACK
被动关闭的一方,在发送ACK后一段时间后(确保客户端已收到),再发起一个FIN请求。也就是TCP四次握手的第3步
TIME_WAIT
主动关闭的一方,在收到被动关闭的FIN包后,发送ACK。也就是TCP四次握手的第4步
sysctl -w net.ipv4.tcp_tw_recycle = 1 , 打开快速回收TIME_WAIT,Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation)
sysctl -w net.ipv4.tcp_tw_reuse =1, 快速回收并重用TIME_WAIT的链接, 貌似和tw_recycle有冲突,不能重用就回收?
net.ipv4.tcp_max_tw_buckets: 处于time_wait状态的最多链接数,默认为180000.

相关说明
主动关闭方在接收到被动关闭方的FIN请求后,发送成功给对方一个ACK后,将自己的状态由FIN_WAIT2修改为TIME_WAIT,而必须 再等2倍的MSL(Maximum Segment Lifetime,MSL是一个数据报在internetwork中能存在的时间)时间之后双方才能把状态 都改为CLOSED以关闭连接。目前RHEL里保持TIME_WAIT状态的时间为60秒
keepAlive策略可以有效的避免进行三次握手和四次关闭的动作

其他网络重要参数
net.ipv4.tcp_rmem 参数
默认值: min=4096 default=87380 max=4194304

net.ipv4.tcp_wmem 参数
默认值: min=4096 default=16384 max=4194304

tcpmp
tcpmp是linux系统自带的抓包工具,主要通过命令行的方式,比较适合在线上服务器进行抓包操作,如果是windows或者ubuntu完全可 以选择一些图形化的工具,ubuntu比较推荐用wireshark,安装方式很简单sudo apt一下即可。

命令行格式:
tcpmp [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]

常用的参数:
-l    使标准输出变为缓冲行形式;
-n    不把网络地址转换成名字;
-c    在收到指定的包的数目后,tcpmp就会停止;
-i    指定监听的网络接口;(如果没有指定可能在默认网卡上监听,需要指定绑定了特定IP的网卡)
-w    直接将包写入文件中,并不分析和打印出来;
-s 指定记录package的大小,常见 -s 0 ,代表最大值65535,一半linux传输最小单元MTU为1500,足够了
-X 直接输出package data数据,默认不设置,只能通过-w指定文件进行输出

常用表达式:
关于类型的关键字,主要包括host,net,port
传输方向的关键字,主要包括src , dst ,dst or src, dst and src
协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型
逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||'
其他重要的关键字如下:gateway, broadcast,less,greater

实际例子:
1. http数据包抓取 (直接在终端输出package data)
tcpmp tcp port 80 -n -X -s 0 指定80端口进行输出

2. 抓取http包数据指定文件进行输出package
tcpmp tcp port 80 -n -s 0 -w /tmp/tcp.cap

对应的/tmp/tcp.cap基本靠肉眼已经能看一下信息,比如http Header , content信息等

3. 结合管道流
tcpmp tcp port 80 -n -s 0 -X -l | grep xxxx

这样可以实时对数据包进行字符串匹配过滤

4. mod_proxy反向代理抓包
线上服务器apache+jetty,通过apache mod_proxy进行一个反向代理,80 apache端口, 7001 jetty端口

apache端口数据抓包: tcpmp tcp port 80 -n -s 0 -X -i eth0   注意:指定eth0网络接口
jetty端口数据抓包: tcpmp tcp port 7001 -n -s 0 -X -i lo 注意:指定Loopback网络接口

5. 只监控特定的ip主机
tcpmp tcp host 10.16.2.85 and port 2100 -s 0 -X 

需要使用tcp表达式的组合,这里是host指示只监听该ip

小技巧:
1. 可结合tcpmp(命令) + wireshark(图形化)
操作: 
在服务器上进行tcpmp -w /tmp/tcp.cap 指定输出外部文件
scp /tmp/tcp.cap 拷贝文件到你本地
wireshark &  启动wireshark
通过 File -> Open  打开拷贝下来的文件,这样就可以利用进行数据包分析了
剩下来的事就非常方便了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
科幻,诡异,恐怖的FPS游戏,电脑 求生化丧尸类的FPS游戏 不恐怖的虐怪FPS 最恐怖的fps游戏? 哪位大虾推荐一些配置低的恐怖射击游戏(FPS)高手进。跪求! 文艺风象 落落 一共有多少本??!!! 文艺风象·零嘴儿编辑推荐 文艺风象·零嘴儿基本信息 文艺风象·零嘴儿内容简介 文艺风象·特集零嘴儿内容简介 Linux抓包如何分包 sniffer状态 组播v3 怎么tcpdump抓包 redis bind 网段 如何使用tcpdump来捕获TCP SYN,ACK和FIN包 求助哈。关于UDP和ARP之间的交互作用,这个怎么进... 请问电脑处于sniffer状态是什么意识啊? tcpdump怎样抓包的同时进行打印和解析 Ophone tcpdump 为什么没有输出 如何用tcpdump命令截完整的数据包 linux下tcpdump抓包存在什么位置 请教,为何我tcpdump到自己在不断发dns查询 tcpdump是什么意思.干什么用的.哪里有详细的资料, 实验验证为什么tcpdump输出看到cksum错误 TCPDUMP 抓包 怎么查看 抓的包的内容 如何读懂tcpdump的输出 宝宝拉肚子能吃煮熟的梨吗 拉肚子可以吃梨吗 宝宝拉肚子能吃梨吗 呕吐拉肚子可以吃梨吗 收银机商品条码怎么输入?急急急各位兄弟姐妹 10岁小学生青春修炼手册短发编什么头发好看女生 十岁小学生短发怎么扎 十岁小学生写的毁三观小说 小学生自编现代诗歌 小学生自编成语故事大全 小学生编的简单古诗 小学生自编书怎么写 小学生为自己编织的美丽的童话内容 小学生自编小品 适合小学生的小诗(自编的) 小学生自己编的古诗 小学生自编的歌曲 小学生手工制作作品 小学生的自编书怎么写? 小学生自编身份证号码 小学生的自我介绍怎么写?10岁 10岁的小朋友应该会做哪些事 十岁小学生特别骚怎么办? 小朋友十岁生日祝福语