安装

$ sudo yum install tcpdump

常用参数

  • -i interface: 设置抓取的网卡名(可以使用 -i any 抓取所有网卡的数据包)
tcpdump -i eth0
  • -D: 列出可用的网卡列表
$ sudo tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.usbmon1 (USB bus number 1)
5.any (Pseudo-device that captures on all interfaces)
6.lo
  • -w file: 把捕获的包数据写入到文件中(可以使用 -w - 输出到标准输出)
tcpdump -i eth0 -w debug.cap
  • -C size: 使用 -w 写入文件时,限制文件的最大大小,超出时新开一个文件(单位是 1,000,000 bytes)
$ sudo tcpdump -i eth0 -w debug.cap -C 1
$ ls debug* -l
-rw-r--r-- 1 tcpdump tcpdump 1000956 Jan 14 10:16 debug.cap
-rw-r--r-- 1 tcpdump tcpdump 1000323 Jan 14 10:32 debug.cap1
-rw-r--r-- 1 tcpdump tcpdump 1000017 Jan 14 10:51 debug.cap2
-rw-r--r-- 1 tcpdump tcpdump 970705 Jan 14 11:08 debug.cap3
  • -r file: 从文件中读取包数据
tcpdump -r debug.cap
  • -v: 启用 verbose output,抓包时输出包的附加信息(可以使用多个 -v: -v, -vv, -vvv 多个 v 会显示更多更详细的信息)
tcpdump -v
tcpdump -vv
  • -A: 以 ASCII 码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据
  • -x: 打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部)
  • -xx: 打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部
  • -X: 打印每个包的头部数据, 同时会以16进制和 ASCII 码形式打印出每个包的数据(但不包括连接层的头部)
  • -XX: 打印每个包的头部数据, 同时会以16进制和 ASCII 码形式打印出每个包的数据, 其中包括数据链路层的头部
  • -c count: 设置抓取到多少个包后就退出
tcpdump -i eth0 -c 100
  • -n: 不要把地址转换为主机名(直接显示 ip 不要解析为域名)
tcpdump -n
  • -nn: 不要把转换协议和端口号(直接显示协议和端口号,不要转换为协议名称,比如 http)
tcpdump -nn
  • -s snaplen: 设置 tcpdump 的数据包抓取长度为 snaplen , 为 0 时表示让 tcpdump 自动选择合适的长度来抓取数据包.
tcpdump -s 0
  • -S: 打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.
tcpdump -S
  • -Z user: 使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID
sudo tcpdump -Z user2

常用的参数组合:

sudo tcpdump -i eth0 -nnS -s 0 -c 100 -Avvv [<expression>]
sudo tcpdump -i eth0 -nnS -s 1024 -c 100 -Avvv [<expression>]
sudo tcpdump -i eth0 -nnS -s 1024 -C 10 -c 10000 -v -w debug.cap [<expression>]

默认 tcpdump 会抓取所有的数据,可以通过指定过滤规则来过滤数据包。

过滤筛选

网卡过滤

指定eth1网卡

tcpdump -i eth1

所有网卡

tcpdump -i any

主机过滤

要获取指定 IP 的数据包,不管是作为源地址还是目的地址,使用下面命令:

tcpdump host 192.168.3.7

要指定 IP 地址是源地址或是目的地址则使用:

tcpdump src 192.168.1.100
tcpdump dst 192.168.1.100

或者

tcpdump src host 192.168.1.100
tcpdump dst host 192.168.1.100

网段过滤

tcpdump -i eth1 net 192.168
tcpdump -i eth1 src net 192.168
tcpdump -i eth1 dst net 192.168

端口过滤

tcpdump port 22
tcpdump src port 22
tcpdump dst port 22

端口范围过滤

tcpdump portrange 22-125

协议过滤

tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp

常用表达式

非 : ! or "not" (去掉双引号)
且 : && or "and"
或 : || or "or"

我们还可以使用“与” (and&&)、“或” (or|| ) 和“非”(not!) 来将两个条件组合起来。当我们需要基于某些条件来分析网络报文是非常有用。

写入读取文件

将捕获的包写入文件

tcpdump -i eth1 -w file.cap

读取tcpdump写入的文件

tcpdump -r file.cap

当然,一般都是下载下来使用Wireshark查看

具体案例

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

(2)-i eth1 : 只抓经过接口eth1的包

(3)-t : 不显示时间戳

(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包

(5)-c 100 : 只抓取100个数据包

(6)dst port ! 22 : 不抓取目标端口是22的数据包

(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24

(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

参考:

tcpdump使用技巧

tcpdump 常用操作

tcpdump命令详解

抓包神器 tcpdump 使用介绍

tcpdump参数解析及使用详解(转载)

tcpdump命令

网络基本功(十八):细说tcpdump的妙用(下)

tcpdump 筛选抓包的更多相关文章

  1. Android 下使用tcpdump网络抓包方法

    Android 下使用tcpdump网络抓包方法 抓包需要tcpdump以及Root权限,tcpdump在本文后有下载. 首先把tcpdump传进手机,用adb命令(放SD卡有时会有问题,我一次可以用 ...

  2. tcpdump+wireshark抓包分析

    上一篇文章中,我们介绍了tcpdump如何抓包. tcpdump是命令行下便捷的抓包和分析工具,但使用方式不够友好, wireshark是带图形化界面的抓包和分析工具,操作简便,但需要主机有显示器. ...

  3. Linux使用tcpdump命令抓包并使用wireshark分析

    Linux使用tcpdump命令抓包并使用wireshark分析 介绍 有时分析客户端和服务器网络交互的问题时,为了查找问题,需要分别在客户端和服务器上抓包,我们的客户端一般是windows上的,抓包 ...

  4. 【测试工具】tcpdump + wireshark 抓包实践

    Tcpdump + Wireshark 抓包实践 工具介绍 Tcpdump 看到dump大家应该有所意识吧,就是下载数据,抓数据.tcpdump是linux下的一个抓取tcp包的命令 Usage: t ...

  5. tcpdump 进行抓包

    tcpdump 进行抓包是怎么回事? tcp抓包是怎么搞的?

  6. adb+tcpdump手机抓包过程出现的报错及解决方法

    tcpdump下载:https://www.androidtcpdump.com/android-tcpdump/downloads 1.夜神模拟器连接不上adb D:1手机木马取证\android- ...

  7. Linux使用tcpdump命令抓包保存pcap文件wireshark分析

    [root@ok Desktop]# yum search tcpdump Loaded plugins: fastestmirror, refresh-packagekit, security Lo ...

  8. CentOS下使用tcpdump网络抓包

    tcpdump是Linux下的截获分析网络数据包的工具,对优化系统性能有很大参考价值. 安装 tcpdump不是默认安装的,在CentOS下安装: yum install tcpdump 在Ubunt ...

  9. Linux系统-tcpdump常用抓包命令

    主要语法 过滤主机/IP: tcpdump -i eth1 host 172.16.7.206 抓取所有经过网卡1,目的IP为172.16.7.206的网络数据 过滤端口:  tcpdump -i e ...

随机推荐

  1. HTML基础(一)基本语法知识

    HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head& ...

  2. 如何减少 webpack 构建 vue 项目的编译时间

    背景 我司前端项目框架主要是 vue,多个项目聚集在同一个仓库下,共用公共组件.页面.工具函数等.基于以上前提,我们需要对不同的项目分别进行打包,并解决单页应用强制刷新引起的问题,所以没有使用 vue ...

  3. [转帖]【Ubuntu】Ubuntu 各版本代号简介

    [Ubuntu]Ubuntu 各版本代号简介 https://www.jianshu.com/p/7b351fde8799 一.版本及代号说明 Ubuntu中,每个版本都有一个更为特色的名字,这个名字 ...

  4. 【搬运工】RHEL6.5 移植使用CentOS 的YUM 步骤

    转载地址:http://www.cnblogs.com/rchen98/p/6056469.html 问题:使用 Red Hat Enterprise Linux Server(RHEL) yum安装 ...

  5. Python格式化输出——format用法示例

    format OR % 提到Python中的格式化输出方法,一般来说有以下两种方式: print('hello %s' % 'world') # hello world print('hello {} ...

  6. 整理:WPF用于绑定命令和触发路由事件的自定义控件写法

    原文:整理:WPF用于绑定命令和触发路由事件的自定义控件写法 目的:自定义一个控件,当点击按钮是触发到ViewModel(业务逻辑部分)和Xaml路由事件(页面逻辑部分) 自定义控件增加IComman ...

  7. 我的第一个netcore2.2 api项目搭建(三)续

    上一章快速陈述了自定义验证功能添加的过程,我的第一个netcore2.2 api项目搭建(三) 但是并没有真正的去实现,这一章将要实现验证功能的添加. 这一章实现目标三:jwt认证授权添加 在netc ...

  8. 创建和使用CI / CD管道【译】【原】

    在GitLab 8.8中引入. 介绍 管道是持续集成,交付和部署的顶级组件. 管道包括: 定义要运行的作业的作业.例如,代码编译或测试运行. 定义何时以及如何运行的阶段.例如,该测试仅在代码编译后运行 ...

  9. Java自学-数字与字符串 字符串转换

    Java中把数字转换为字符串,字符串转换为数字 步骤 1 : 数字转字符串 方法1: 使用String类的静态方法valueOf 方法2: 先把基本类型装箱为对象,然后调用对象的toString pa ...

  10. Java自学-接口与继承 UML图

    UML 图 步骤 1 : UML 图 -- 类之间的关系 UML-Unified Module Language 统一建模语言,可以很方便的用于描述类的属性,方法,以及类和类之间的关系 步骤 2 : ...