常用 tcpdump 抓包方式
目录
tcpdump 指令
tcpdump(dump the traffic on a network)是 Linux 强大网络数据采集分析工具,可以将网络中传输的数据包(涵盖整个 TCP/IP 协议族的数据包)完全截获下来提供分析。它支持针对网络层、协议、主机、网络接口或端口的过滤,并提供 and、or、no t等逻辑原语来帮助你筛选出关注的信息。
基本上 tcpdump 的输出格式为:
系统时间 源主机.端口 > 目标主机.端口 数据包参数
官方网站:tcpdump
关键字
关于类型:
- host - 主机:host 210.27.48.2 指明 210.27.48.2 是一台主机
- net - 网络(网段):net 10.0 指明 10.0 是一个网络地址
- port - 端口:port 23 指明端口号是 23
NOTE:缺省类型是 host。
关于传输方向:
- src - 源:src 210.27.48.2 指明 IP 数据包中的源 IP 地址是 210.27.48.2
- dst - 目标:dst net 10.0 指明 IP 数据包中的目的网络地址是 10.0
- dst or src
- dst and src
NOTE:缺省方向是 src or dst
关于协议:
- ip
- arp
- rarp
- tcp
- udp
- fddi
NOTE: 缺省是所有协议的包
关于逻辑条件:
- and
- or
- not
NOT:不同的关键字之间结合使用需要逻辑运算符
其他:
- gateway
- broadcast
- less
- greater
常用指令选项
Help:
[root@localhost ~]# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips 26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
- -i:指定监听的 interface
- -n:不启用主机名解析,显示 IP 地址,默认显示为 hostname
- -nn:不启用主机名解析与端口名称转换,显示端口号,默认显示端口号对应的服务名
- -c:指定抓取数据宝的数量
- -D:显示操作系统当前所有可以使用 tcpdump 抓包的 interface 设备名
- -b:在数据链路层上选择协议,包括 ip、arp、rarp、ipx 等
- -N:不显示主机名中的域名部分。e.g. hostname
nic.ddn.mil
只输出nic
- -t:不打印时间戳
- -tttt:输出 date 默认格式的时间戳
- -q:只输出少量的协议信息
- -v:输出稍微详细的信息,例如输出 IP 数据包中的 ttl 和服务类型信息
- -vv:输出详细的报文信息
- -vvv:输出更加详细的报文信息
- -w:直接将抓取的数据包信息写入文件
- -P:指定要抓取的包是流入还是流出包,可以指定 in、out、inout 参数,默认为 inout
- -s len:设置抓取的数据包长度为 len,默认为 65535Byte,如果要抓取的数据包长度大于 len,可能会发生包截断。
- -S 将 TCP 的序列号以绝对值形式输出,而不是相对值
常规操作示例
NOTE: 测试环境 IP 172.18.22.200,hostname localhost.localdomain.ssh
过滤主机
抓取经过指定 interface 的,并且 DST_IP 或 SRC_IP 是 172.18.22.200 的数据包。
tcpdump -i ens160 host 172.18.22.200
- 筛选 SRC_IP,抓取经过 interface 且从 172.18.22.200 发出数据包
tcpdump -i ens160 src host 172.18.22.200
- 筛选 DST_IP,抓取经过 interface 且发送到 172.18.22.200 的数据包
tcpdump -i ens160 dst host 172.18.22.200
应用场景:你希望查看发送到 host 172.18.22.208 的数据包有没有经过当前主机的 ens160 网卡
[root@localhost ~]# tcpdump -i ens160 -nnt -c 1 dst host 172.18.22.208 and icmp
...
IP 172.18.128.204 > 172.18.22.208: ICMP echo request, id 27729, seq 138, length 64
过滤端口
抓取经过指定 interface 的,并且 DST_PORT 或 SRC_PORT 是 22 的数据包。
tcpdump -i ens160 port 22
- 筛选 SRC_PORT
tcpdump -i ens160 src port 22
- 筛选 DST_PORT
tcpdump -i ens160 dst port 22
应用场景:你希望查看发送到 host 172.18.22.208 的 22 号端口的数据包有没有经过当前主机的 ens160 网卡
[root@localhost ~]# tcpdump -i ens160 -nnt -c 1 dst host 172.18.22.208 and port 22
...
IP 172.18.128.204.60812 > 172.18.22.208.22: Flags [S], seq 908466914, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 949822094 ecr 0,sackOK,eol], length 0
过滤网络(网段)
抓取经过指定 interface 的,并且 DST_NET 或 SRC_NET 是 172.18.22 的数据包。
tcpdump -i ens160 net 172.18.22
- 筛选 SRC_NET
tcpdump -i ens160 src net 172.18.22
- 筛选 DST_NET
tcpdump -i ens160 dst net 172.18.22
过滤协议
tcpdump -i ens160 icmp
tcpdump -i ens160 ip
tcpdump -i ens160 tcp
tcpdump -i ens160 udp
tcpdump -i ens160 arp
复杂的逻辑表达式过滤条件
抓取经过 interface ens160,发送到 host 172.18.22.208 或 172.18.22.200 的 TCP 协议 22 号端口的数据包。
[root@localhost ~]# tcpdump -i ens160 -nntvv -c 10 '((tcp) and (port 22) and ((dst host 172.18.22.208) or (dst host 172.18.22.200)))'
...
IP (tos 0x10, ttl 61, id 0, offset 0, flags [DF], proto TCP (6), length 52)
172.18.128.204.59180 > 172.18.22.200.22: Flags [.], cksum 0x89d7 (correct), seq 3833060046, ack 3808611483, win 4092, options [nop,nop,TS val 950233961 ecr 87616963], length 0
IP (tos 0x10, ttl 61, id 0, offset 0, flags [DF], proto TCP (6), length 52)
172.18.128.204.59180 > 172.18.22.200.22: Flags [.], cksum 0x88b1 (correct), seq 0, ack 293, win 4086, options [nop,nop,TS val 950233965 ecr 87616967], length 0
抓取经过 interface ens160,DST_MAC 或 SRC_MAC 地址是 00:50:56:bf:c2:c5 的 ICMP 数据包。
[root@localhost ~]# tcpdump -i ens160 '((icmp) and ((ether host 00:50:56:bf:c2:c5)))'
...
15:19:50.522900 IP localhost.localdomain > 172.18.22.41: ICMP redirect 172.18.41.24 to host localhost.localdomain, length 68
抓取经过 interface ens160,目标网络是 172.18 但目标主机又不是 172.18.22.204 的 TCP 且非 22 号端口的数据包。
[root@localhost ~]# tcpdump -i ens160 -c 10 -nnt '((tcp) and (not port 22) and ((dst net 172.18) and (not dst host 172.18.22.204)))'
...
IP 172.18.22.74.47580 > 172.18.22.237.8080: Flags [S], seq 2124823039, win 29200, options [mss 1460,sackOK,TS val 274062379 ecr 0,nop,wscale 7], length 0
IP 172.18.22.237.8080 > 172.18.22.74.47580: Flags [R.], seq 0, ack 2124823040, win 0, length 0
抓取流入 interface ens160,host 为 172.18.22.208 且协议为 ICMP 的数据包。
172.18.128.204 > 172.18.22.200(curr) > 172.18.22.208
[root@localhost ~]# tcpdump -i ens160 -nnt -P in host 172.18.22.208 and icmp
...
IP 172.18.128.204 > 172.18.22.208: ICMP echo request, id 42579, seq 2314, length 64
抓取流出 interface ens160,host 为 172.18.22.208 且协议为 ICMP 的数据包。
172.18.22.208 > 172.18.128.200(curr) > 172.18.128.204
[root@localhost ~]# tcpdump -i ens160 -nnt -P out host 172.18.22.208 and icmp
...
IP 172.18.22.208 > 172.18.128.204: ICMP echo reply, id 42579, seq 2436, length 64
参考资料
https://www.cnblogs.com/chenpingzhao/p/9108570.html
https://www.cnblogs.com/f-ck-need-u/p/7064286.html
https://blog.csdn.net/minxihou/article/details/80243484
常用 tcpdump 抓包方式的更多相关文章
- 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...
- tcpdump抓包命令
本文转自 : http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html http://www.itshouce.com.cn/l ...
- android下tcpdump抓包
tcpdump是最快捷方便的抓包方式,还可以加深对网络协议的理解.android下可以通过如下方式抓包: 1 Android上启动tcpdump Android设备可以把tcpdump的可执行文件上传 ...
- tcpdump抓包并保存成cap文件
首选介绍一下tcpdump的常用参数 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接 ...
- linux使用tcpdump抓包工具抓取网络数据包,多示例演示
tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...
- linux tcpdump 抓包
tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式 tcpdump的参数众多,通过man tcpdump ...
- tcpdump 抓包
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- linux下使用tcpdump抓包分析tcp的三次握手
首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...
- TCPdump抓包命令详解--摘
http://blog.csdn.net/s_k_yliu/article/details/6665673/ http://starsliao.blog.163.com/blog/static/890 ...
随机推荐
- kvm虚拟机热迁移
一.热迁移描述: 相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储,本文这部分内 ...
- 一次NaN引发的npe
# 先上代码 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class QQ { p ...
- Python之路:进程、线程
目录 一.进程与线程区别 1.1 什么是线程 1.2 什么是进程 1.3 进程与线程的区别 二.Python GIL全局解释器锁 三.线程 3.1 threading模块 3.2 Join & ...
- sql练习03
准备数据建表语句CREATE TABLE students(sno VARCHAR(3) NOT NULL, sname VARCHAR(4) NOT NULL,ssex VARCHAR(2) NOT ...
- 快读代码level.2
long long read() { long long ans=0; char last=' ',ch=getchar();//last用来存正负号,并消去那些换行符,空格 ') { last=ch ...
- Linux双网口配置时重复配置DEFROUTE和GATEWAY
配置一台机器时,沿袭了原有网口配置,修改网口名,把em1全部修改改为eth0 mv ifcfg-em1 ifcfg-eth0 mv ifcfg-em2 ifcfg-eth1 改完以后,机器变得不稳定, ...
- Python基于机器学习方法实现的电影推荐系统
推荐算法在互联网行业的应用非常广泛,今日头条.美团点评等都有个性化推荐,推荐算法抽象来讲,是一种对于内容满意度的拟合函数,涉及到用户特征和内容特征,作为模型训练所需维度的两大来源,而点击率,页面停留时 ...
- python web开发中跨域问题的解决思路
线上环境不存在跨域问题,nginx转发 解决思路: 1.什么是跨域 在浏览器窗口中,和某个服务端通过某个 “协议+域名+端口号” 建立了会话的前提下,去使用与这三个属性任意一个不同的源提交了请求,那么 ...
- Java-Web servlet控制器的引入
一.建包 二.建立实体类 参考二维表,考虑各个字段的名字.类型 private String id; private String name; private String address; publ ...
- Python 3标准库 第十四章 应用构建模块
Python 3标准库 The Python3 Standard Library by Example -----------------------------------------第十四章 ...