[tcp] 快速掌握tcpdump抓包

一说到抓包,好像有点高深莫测,其实在工做中,大部分是应用发生异常时须要抓包,以此来分析缘由,Linux下通常用tcpdump命令抓包,而使用tcpdump其实经常使用的参数也就那么几个网络

抓包主要是看数据传输是否都走了正确的TCP协议,好比由于网络或者攻击致使某些包(SYN TIME_WAIT)等特别多,这个时候抓包就很容看出来ssh

所以抓包没必要记太多参数,只要能过滤到咱们想要的包便可tcp

tcpdump命令经常使用参数

-i 指定网络接口,例如eth0、lo、pp0等等的界面看一段直接用tcpdump命令抓包的文档
-S 将tcp的序列号以绝对值形式输出,默认相对值
-nn 不进行端口名称的转换,默认转换,好比22端口会显示ssh
-w 存储抓到的包,通常.cap格式
-v 输出更详细的报文信息,能够多个v一块儿使用,如-vvvv
or|and|nor 与或非,如下参数如多个使用,则须要用到
host 指定过滤的ip,好比10.0.0.1,那么只抓与该ip相关的包
port 指定过滤的端口
src host 指定过滤的源ip
dst host 指定过滤的目的ip
src port 指定过滤的源端口
dst port 指定过滤的目的端口

tcpdump抓包实例

tcpdump -S -nn port 443 and host 10.88.77.15
tcpdump -S -nn port 443 and host 10.88.77.15 -w /tmp/dump.wapspa

如抓取过滤有host为10.25.137.230和端口443
tcpdump -S -nn host 10.25.137.230 and port 443code

clipboard.png

15:39:07.427683 IP 10.25.137.230.20260 > 10.29.64.142.443: Flags [P.], seq 1026816011:1026816267, ack 1193238686, win 115, length 256
以此行为例
  • 15:39:07.427683 网络包发生的时间

IP 10.25.137.230.20260 > 10.29.64.142.443:接口

  • IP标识
  • 源ip或者源主机名和端口20260;
  • >流向符,数据包从左边发往右边
  • 目的ip或者目的主机名和端口443

Flags [P.] Flags的标记,此处为[P.],表明PST和ACK(.表明ACK确认)ip

seq 1026816011:1026816267, ack 1193238686, win 115, length 256文档

  • seq为序列号
  • ack为确认码
  • win为滑动窗口大小
  • length为承载的数据(payload)长度length,若是没有数据则为0

tcpdump抓包的FLags标记

tcpdump的Flags表明了这个数据包的用途,这些标记是TCP首部的内容同步

[S]:SYN同步标识
[.]: .表示ACK确认标识
[S.]:SYN同步标识,以及确认[S]的ACK
[P.]:PSH,push推送,数据传输
[R.]:RST,链接重置
[F.]:FIN结束链接
[DF]:Don't Fragment(不要碎裂),当DF=0时,表示容许分片,通常 -v时才有这个标识 [FP.]:标记FIN、PUSH、ACK组合,这样作是为了提高网络效率,减小数据来回确认等
相关文章
相关标签/搜索