Linux命令--tcpdump命令--使用与详解

原文网址:Linux命令--tcpdump命令--使用与详解_IT利刃出鞘的博客-CSDN博客

简介

本文介绍Linux的tcpdump命令的用法。

tcpdump可以输出网络的通信记录,可以用来排查问题、查看被攻击网站的详细情况等。

示例

捕获eth0的数据包

tcpdump -i ens33

捕获从指定ip进来的数据包

tcpdump -i ens33 src 192.168.1.1

获取本机123端口的UDP协议包 

tcpdump udp port 123

在eth0口抓取dhcp所有报文,并详细输出

tcpdump -i ens33 -s 0 'udp and port 67 and port 68' -XX -vvv -nn

捕获协议类型为tcp,80端口的包 

tcpdump -nni ens33 'tcp port 80' 

截获主机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 \)

指捕获SYN(TCP握手请求) 

tcpdump -i ens33 'tcp[tcpflags] = tcp-syn'

也可以这么写:

tcpdump -i ens33 'tcp[tcpflags] & tcp-syn != 0'

抓SYN, ACK(可以用来查看http三次握手)

tcpdump -i ens33 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'

监视指定网络的数据包

如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包 

tcpdump -i ens33 -c 10 net 192.168

使用tcpdump抓取HTTP包 

tcpdump -i ens33 tcp[20:2]=0x4745 or tcp[20:2]=0x504f

tcp[20:2]=0x4745 为HTTP-GET 请求,0x504f为HTTP-POST请求,利用该条命令抓取HTTP的GET和POST请求。 

解析包数据

tcpdump -c 2 -q -XX -vvv -nn -i ens33 tcp port 22

命令格式

tcpdump [option] [proto] [dirction] [type]
  • option:选项
  • proto:协议过滤器
    • 可识别的关键词有:http,tcp,udp,icmp,ip,ip6,arp,rarp
  • type:类型过滤器。
    • 可识别的关键词有:host,net,port,portrange。这些词后面还需要再接参数
  • directiron:数据流向过滤器
    • 可识别的关键字有:src,dst,src or dst

选项

  • -A:以ASCII码方式显示每一个数据包(不显示链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据;
  • -c:tcpdump 到捕获 count 个包就退出;
  • -C:file-size,tcpdump在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size,如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录,新创建的文件名与-w选项指定的文件名一致,但文件名后多了一个数字,该数字会从1开始随着新创建文件的增多而增加,file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节,后者是以1024字节为1k, 1024k字节为1M计算所得,即1M=1024 * 1024 = 1,048,576);
  • -d:打印出易读的包匹配码;
  • -dd:以C语言的形式打印出包匹配码
  • -ddd:以十进制数的形式打印出包匹配码
  • -D:显示所有可用网络接口的列表;
  • -e:每行的打印输出中将包括数据包的数据链路层头部信息;
  • -E:解析IPSEC数据;
  • -F:使用file 文件作为过滤条件表达式的输入,此时命令行上的输入将被忽略;
  • -i:指定的网卡接口。若不带-i参数,默认监视第一个网络接口(非lo口)上的数据包。
    • 查看某个网卡(比如ens33):tcpdump -i ens33
    • 查看所有网卡的方法:-i any;
  • -n:不把ip转化成域名,直接显示 ip;
  • -nn:不把协议和端口号转化成域名;
    • 这样不仅方便查看 IP 和端口号,而且非常高效,因为域名解析会降低抓取速度。
  • -N:不打印出host 的域名部分。
    • 比如:如果设置了此选现,tcpdump 将会打印'nic' 而不是 'nic.ddn.mil'。
  • -l:基于行的输出,便于保存查看,或者交给其它工具分析;
  • -L:列出指定网络接口所支持的数据链路层的类型后退出;
  • -q:简洁地打印输出。即打印很少的协议相关信息, 从而输出行都比较简短;
  • -Q:选择是入方向还是出方向的数据包,可选项有:in, out, inout;
  • -r:从文件中读取数据。也可使用参数过滤。
    • 例1:tcpdump icmp -r all.pcap
    • 例2:tcpdump icmp -r all.pcap -A -s 0
  • -s:tcpdump默认只会截取前96字节的内容,要想截取所有的报文内容,可以使用 -s number,number就是你要截取的报文字节数,如果是0的话,表示截取报文全部内容。
  • -S:使用绝对序列号,而不是相对序列号。
  • -t:在每行的输出中不输出时间;
  • -tt:在每行的输出中输出时间戳;
  • -ttt:输出时,每两行打印会延迟一段时间(以毫秒为单位);
  • -tttt:在每行打印的时间戳之前添加日期的打印(此选项输出的时间最直观);
  • -v:产生详细的输出。比如:包的TTL,id标识,数据包长度,以及IP包的一些选项。还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和;
  • -vv:产生比-v更详细的输出。比如:打印NFS回应包中的附加域将,解码SMB数据包。
  • -vvv:产生比-vv更详细的输出。比如 telent 时所使用的各种扩展选项都会被打印,如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来。
  • -w:将 tcpdump 抓到的数据生成到文件。生成的文件可以用wireshark等分析。
    • 例如:tcpdump icmp -w icmp.pcap
  • -x:以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部);
  • -xx:以16进制的形式打印每个包的头部数据(包括数据链路层的头部);
  • -X:以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部);
  • -XX:以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部);
  • -Z:后接用户名,在抓包时会受到权限的限制。如果以root用户启动tcpdump,tcpdump将会有超级用户权限;

结果的含义

输出示例

21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48
  • 第一列:时分秒毫秒 21:26:49.013621
  • 第二列:网络协议 IP
  • 第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号
  • 第四列:箭头 >, 表示数据流向
  • 第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号
  • 第六列:冒号
  • 第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面

Flags 标识符

使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:

  • [S] : SYN(开始连接)
  • [P] : PSH(推送数据)
  • [F] : FIN (结束连接)
  • [R] : RST(重置连接)
  • [.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)

过滤规则

常用规则

基于主机(host)过滤

tcpdump host 210.21.48.1
tcpdump host www.baidu.com

数据包的 ip 可以再细分为源ip和目标ip两种

# 根据源ip进行过滤
tcpdump -i eth2 src 192.168.10.100

# 根据目标ip进行过滤
tcpdump -i eth2 dst 192.168.10.200

基于网段(net)过滤

若你的ip范围是一个网段,可以直接这样指定 

tcpdump net 192.168.10.0/24

网段同样可以再细分为源网段和目标网段

# 根据源网段进行过滤
tcpdump src net 192.168

# 根据目标网段进行过滤
tcpdump dst net 192.168

基于端口(port)过滤

使用 port 可以指定特定端口进行过滤

tcpdump port 8088

端口同样可以再细分为源端口,目标端口

# 根据源端口进行过滤
tcpdump src port 8088

# 根据目标端口进行过滤
tcpdump dst port 8088

同时指定两个端口(下边两个方法都可以):

tcpdump port 80 or port 8088
tcpdump port 80 or 8088

指定端口范围:

tcpdump portrange 8000-8080

也是可以指定源和目标:

tcpdump src portrange 8000-8080
tcpdump dst portrange 8000-8080

对于一些常见协议的默认端口,可以直接使用协议名,比如 http == 80,https == 443 等:

tcpdump tcp port http

基于协议(proto)过滤

只查看 icmp 的包:

tcpdump icmp

protocol 可选值:tcp, udp, icmp, http, ip,ipv6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui 

基于IP协议的版本进行过滤

查看 tcp 的包,也许会这样写:tcpdump tcp,这样会包括IPV4和IPV6的。

指定IPV4的tcp包的方法(数字 6 表示的是 tcp 在ip报文中的编号):

tcpdump 'ip proto tcp'
tcpdump ip proto 6
tcpdump 'ip protochain tcp'
tcpdump ip protochain 6

指定IPV6的tcp包的方法:

tcpdump 'ip6 proto tcp'
tcpdump ip6 proto 6
tcpdump 'ip6 protochain tcp'
tcpdump ip6 protochain 6

关于上面这几个命令示例,有两点需要注意:

跟在 proto 和 protochain 后面的如果是 tcp, udp, icmp ,那么过滤器需要用引号包含,这是因为 tcp,udp, icmp 是 tcpdump 的关键字。

规则组合

支持如下逻辑操作符:

  • and:所有的条件都需要满足。也可以表示为 &&
  • or:只要有一个条件满足就可以。也可以表示为 ||
  • not:取反。也可以使用 !

例1:来自10.5.2.3,发往任意主机的3389端口的包

tcpdump src 10.5.2.3 and dst port 3389

例2:主机10.0.16.10和主机1.15.63.152或1.15.63.153的通信 

tcpdump -i eth0 host 10.0.16.10 and (1.15.63.152 or 1.15.63.153)

使用多个过滤器进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,因为你需要使用引号将其包含。例子如下:

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

在单个过滤器里,常常会判断一条件是否成立,这时候,就要使用下面的符号

  • =:判断二者相等
  • ==:判断二者相等
  • !=:判断二者不相等

当你使用这两个符号时,tcpdump 还提供了一些关键字的接口来方便我们进行判断,比如

  • if:表示网卡接口名、
  • proc:表示进程名
  • pid:表示进程 id
  • svc:表示 service class
  • dir:表示方向,in 和 out
  • eproc:表示 effective process name
  • epid:表示 effective process ID

比如我现在要过滤来自进程名为 nc 发出的流经 en0 网卡的数据包,或者不流经 en0 的入方向数据包,可以这样写:

tcpdump "( if=en0 and proc =nc ) || (if != en0 and dir=in)"

其他示例 

例1:接口eth0,协议tcp,端口为80,目的ip为 1.15.63.151 和 1.15.63.152

tcpdump -i eth0 '((tcp) and (port 80) and ((dst host 1.15.63.151) or (dst host 1.15.63.152)))'

例2:接口eth0,协议为tcp,网络为1.15.63,但不为  1.15.63.152 端口

tcpdump -i eth0 '((tcp) and ((dst net 1.15.63) and (not dst host 1.15.63.152)))'

高级过滤

可以从包头过滤信息,例如:

proto[x:y]          : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
proto[x:y] & z = 0  : proto[x:y]和z的与操作为0
proto[x:y] & z !=0  : proto[x:y]和z的与操作不为0
proto[x:y] & z = z  : proto[x:y]和z的与操作为z
proto[x:y] = z      : proto[x:y]等于z

支持的操作符:

>, <, >=, <=, =, !=

IP头(IPV4)

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    | <-- optional
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            DATA ...                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/*IP头定义,共20个字节*/
typedef struct _IP_HEADER
{
 char m_cVersionAndHeaderLen;       //版本信息(前4位),头长度(后4位)
 char m_cTypeOfService;           // 服务类型8位
 short m_sTotalLenOfPacket;        //数据包长度
 short m_sPacketID;             //数据包标识
 short m_sSliceinfo;            //分片使用
 char m_cTTL;                 //存活时间
 char m_cTypeOfProtocol;         //协议类型
 short m_sCheckSum;             //校验和
 unsigned int m_uiSourIp;         //源ip
 unsigned int m_uiDestIp;         //目的ip
} __attribute__((packed))IP_HEADER, *PIP_HEADER ;

抓取特定包头实例

抓取源端口大于1024的TCP数据包

tcpdump -i eth1 'tcp[0:2] > 1024'

只抓SYN包,第十四字节是二进制的00000010,也就是十进制的2

tcpdump -i eth1 'tcp[13] = 2'

抓SYN, ACK (00010010 即十进制的18)

tcpdump -i eth1 'tcp[13] = 18'

抓所有包含FIN标记的包(FIN通常和ACK一起,表示会话结束)

tcpdump -i eth1 'tcp[13] & 1 = 1'

抓RST

tcpdump -i eth1 'tcp[13] & 4 = 4'

常用的字段偏移名字

tcpdump考虑了一些数字恐惧症者的需求,提供了部分常用的字段偏移名字:

  • icmptype (ICMP类型字段)
  • icmpcode (ICMP符号字段)
  • tcpflags (TCP标记字段)

TCP标记值:

tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-push, tcp-ack, tcp-urg

这样上面按照TCP标记位抓包的就可以写直观的表达式了:

抓SYN包

tcpdump -i ens33 'tcp[tcpflags] = tcp-syn'

使用tcpdump抓取HTTP的GET包

tcpdump -XvvennSs 0 -i ens33 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/602194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 入门(六) —— Android 下的人脸识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

如何查看打包后的jar包启动方法

背景 有时候我们在引用一个jar包的时候,想查看一个jar包的结构,这时候查看启动类就比较重要,因为一些关键配置是在启动类上的,这里教大家如何查看这个启动类(springboot项目) 步骤 首先打开jar包预览结构,可以使用解压缩工具直接双击打开或者预览结构 打开路径 META-INF/MA…

遥感+大数据为智慧无人农场按下“倍速键”

春回大地万象“耕”新&#xff0c;在襄阳市襄州区张家集镇近2000亩小麦绿意盎然、勃勃生机。 湖北绿神农业科技有限公司的生产经理王真指着监控室的电脑屏幕&#xff0c;告诉记者在与珈和科技合作开发的农田遥感监测平台上各类农田数据一目了然&#xff0c;为实现农业智能化管理…

TriCore User Manual 笔记 1

说明 本文是 英飞凌 架构文档 TriCore TC162P core archiecture Volume 1 of 2 (infineon.com) 的笔记&#xff0c;稍作整理方便查阅&#xff0c;错误之处&#xff0c;还请指正&#xff0c;谢谢 :) 1. Architecture 2. General Purpose & System Register 名词列表&#…

记录一个RSA加密js逆向

network调试就不说了吧 pwd加密参数 搜索pwd参数定位逆向 可以看到有很多关键词 但是我们细心的朋友会发现加密函数关键字 encrypte 打上断点 调试 发现在断点处停止了 并且框选函数发现了一串加密值 虽然不一样但是大概率是这个 并且没你每次放置移开都会刷新 所以如果这个就是…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-14-主频和时钟配置

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

2024上半年软考新规,对高级论文科目不太友好

辽宁省发布了《关于2024年上半年计算机技术与软件专业技术资格(水平)考试批次安排的通知》&#xff0c;通知原文如下&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 1.…

群晖上部署农场管理系统farmOS

什么是 farmOS &#xff1f; farmOS 是一个基于 Web 的应用程序&#xff0c;用于农场管理、规划和记录保存。它由志愿者社区开发&#xff0c;旨在为农民、开发人员和研究人员提供一个标准平台。 需要注意的是&#xff0c;群晖内核版本太低会遇到下面的错误&#xff0c;这个 AH0…

k8s集群部署

部署k8s集群 要求&#xff1a; 主机192.168.199.149&#xff08;master&#xff09;node节点&#xff08;192.168.199.150,192.168.199.151&#xff09;2个cpu或更多 所有机器可以联网&#xff0c;湖湘之间可以ping同&#xff0c;关闭防火墙&#xff0c;selinux&#xff0c;…

Python——Numpy基础分析(1)

一、数据集 1.数据说明 fixed acidity 固定酸度 volatile acidity 挥发性酸度 pH 酸碱值 alcohol 酒精度数 quality 品质得分 2.部分数据展示 图 1-1部分数据展示 若需要全部数据&#xff0c;请私信作者&#xff0c;谢谢 二、导入数据——使用genfromtxt函数来读取文件…

Tansformer原理解读

什么是注意力机制 生物学中的注意力机制是指人类或动物能够选择性地将感知和认知资源集中到某些信息或任务上的能力。这种能力允许我们在众多信息的背景中过滤出重要的信息&#xff0c;并将这些信息传递给相应的神经元进行处理。 本质&#xff1a;能从中抓住重点&#xff0c;…

Fastgpt知识库接入oneapi和自定义大模型

本期教程教大家训练自己的知识库回答chatgpt回答不了的问题 FastGPT 是一个知识库问答系统,可以通过调用大模型和知识库回答特定的问题 可以做成专属 AI 客服集成到现有的APP或者网站内当作智能客服支持网络爬虫学习互联网上的很多知识可以通过flow可视化进行工作流程编排 本期…

Dask简介

目录 一、概述 二、编程模型 2.1 High-Level Collection 2.2 Low level Interface 三、调度框架 3.1 任务图 3.2 调度 3.3 优化 3.4 动态任务图 一、概述 Dask是一个灵活的Python并行计算库。 Dask由两部分组成&#xff1a; 为计算优化的动态任务调度&#xff1a;和A…

汇凯金业:黄金价格波动的原因是什么

黄金价格波动的原因通常是多方面的&#xff0c;包括但不限于&#xff1a; 经济数据&#xff1a;比如就业数据、通胀率、GDP增长率等对经济状况的指标不及预期&#xff0c;可能会增加黄金作为避险资产的吸引力。 货币政策&#xff1a;央行的利率决策、货币供应量的变化、量化宽…

【每日力扣】543. 二叉树的直径与101. 对称二叉树

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 543. 二叉树的直径 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的…

vue项目基于WebRTC实现一对一音视频通话

效果 前端代码 <template><div class"flex items-center flex-col text-center p-12 h-screen"><div class"relative h-full mb-4 fBox"><video id"localVideo"></video><video id"remoteVideo">…

深圳车间厂房降温用什么设备好?

环保水空调&#xff08;也被称为水冷空调或蒸发式降温换气机组&#xff09;的特点主要体现在以下几个方面&#xff1a; 节能环保&#xff1a;环保水空调使用水作为冷媒介&#xff0c;相比传统空调的制冷方式&#xff0c;它能在制冷过程中节约更多的能源&#xff0c;减少碳排放…

羊大师分析,为什么羊奶是孩子的理想饮品?

羊大师分析&#xff0c;为什么羊奶是孩子的理想饮品&#xff1f; 羊奶&#xff0c;作为一种传统的营养饮品&#xff0c;近年来逐渐受到家长们的青睐&#xff0c;成为孩子们的理想饮品。那么&#xff0c;羊大师将为大家讲解&#xff0c;为什么羊奶能够赢得如此多的赞誉&#xf…

Beego 使用教程 5:页面视图

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发&#xff0c;包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado&#xff0c; Sinatra 和 Flask beego 官网&#xff1a;http://beego.gocn.vip/ 上面的 bee…

如何备考PMP才能一次通过?

PMP备考一个月就能通过&#xff0c;培训机构中就应该这么学&#xff01; PMP考试的难度其实并没有大家想象中的那么大&#xff0c;现在培训机构的通过率基本也在90%以上&#xff0c;而这90%以上也基本都是头一次参加考试很少有参加重考的学员。我就是在威班PMP培训了一个多月一…
最新文章