hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 数据库

  • 网络协议以及抓包工具

    • http1.1

      • http概览
        • http协议
          • 搭建http实验环境
        • 浏览器发送http请求的过程
          • HTTP消息格式(基于ABNF语义)
          • 上机演示
    • WebSocket

    • http2

    • TLS&SSL

    • tcp

    • ip

    • 网络排查

    • tcpdump抓包命令
      • BPF
        • libpcap
        • tcpdump调用关系
      • 抓包文件格式
      • tcpdump命令基本用法
      • 抓取http内容
      • 如何过滤报文
    • chrome开发者工具
      • 快捷打开开发者工具
      • 具体问题查找路径
    • WireShark抓包工具
  • Git笔记

  • 技术分享

  • Oauth2

  • 计算机相关技术
  • 网络协议以及抓包工具
hincky
2023-02-03
目录

tcpdump抓包命令

# BPF

它实现高效稳定的报文过滤功能

这是伯克利实验室开发的一款,基于寄存器的抓包虚拟机;是tcpdump的最底层实现

从Linux3.18开始,升级成了eBPF,它不仅能支持网络抓包,还能支持网络以外的内核观测点的信息收集等工作

# libpcap

BPF实现了抓包过滤等功能,而libpcap是BPF上的一层API封装;提供API给用户空间程序调用(tcpdump,wireshark)

类似的,Winpcap是Windows系统的BPF封装

# tcpdump调用关系

提示

tcpdump -> libpcap -> BPF

# 抓包文件格式

  • pcap

这个是 libpcap 的格式,也是 tcpdump 和 Wireshark 等工具默认支持的文件格式。pcap 格式的文件中除了报文数据以外,也包含了抓包文件的元信息,比如版本号、抓包时间、每个报文被抓取的最大长度,等等。

  • cap

cap 文件可能含有一些 libpcap 标准之外的数据格式,它是由一些 tcpdump 以外的抓包程序生成的。比如 Citrix 公司的 netscaler 负载均衡器,它的 nstrace 命令生成的抓包文件,就是以.cap 为扩展名的。这种文件除了包含 pcap 标准定义的信息以外,还包含了 LB 的前端连接和后端连接之间的 mapping 信息。Wireshark 是可以读取这些.cap 文件的,只要在正确的版本上。

  • pcapng

pcapng 就出现了。有了它,单个抓包文件就可以包含多个网络接口上,抓取到的报文了。pcapng 还有很多别的特性,比如更细粒度的报文时间戳、允许对报文添加注释、更灵活的元数据,等等。如果你是用版本比较新的 Wireshark 和 tshark 做抓包,默认生成的抓包文件就已经是 pcapng 格式了。

# tcpdump命令基本用法

抓取特定ip

tcpdump -i eth1 #监视指定网络接口的数据包,默认监视第一个网络接口,一般是eth0

tcpdump host 10.10.10.10 #抓取所有进入/离开某IP的数据

tcpdump -i eth0 src host hostname #截获主机hostname发送的所有数据

tcpdump -i eth0 dst host hostname #监视所有送到主机hostname的数据包

#打印helios 与 hot 或者与 ace 之间通信的数据包
tcpdump host helios and \( hot or ace \)

#截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

#打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host ace and not helios

#获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

抓取特定ip和端口的数据

tcpdump port 22 #抓取某个端口的流量

tcpdump tcp port 23 and host 210.27.48.1 #获取主机210.27.48.1接收或发出的telnet包

tcpdump udp port 123 #对本机的udp 123 端口进行监视 123 为ntp的服务端口
1
2
3
4
5

还有不少参数我们也经常用到,比如:

  • -w 文件名,可以把报文保存到文件;
  • -c 数量,可以抓取固定数量的报文,这在流量较高时,可以避免一不小心抓取过多报文;
  • -s 长度,可以只抓取每个报文的一定长度,后面我会介绍相关的使用场景;
  • -n,不做地址转换(比如 IP 地址转换为主机名,port 80 转换为 http);
  • -v/-vv/-vvv,可以打印更加详细的报文信息;
  • -e,可以打印二层信息,特别是 MAC 地址;
  • -p,关闭混杂模式。所谓混杂模式,也就是嗅探(Sniffing),就是把目的地址不是本机地址的网络报文也抓取下来。

# 抓取http内容

  • -X 抓取http里面的具体内容
# 服务端
sudo lsof -i:80 # 查看占用80端口的进程

sudo tcpdump -i any -X port 80 # 对服务端的80端口进行抓包

# 客户端 分别执行以下命令,查看区别

# 1 连接服务端的80端口
telnet 127.0.0.1 80 

# 2 模拟http请求
GET / HTTP/1.1
Host: www.hincky.com ##两次回车
1
2
3
4
5
6
7
8
9
10
11
12
13

# 如何过滤报文

因为 BPF 本身是基于偏移量来做报文解析的,所以在 tcpdump 中使用偏移量技术,来实现过滤需求。

# dst port 443 抓取从客户端发过来的访问 HTTPS 的报文
# tcp[20] tcp头部占20个字节,即tcp[0~19];tcp[20]=22是TLS握手报文的第一个字节,值为22
# tcp[25] tcp[25]值为1说明是Client Hello 类型的 TLS 握手报文

tcpdump -w file.pcap 'dst port 443 && tcp[20]==22 && tcp[25]==1'

1
2
3
4
5
6
编辑 (opens new window)
网络模型
chrome开发者工具

← 网络模型 chrome开发者工具→

最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式