`
gelongmei
  • 浏览: 211389 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

tcpdump抓取HTTP包

 
阅读更多


2012-10-11 10:50:35|  分类: rhel_apache |举报|字号 订阅
tcpdump -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
tcpdump

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

命令行格式:

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]

常用的参数:

-l    使标准输出变为缓冲行形式;
-n    不把网络地址转换成名字;

-c    在收到指定的包的数目后,tcpdump就会停止;
-i    指定监听的网络接口;
-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)
tcpdump tcp port 80 -n -X -s 0 指定80端口进行输出

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

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

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

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

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

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

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

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

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

小技巧:

1. 可结合tcpdump(命令) + wireshark(图形化)

操作: 

在服务器上进行tcpdump -w /tmp/tcp.cap 指定输出外部文件
scp /tmp/tcp.cap 拷贝文件到你本地
wireshark &  启动wireshark
通过 File -> Open  打开拷贝下来的文件,这样就可以利用进行数据包分析了
剩下来的事就非常方便了
2. 服务器上直接安装wireshark + X11协议反向输出到本机

注意: 

wireshark如果要开启网络监控,需要通过root方式启动,否则无法直接通过网卡进行数据抓包
X11的反向输出,需要客户机支持X11协议,如果是ubuntu天生支持很方便,如果是windows需要安装个软件
分享到:
评论

相关推荐

    tcpdump 抓取网络包,linux版本,android也可以用

    执行命令可能是 `adb push tcpdump /data/local/tmp/tcpdump`,然后 `adb shell` 进入设备终端,通过 `su` 获取root权限,最后运行 `/data/local/tmp/tcpdump -i any` 开始抓包。 标签中的“java”和“apache”暗示...

    夜神模拟器tcpdump抓包教程

    通过以上步骤,我们成功地在夜神模拟器中使用tcpdump进行了抓包操作,并将抓取的数据包导出到了本地计算机上。这对于进行网络调试、性能优化等方面的工作非常有帮助。希望本文能够帮助您更好地理解和使用tcpdump这一...

    tcpdump抓取工具和使用说明

    例如,`tcpdump port 80`将只显示与HTTP(80端口)相关的数据包。tcpdump支持复杂的BPF(Berkeley Packet Filter)语法,可以进行更精细的过滤,如`tcpdump host www.example.com`将只捕获与example.com交互的数据包...

    如何使用tcpdump抓包

    1. **网络延迟**:通过分析tcpdump抓取的包,我们可以查看每个数据包的发送时间、往返时间,从而找出可能的网络延迟原因。 2. **连接问题**:如果应用无法正常连接服务器,可以通过查看TCP三次握手是否完成,判断...

    OpenWrt 上运行的tcpdump

    libpcap是tcpdump和其他网络抓包工具所依赖的基础库,它提供了访问网络接口数据包的能力。安装libpcap.ipk的命令如下: ```bash opkg update opkg install libpcap.ipk ``` 更新软件包列表(`opkg update`)确保你...

    tcpdump离线.rar

    tcpdump-4.5.1-2.el7.x86_64.rpm则是tcpdump的主要程序包,它基于libpcap库来实现数据包的抓取和解析。4.5.1是tcpdump的版本号,2是针对el7发行版的修订号。tcpdump可以实时显示网络中传输的数据包的详细信息,对于...

    抓包工具tcpdump

    - `<snaplen>`:定义抓包时捕获的数据包长度,默认值可能不足以捕获完整包头,需要适当调整。 - `<filter expression>`:可选的过滤表达式,用于筛选特定类型的数据包。 例如,以下命令将捕获所有HTTP请求: ```...

    tcpdump数据抓包及分析

    例如,你可以在一台服务器上用tcpdump抓取数据包,然后将其导出到Wireshark中进行详细分析。 总的来说,掌握tcpdump和Wireshark的使用,对于网络管理员、开发者和网络安全专业人员来说,是提高工作效率和解决问题的...

    tcp抓包工具,tcpdump

    在进行网络故障排查时,通常需要结合其他工具一起工作,比如Wireshark,这是一个图形化的网络协议分析工具,可以对tcpdump抓取的包文件进行更直观的分析和解码。Wireshark提供了丰富的过滤和搜索功能,使得查找特定...

    linux 抓包工具---Tcpdump

    值得注意的是,由于Tcpdump具有高度的监控能力,涉及敏感信息的抓包操作通常需要root权限执行。同时,合理使用这些工具并尊重用户隐私是网络管理中的重要原则。在实际应用中,网络管理员应根据实际情况,遵循法规和...

    安卓tcpdump抓包文件

    本篇将详细讲解如何在Android设备上使用`tcpdump`进行网络数据包抓取,并探讨相关知识点。 首先,我们来理解`tcpdump`的基本概念。`tcpdump`能够捕获网络上的数据包,它通过嗅探网络接口的数据流,解析并打印出网络...

    tcpdump抓包工具

    使用tcpdump抓包工具,我们可以获取到设备上所有网络接口的传输数据,包括TCP、UDP、ICMP等各种协议的数据包。这些数据包包含了源地址、目标地址、端口号、协议类型、数据内容等关键信息。对于Android开发者来说,这...

    tcpdump-4.6.2.tar.gz

    1. **故障排查**:当网络连接出现问题时,可以通过TcpDump抓取相关数据包,分析其传输过程,找出可能导致问题的原因。 2. **性能监控**:通过观察数据包的延迟和频率,可以评估网络的性能瓶颈。 3. **安全审计**:...

    TCPDUMP 抓包完整版

    - 当通信数据采用JSON格式时,使用TCPDUMP抓取的数据包可以直接观察到JSON结构。这在调试基于HTTP/HTTPS的应用程序或服务时非常有用。 - 可以结合`-A`选项来查看数据包中的文本内容,尤其是对于HTTP响应体中的JSON...

    Tcpdump & Wireshark

    Tcpdump和Wireshark是网络分析领域的两个重要工具,它们主要用于抓取和分析网络报文,对于网络故障排查、性能优化和安全审计具有重要作用。 **Tcpdump** Tcpdump是一款命令行式的网络数据包分析工具,它能够实时...

    tcpdump_4.9.tar.gz 免安装,解压后直接在sbin目录下即可执行,网络数据采集分析工具,适用于CentOS7

    例如,你可以指定监听哪个网络接口(如eth0或lo),过滤特定的网络流量(如只抓取HTTP或FTP协议的数据包),或者限制抓取的数据包数量。命令行语法灵活,使得tcpdump能够满足各种复杂的网络监控需求。 以下是一些...

    安卓抓包tcpdump工具.rar

    在安卓平台上,尽管不像在Linux或桌面系统中那样常见,但通过一些方式,我们仍然可以利用tcpdump来抓取网络流量,以便进行深入的数据分析。 首先,让我们了解tcpdump的基本原理。tcpdump能够捕获网络接口上的数据包...

    pc端tcpdump软件

    TCPDump是一款强大的网络封包分析软件,主要用于在各种操作系统上抓取网络协议数据包,包括Linux、Unix以及Windows等PC平台。它可以帮助网络管理员、开发者和安全专家深入了解网络流量,进行故障排查、性能分析和...

    tcpdump

    tcpdump是一款强大的网络数据包分析工具,主要用于抓取和分析网络中的数据包。它在Linux、Unix以及类Unix操作系统上广泛使用,同时也可应用于其他支持libpcap库的操作系统。tcpdump通过读取网络接口上的数据包,为...

    tcpdump.exe工具

    - `port 80`: 抓取HTTP(80端口)流量。 - `ether dst 00:11:22:33:44:55`: 根据MAC地址过滤。 五、实际应用场景 1. **故障排查**:当网络连接出现问题时,可以使用tcpdump查看通信过程,找出丢包、延迟或错误的...

Global site tag (gtag.js) - Google Analytics