网络分析工具-tcpdump

文章目录


前言

当遇到网络疑难问题的时候,抓包是最基本的技能,通过抓包才能看到网络底层的问题


一、tcpdump基础

tcpdump是一个常用的网络分析工具。它基于libpcap,利用内核中的AF_PACKET套接字,抓取网络接口中传输的网络包。

我们对网卡进行抓包的时候,会使得网卡进入"混杂模式",所谓混杂模式就是让网卡接收所有到达网卡的报文,因为默认情况下,不是给自己的报文网卡是不要的,要么丢弃要么转发,反正不读取内容,而进入混杂模式后,就可以看一眼报文内容了。

使用tcpdump命令可以使网卡自动进入混杂模式,这一点可以从dmesg系统日志中看到:

[311135.760098] device eth0 entered promiscuous mode

[311142.852087] device eth0 left promiscuous mode

官网链接

https://www.tcpdump.org/manpages/tcpdump.1.html

命令选项详解

  • -i 指定网络接口(如 eth0 bond0)any表示所有接口

  • -n 不对IP地址进行域名解析,直接显示IP,避免执行dns lookup

  • -nn 不对IP地址和端口号进行名称解析。

  • -c xx捕获包的数量

  • -A 以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据

  • -l 基于行的输出,便于你保存查看,或者交给其它工具分析,例如 管道符 tcpdump -l | tee dat

  • -s tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
    控制时间显示

  • -t 在每行的输出中不输出时间

  • -tt 在每行的输出中会输出时间戳

  • -ttt 输出每两行打印的时间间隔(以毫秒为单位)

  • -tttt 在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)
    控制详细内容输出

  • -v:产生详细的输出. 比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。

  • -vv:产生比-v更详细的输出. 比如NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码。(摘自网络,目前我还未使用过)

  • -vvv:产生比-vv更详细的输出。比如 telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来(摘自网络,目前我还未使用过)

  • -w 写入数据到文件

  • -r 读取文件

  • -Q 选择是入方向还是出方向的数据包,可选项有:in, out, inout,也可以使用 --direction=[direction] 这种写法

  • -S 使用绝对序列号,而不是相对序列号

  • -D 显示主机所有可用网络接口的列表

  • -e 每行的打印输出中将包括数据包的数据链路层头部信息

常规过滤规则

由于tcpdump是把经过网卡的报文全部都抓出来,所以数量是非常大的,各种乱七八糟的报文都有,是没办法定位问题的,所以tcpdump一定要配合过滤条件使用。这里只讲平时用得到的几个关键参数,再详细的自己谷歌百度,反正我一般情况下用用是够了的。

tcpdump输出

时间戳 协议 源地址,源端口 > 目的地址, 目的端口 网络包详细信息

TCP Packets

TCP报头的控制部分有8位:

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN

[S] SYN(开始连接)

[.] ACK

[P] PSH(推送数据)

[F] FIN(结束连接)

[R] RST(重置连接)

[S.] 也表示[SYN-ACK], SYN的应答报文

[U] URG

[W] CWR

[E] ECE

一、tcpdump实践

HTTP协议

抓取HTTP GET 流量:

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

抓取HTTP POST流量:

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

从HTTP请求头中提取HTTP用户代理:

$ tcpdump -nn -A -s1500 -l | grep "User-Agent:"

提取HTTP 请求的主机名和路径:

tcpdump -i docker0 -nn -tttt -v -s0 -l | grep -Ei "POST /|GET /|HOST:"

提取HTTP请求的信息【密码,Cookie, Token等】:

先用POST请求,然后找到登录的URI,使用grep 找到上下20行,找到Post参数。

tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354' | grep -i 'POST /api/auth/login' -C20

抓取eth0接口42050端口的请求,request和respones

tcpdump -i eth0 -A -s 0 'tcp port 42050 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

ICMP

抓取ICMP报文

tcpdump -n icmp

非 ECHO/REPLY 类型的 ICMP

通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包:

tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

状态抓包

RST状态的包

tcpdump -i eth0 -nn port 34997 and 'tcp[tcpflags]&tcp-rst != 0'


相关推荐
xmh-sxh-131414 分钟前
网关的主要作用
网络
网络安全Ash6 小时前
全国知名网络安全赛事西湖论剑·杭州网络安全技能大赛启动报名
网络·安全·web安全
Spiffo_Sir8 小时前
【Spiffo】排障:VsCode报错“过程试图写入的管道不存在”(网络环境正常且地址正常的情况下依然出现)
网络·ide·vscode
MAR-Sky8 小时前
集线器,交换机,路由器,mac地址和ip地址知识记录总结
网络·tcp/ip·智能路由器
柒烨带你飞8 小时前
热备份路由HSRP及配置案例
网络·智能路由器
黑客呀10 小时前
网络安全笔记
网络·安全·web安全
让世界再也没有bug10 小时前
显示视频DP、HDMI、DVI、VGA接口的区别
网络·智能硬件
秋说10 小时前
【网络协议】什么是 BGP? | 解释 BGP 路由
网络协议·bgp
wangqiaowq11 小时前
HTTP、HTTP/2 和 gRPC 是网络通信协议或基于这些协议的技术,它们之间有显著的区别
网络·网络协议·http
InnovatorX11 小时前
Node.js 中 http 模块的深度剖析与实战应用
网络协议·http·node.js