网络分析工具-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 ### 命令选项详解 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d3acb41a0209479aa1bf62b7aba20bcd.png) * -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一定要配合过滤条件使用。这里只讲平时用得到的几个关键参数,再详细的自己谷歌百度,反正我一般情况下用用是够了的。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/65845897bfbf4d1184545325e8adb85a.png) ### 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' *** ** * ** ***

相关推荐
zhu128930355619 分钟前
网络安全的重要性与防护措施
网络·安全·web安全
仙女很美哦22 分钟前
Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
websocket·网络协议·tcp/ip·http·网络安全·https·udp
网络研究院43 分钟前
ChatGPT 的新图像生成器非常擅长伪造收据
网络·人工智能·安全·chatgpt·风险·技术·欺诈
路由侠内网穿透1 小时前
本地部署开源流处理框架 Apache Flink 并实现外部访问
大数据·网络协议·tcp/ip·flink·服务发现·apache·consul
Amos_ FAT2 小时前
关于串口协议的一点知识
经验分享·网络协议
小吃饱了2 小时前
TCP可靠性传输
网络·网络协议·tcp/ip
q567315232 小时前
使用puppeteer库编写的爬虫程序
爬虫·python·网络协议·http
写代码的小王吧2 小时前
【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~
java·开发语言·网络·安全·web安全·网络安全·jar
孪生质数-2 小时前
SQL server 2022和SSMS的使用案例1
网络·数据库·后端·科技·架构
fakaifa3 小时前
beikeshop多商户跨境电商独立站最新版v1.6.0版本源码
前端·小程序·uni-app·php·beikeshop多商户·beikeshop跨境电商