性能分析之tcpdump抓包

news/2024/2/29 4:01:00

1. 简单用法


tcpdump -i any port 8382 -s 0 -C 200 -w steem.cap

1.1. 参数说明


-i any        指定抓取的网卡,通常是eth0,示例里any表示抓取所有网卡的包;;
port 8382     指定抓取的端口,包括发送端口或接收端口,只要有一个匹配就记录,如果不配置表示抓取所有端口;
-s 0          抓到的包后对包大小进行裁剪,一般是0,表示不裁剪,记录完整的包体内容;
-C 200        对落地的抓包文件进行拆分,每200M生成一个独立文件;
-w steem.cap  落地文件名,文件拆分场景下会在后面加上序号;

2. 简介

tcpdump 是一个运行在命令行下的抓包工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于大多数的类Unix系统操作系统(如linux,BSD等)。

3. 命令格式

tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ] [ --count ] [ -C file_size ]
[ -E spi@ipaddr algo:secret,... ]
[ -F file ] [ -G rotate_seconds ] [ -i interface ]
[ --immediate-mode ] [ -j tstamp_type ] [ -m module ]
[ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
[ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --micro ] [ --nano ]
[ expression ]

4. 配置项说明


详细信息参见:pcap-filter(7) man page | TCPDUMP & LIBPCAP

4.1. 过滤

-i interface 或 --interface=interface
指定tcpdump 需要监听的接口.如果没有指定,则由tcpdump自行选择编号最小的接口.any是个虚拟网络接口,可以接收所有网络接口上的数据包.
expression
决定包的过滤条件,表达式结果为true的包会被记录。

4.2. 落地


-F file
使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.
-s snaplen 或 --snapshot-length=snaplen
设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节.把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.
需要注意的是, 采用长的抓取长度(nt: snaplen比较大), 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.
-w file
把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.
-C file_size
按文件大小拆包,此选项需要配合-w file 选项使用。
该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. 
后面可以携带k/K, m/M or g/G分别表示KiB、MiB、GiB。默认可以简单认为是M(实际是百万字节,即1,000,000字节,而不是1,048,576字节)。
-W filecount
限制生成的文件数目,此选项与-C 选项配合使用。
当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序.

4.3. 打印


-e
每行的打印输出中将包括数据包的数据链路层头部信息(例如MAC地址).
-n
不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.
-q
快速(也许用'安静'更好?)打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.
-l
对标准输出进行行缓冲(nt: 使标准输出设备遇到一个换行符就马上把这行的内容打印出来).在需要同时观察抓包打印以及保存抓包记录的时候很有用. 比如, 可通过以下命令组合来达到此目的:
tcpdump -l | tee dat或者 tcpdump -l > dat & tail -f dat.(nt: 前者使用tee来把tcpdump 的输出同时放到文件dat和标准输出中, 而后者通过重定向操作'>', 把tcpdump的输出放到dat 文件中, 同时通过tail把dat文件中的内容放到标准输出中)

4.4. 其他


-v
当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.
-vv
产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码.
-vvv
产生比-vv更详细的输出. 比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,
其相应的图形选项将会以16进制的方式打印出来(nt: telnet 的SB,SE选项含义未知, 另需补充).

5. 过滤表达式(pcap-filter)


详细信息参见
pcap-filter(7) man page | TCPDUMP & LIBPCAP
expr relop expr
expr是一个算术表达式;relop是一个关系操作符;
与C语法一致,表达式中可以使用整数、二进制操作符(+ - * / & | << >>)等,关系操作符可以是(<, >, <=, >=, =, ==, !=);
dst host host 或 dst net net
消息的目的地址是host/net则为true. host可以是一个ip地址,也可以是一个主机名.
src host host 或 src net net
消息的源地址是host/net则为true. host可以是一个ip地址,也可以是一个主机名.
host host 或 net net
消息的目的地址或者源地址是host/net则为true. host可以是一个ip地址,也可以是一个主机名.
dst port port
消息的目的端口是port则为true.
src port port
消息的源端口是port则为true.
port port
消息的目的端口或者源端口是port则为true.
dst portrange port1-port2
消息的目的端口在port1到port2范围内则为true.
src portrange port1-port2
消息的源端口在port1到port2范围内则为true.
dst portrange port1-port2
消息的目的端口或者源端口在port1到port2范围内则为true.
less length 或 len <= length
消息的长度小于等于length则为true.
greaterlength 或 len >= length
消息的长度大于等于length则为true.
ip proto protocol 或 ip6 proto protocol
消息为IPV4/IPV6,且协议类型为protocol则为true. protocol可以是\tcp、\udp等(tcp和udp是关键字,因此要加反斜杠转义).
ip broadcast
消息为IPV4广播数据包则为true.
ip multicast 或 ip6 multicast
消息为IPV4/IPV6组播数据包则为true.

6.注意事项


   抓包的目的是为了分析数据的存在性时,需要确定什么类型的消息,来源和目的地址。分析消息耗时则需要确保在同一个机器上分析请求和应答,避免机器时间差造成结果的不准确。cap文件可以拿到windows上用工具Wireshark分析。


7. 更多参考

https://www.cnblogs.com/tangxiaosheng/p/4950055.html


https://www.xjx100.cn/news/3119073.html

相关文章

四则计算机实现(C++)(堆栈的应用)

算法要求&#xff1a; 输入一个数学表达式(假定表达式输入格式合法)&#xff0c;计算表达式结果并输出。数学表达式由单个数字和运算符“”、“-”、“*”、“/”、“(、) ”构成&#xff0c;例如 2 3 * ( 4 5 ) - 6 / 4。变量、输出采用整数&#xff0c;只舍不入。 图解算…

SQL Server对象类型(8)——4.8.约束(Constraint)

4.8. 约束(Constraint) 4.8.1. 约束概念 与Oracle中的一样,SQL Server中,约束是虚的、被定义的数据库对象,其本身并不存储数据,其通过一些内置或用户自定义逻辑来实现对表中数据的检查和限制,以使这些表数据符合某个或某些规则或标准,从而实现数据的规则化、标准化和…

linux socket套接字

文章目录 socket流socket&#xff08;TCP&#xff09;数据报socket&#xff08;UDP&#xff09; 讨论 socket 所谓套接字&#xff0c;就是对网络中不同主机上的应用程序之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;套接字提供了应用层进程利…

Hive_last_value()

在SQL中&#xff0c;LAST_VALUE()函数是一个窗口函数&#xff0c;用于返回窗口内的最后一个值。窗口函数允许你在一组行上执行计算&#xff0c;这组行与当前行有某种关系。可以将它们想象为与当前行相关的“窗口”。 LAST_VALUE()函数通常与OVER()子句一起使用&#xff0c;后者…

Node.js 万字教程

0. 基础概念 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;使用了一个事件驱动、非阻塞式 I/O 模型&#xff0c;让 JavaScript 运行在服务端的开发平台。 官方地址&#xff1a;https://nodejs.org/en 中文地址&#xff1a;https://nodejs.org/zh-cn 代…

基于Django+Tensorflow卷积神经网络鸟类识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介系统概述系统功能核心技术系统架构系统优势 二、功能三、系统四. 总结  总结 一项目简介 介绍一个基于DjangoTensorflow卷积神经网络鸟类识别系统是一个非…

掌握Flask:从入门到精通指南

掌握Flask&#xff1a;从入门到精通指南 Flask 是一个轻量级的 Python Web 应用程序框架&#xff0c;具有简单易学、灵活性高等特点&#xff0c;适合用于快速开发 Web 应用程序。本文将全面介绍 Flask 框架的各个方面&#xff0c;包括基本概念、路由、模板渲染、表单处理、数据…

Golang rsa 验证

一下代码用于rsa 签名的验签&#xff0c; 签名可以用其他语言产生。也可以用golang生成。 package mainimport ("crypto""crypto/rsa""crypto/sha256""crypto/x509""encoding/pem""errors""fmt" )fun…