tcpdump抓包 wireShark

news/2024/11/24 5:17:35/

TCPdump抓包工具介绍

TCPdump,全称dump the traffic on anetwork,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。

tcpdump_3">tcpdump可以支持的功能:

1、在Linux平台将网络中传输的数据包全部捕获过来进行分析
2、支持网络层、传输层协议等协议捕获过滤
3、数据发送和接收的主机、网卡和端口等各种过滤捕获数据规则
4、提供and、or、not等语句进行逻辑组合捕获数据包或去掉不用的信息
5、结合wireshark工具分析捕获的报文

要灵活使用 tcpdump 工具必须要有两个必备的知识基础:
第一、Linux 操作系统:
    因为这是一款基于 Linux 系统下命令行的抓包工具,所以需要对 Linux 的基本操作和常用命令有一定的基础;
第二、网络知识:
    因为 tcpdump 是将网络中传送的数据包完整的截获下来然后进行分析,所以想要分析捕获到的报文,需要了解 OSI 七层网络模型,以及常用网络协议等。

TCPdump抓包工具使用环境和初体验

默认输入 tcpdump 这个命令,回车操作之后,它将监视第一个网络接口上所有流过的数据包,一般是eth0,如下图所示
在这里插入图片描述
20:44:54.485275 IP 115.205.231.25.54845 > iZj6cac8jcykj0pe92w66iZ.ssh: Flags [.], ack 46944, win 510, options [nop,nop,TS val 671165587 ecr 471333], length 0

20:44:54.485301 IP iZj6cac8jcykj0pe92w66iZ.ssh > 115.205.231.25.54845: Flags [P.], seq 59304:59516, ack 1, win 259, options [nop,nop,TS val 471428 ecr 671165587], length 212

以上输出的信息来看,可以总结出:
第一列:时分秒 20:33:22.957272
第二列:网络协议ip
第三列:发送方的ip地址+端口号,115.205.231.25是ip,而54845的端口号 / iZj6cac8jcykj0pe92w66iZ是主机, ssh是协议 表示端口号 22
第四列:箭头 > , 表示数据流向
第五列:接收方的ip地址+端口号,接收方是本机,所以翻译成了iZj6cac8jcykj0pe92w66iZ
第六列:数据包内容,包括Flags 标识符,seg 号,ack号,win 窗口,数据长度 length,其中 [P.]表示 PUSH 标志位为1,更多标识符需要了解TCP协议的标志位。

TCP协议

TCP(Transmission Control Protocol)传输控制协议,顾名思义,就是要对数据的传输进行一定的控制。
在这里插入图片描述
SYN:连接请求或者接受连接请求
FIN:连接结束,断开链接
RST:重置链接
ACK:确认标记位
PSH:催促标志位,将接受缓冲区内数据向上交付给应用程序,而不是等待缓冲区满后再交付。
URG:紧急标志位,将紧急数据排在普通数据的前面;
序号:每个数据包都对应着一个序列号
确认号:每发送一个数据包都需要收到对应的确认包,确认号=序号+1
窗口:滑动窗口 ------ 可靠性+提高报文发送效率

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

TCPdump抓包工具常规过滤

基于IP地址进行过滤: host

案例1: 截获特定主机-220.181.38.148的主机收到的和发出的所有的数据包

tcpdump host 220.181.38.148
解释:host 220.181.38.148,指明 220.181.38.148 是一台主机,如果你非常明确关心的是哪个主机的收发报文,那么就可以直接过滤这个主机的数据包。host后面加主机的IP地址,就可以只抓取这个主机的所有数据包,其他主机的数据包就会被过滤掉。
在这里插入图片描述

案例2:获取目的地址是220.181.38.148 的报文
tcpdump dst 220.181.38.148
解释:dst 指的是目的地址;这个是确定传输方向的关键字,src源;dst 目的

src 是获得原地址的请求报文
dst是获得目标地址的请求报文
在这里插入图片描述
**基于IP地址进行过滤: port **

案例3:获取特定端口-比如http的包,使用如下命令:
tcpdump tcp port 80
解释:port 80 指明端口80,只会抓取这个80端口的数据包;加上具体某个协议的某个端口,就可以更加精确的捕获对应的业务的数据报文了。如上,就会只抓取 TCP 协议的 80 端口的数据报,也就是 http 协议的数据报文。

tcpdump src port 80/tcpdump dst port 80
在这里插入图片描述

如果你想要同时指定两个端口你可以这样写:tcpdump port 80 or port 22、tcpdump port 80 or 22 ;
在这里插入图片描述

如果你的想抓取的不再是一两个端口,而是一个范围,一个一个指定就非常麻烦了,此时你可以这样指定一个端口段。
tcpdump portrange 8000-8080
tcpdump src portrange 8000-8080
tcpdump dst portrange 8000-8080
在这里插入图片描述

对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号:比如 http =80,https = 443 等
tcpdump tcp port http
在这里插入图片描述

基于协议进行过滤:protocal
案例4:获取ICMP协议的报文
tcpdump icmp
解释:标明要抓取的协议报文,一般常用的比如ip ,ip6 ,arp,icmp,tcp,udp
在这里插入图片描述

注意:http,dns,https,ssh 等这些应用层的协议,不能直接这样写,想要写成:
tcpdump port http
或者 tcpdump port 53 (DNS的端口号是53)

tcpdump_103">tcpdump的常用参数

tcpdump -h ——查看所有参数
在这里插入图片描述

-i # 指定监听网络接口
tcpdump -i eth0
默认监听在第一块网卡上,监听所有经过此网卡通过的数据包;但是我们可能关心的数据并不是 eth0 的接口,这时就需要指定端口进行数据包的捕获。
在这里插入图片描述

tcpdump 后面加一个 -i的参数,后面跟具体需要捕获的接口名称,就可以抓取经过这个具体接口的所有数据包。tcpdump -i any 监听所有的网卡接口、用来查看是否有网络流量
在这里插入图片描述

-w #将捕获到的信息保存到文件中,且不分析和打印在屏幕
tcpdump -i eth0 -w tt
报文打印在shel里会太多且不方便查看,我们可以保存成文件;然后通过xftp导出到本地,可以详细查看
在这里插入图片描述

扩展:导出的文件可以设置为cap或者pcap格式,可以直接用wireshark工具打开;
可以用wireshark工具分析报文具体信息!

-r # 从文件中读取数据,读取后,照样可以使用上述的过滤器语法进行过滤分析。
tcpdump -r tt.pcap

-n: 不把ip转化成域名,直接显示ip,避免执行DNS lookups的过程,速度会快很多
在这里插入图片描述

-nn : 不把协议和端口号转化成名字,速度也会快很多。
在这里插入图片描述

-N : 不打印出host的域名部分,比如,如果设置了此选项,tcpdump将会打印’nic’ 而不是’nic.ddn.mil’ 。
在这里插入图片描述
-t :在每行的输出中不输出时间
在这里插入图片描述

-tt : 在每行的输出中会输出时间戳
在这里插入图片描述

-ttt: 输出每两行打印的时间间隔(以毫秒为单位)
在这里插入图片描述

-tttt:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)

在这里插入图片描述

-v:产生详细的输出.比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开些附加的包完整性检测,比如对IP或ICMP包头部的校验和。
在这里插入图片描述

-vv:产生比-v更详细的输出.比如NFS回应包中的附加域将会被打印,SMB数据包也会被完全解码。

-vv:产生比-vv更详细的输出。比如 telent 时所使用的SB,SE选项将会被打印,如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来

-c #指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump,停止抓包
tcpdump -c 20 -w tt.pcap
解释:抓满20个报文之后,就停止tcpdump抓包。
在这里插入图片描述
-C #与 -w FILE 选项配合使用。该选项使得 tcpdump 在把原始数据包直接保存到文件中之前,检查此文件大小是否超过 file-size。如果超过了,将关闭此文件,另创一个文件继续保存原始数据包。新创建的文件名与 -w 选项指定的文件名一致,但文件名后多了一个数字,该数字会从1开始随着新创建文件的增
多而增加。file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节)

tcpdump -C 1 -W 3 -w abc 指定一个单位后(1MB)就换文件,最多写3个文件,名字是abc0,abc1.abc2

在这里插入图片描述
在这里插入图片描述
选择是入方向还是出方向的数据包,可选项有:in,也可以使用–direction=[direction]
tcpdump -Q in
tcpdump -Q out
tcpdump -Q inout

在这里插入图片描述
在这里插入图片描述
-q:简洁地打印输出。即打印很少的协议相关信息,从而输出行都比较简短.
在这里插入图片描述

-D:显示所有可用网络接口的列表
在这里插入图片描述

-L: 列出网络接口的已知数据链路。
在这里插入图片描述
7、 -s #指定每个包捕获的长度、单位是 byte,而不是默认的262144bytes;
如果超过了设定的大小限制,包就会被阶段,而在打印行出现[|proto]这种标识,这个proto就是被截断的报文的协议名字。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好(-s0使用默认长度262144)。
在这里插入图片描述

注意:不同的tcpdump版本,这个默认抓取的报文的长度不一样
在这里插入图片描述
帮助文档的指令 : man tcpdump

8、 -A : #以ASCII 格式打印出所有的分组并且读取此文件,这样可以使读取更加简单,方便使用 grep 等工具解析输出内容

--- tcpdump -A -r tt2

--- tcpdump -A | grep baidu
在这里插入图片描述
在这里插入图片描述

-X表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这-X和-A两个参数不能一起使用
--- tcpdump -X -r tt2

9、-e #在输出行打印出数据链路层的头部信息。默认情况下 tcpdump 不会显示数据链路层信息,使用 -e选项可以显示源和目的 MAC 地址,以及 VLAN tag 信息。例如:
--- tcpdump -e -r tt2

10、-F指定使用哪个文件的过滤表达式抓包。此时命令行上的输入规则将被忽略
tcpdump -F filter_rule -c 10
这种情况适用于将表达式放置在文件中长期维护

11、-l #对标准输出进行行缓冲,在需要同时观察抓包打印以及保存抓包记录的时候很有用。比如,可通过以下命令组合来达到此抓包时保存到文件的同时查看包的内容。
-- tcpdump -l | tee dat
dat是文件的名字

这命令是使用tee来把tcpdump 的输出同时放到文件dat和标准输出中
tee 功能说明:读取标准输入的数据,并将其内容输出成文件
-- tcpdump -l > dat & tail -f dat
这个命令是通过重定向操作 ‘>’ 把数据写入对应的文件中

逻辑运算

逻辑运算符:and or not
and:所有的条件都需要满足,也可以表示为 &&
or:只要有一个条件满足就可以,也可以表示为
not:取反,也可以使用!

and例子:抓一个来自100.100.30.26主机,80端口的包 – tcpdump src 100.100.30.26 and port 80

or例子:抓取UDP 53端口或者TCP 53端口的包(DNS协议的报文) – tcpdump tcp port 53 or udp port 53

not例子:抓取不是22端口的报文 – tcpdump not tcp port 22

多个过滤器进行组合:需要用到括号,而括号在 shell 中是特殊符号,因为需要使用引号将其包含: --and 优先级高于 or
tcpdump “src 10.0.2.4 and (dst port 3389 or 22)"

实际案例 :监听主机192.168.56.1和192.168.56.210之间ip协议的80端口的且排除www.baidu.com通信的所有数据包:
tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! www.baidu.com
tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host not www.baidu.com
即not和!都是相同的取反的意思

高级过滤

1、基于包大小进行过滤:查看指定大小的数据包
案例:抓取包大小小于32bytes的数据包
tcpdump less 32
案例:抓取包大小大于100bytes的数据包
tcpdump greater 300

tcpdump___244">tcpdump 总结图

在这里插入图片描述

WireShark

按IP地址过滤

想看源ip为xxx的包

ip.src==192.168.40.1
在这里插入图片描述

想看目标ip为xx的包

ip.dst==239.255.255.250
在这里插入图片描述

想看源或目标ip为xx的包

ip.addr==192.168.18.128
在这里插入图片描述

按MAC地址过滤

想看源MAC为xx的包

eth.src==76-6C-80-82-D7-13

想看目标MAC为xx的包

eth.dst==76-6C-80-82-D7-13

想看源或目标MAC为xx的包

eth.addr==76-6C-80-82-D7-13

按端口号过滤

过滤tcp端口为4694的包

tcp.port==4694

过滤源端口为4694的包

tcp.srcport==4694

过滤目标端口为4694的包

tcp.dstport==4694

按协议类型过滤

常见的协议
arp
dhcp
https

规则组合

and

查看dhcp,tcp 包,并且只想查看某台电脑的dhcp包和tcp包
tcp and dhcp and eth.addr ==76-6C-80-82-D7-13

在这里插入图片描述
tcp and dhcp
在这里插入图片描述

or

查看dhcp 或者 arp
在这里插入图片描述

tcp or dhcp
在这里插入图片描述

通过icmp报文排查网络故障

icmp 测试网络连通性
通,告知延迟

不通,告知原因,用icmp包里的type +code ,两个数字的组合,代表故障原因

常见的错误及原因

1.没配网关     传输失败,常见故障
2.配了网关,但是找不到网关。    来自本机(可能是主机的IP地址)的回复,无法访问目标主机     自己发arp寻找网关mac,失败
3.配了网关,也能找到网关。     来自网关的回复,无法访问目标网络。    网络设备缺少路由
4.配了网关,也能找到网关,网关也有目标路由。但是后面的设备缺路由。
4.1 后面的设备,有回包的路由,没有目的地的路由。     报错:来自缺路由的设备,无法访问目标网络。
4.2 后面的设备,没有回包的路由,没有目的地的路由。     超时

B机器 ping A 机器
A机器 ping B机器

数据包都是有去有回,如果不通那就是防火墙的问题
不通的那个机器 将 防火墙 禁ping了

windows防火墙特性
出站连接,默认放行
入站连接,默认禁止。需要允许通,防火墙要设置放行

icmp协议

Internet控制消息协议ICMP(Internet Control Message Protocol)是IP协议的辅助协议

ICMP协议用来在网络设备间传递各种差错和控制信息,对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。

在这里插入图片描述

ICMP报文

在这里插入图片描述

icmp 中 Type+Code的请求含义

TypeCode描述
00Echo Reply(请求的响应)
30网络不可达
31主机不可达
32协议不可达
33端口不可达
50重定向
80Echo Request(请求)
110TTL值没了,丢包了

8+0 Echo Request(请求)
在这里插入图片描述
0+0 Echo Reply(请求的响应)
在这里插入图片描述
3+0 网络不可达
缺路由(路由没配)
在这里插入图片描述
3+1 主机不可达
不缺路由,缺arp (根据路由表里的直连路由查询arp,没查到对应的mac)
在这里插入图片描述
3 + 3 端口不可达
传输层端口, 目标主机,没开放相关的端口
(33440端口没开)
在这里插入图片描述
3+2协议不可达
在这里插入图片描述

协议号和端口号的区别?
协议号:ip头部里的字段,标识这个数据包是tcp(6),还是udp(17),还是icmp(1),还是gre(50),还是ospf(89)还是vrrp(112‌)

端口号:tcp,udp头部里的字段,标识这个数据包是http(80),还是dns(53),还是ftp(21),tftp( 69),smtp(25)

什么是gre?
两台路由器,想建立gre的 联系
路由器A配置好了             路由器B没配置
A寻找B,建立gre连接     B回一个消息,协议不可达

DNS的协议号和端口号
在这里插入图片描述

HTTP的协议号和端口号

在这里插入图片描述

在这里插入图片描述

11+0 TTL没了,丢包了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常见的网络协议工作过程

DNS

提供了主机名字和IP地址之间的相互转换
DNS系统的模式
采用客户端/服务器模式

在这里插入图片描述

FTP

FTP协·议是互联网上广泛使用的文件传输协议
客户端/服务端模式,基于TCP
FTP采用双TCP连接方式

TFTP

TFTP(简单文件传输协议)也是采用客户机/服务器模式的文件传输协议
TFTP适用于客户端和服务器之间不需要复杂交互的环境
TFTP承载在UDP之上,端口号69
TFTP仅提供简单的文件传输功能(上传、下载)
TFTP没有存取授权与认证机制,不提供目录列表功能
TFTP协议传输是由客户端发起的

Telnet

远程管理网络设备
测试端口可达性

利用Wireshark 获取用户密码

客户端登录网页,抓取请求
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/1549454.html

相关文章

移远通信推出全新5G RedCap模组RG255AA系列,以更高性价比加速5G轻量化大规模商用

11月20,全球领先的物联网整体解决方案供应商移远通信宣布,正式推出其全新5G RedCap模组RG255AA系列。该系列模组支持5G NR独立组网(SA)和LTE Cat 4双模通信,具有高性能高集成度、低功耗、小尺寸、高性价比等优势&#…

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 (一)-XX:PrintCommandLineFlags (二)-XX:PrintFlagsFinal 二、堆空间的配置 (一)默认配置 (二)配置Elasticsearch堆内存时,将初始大小设置为…

大语言模型---通过数值梯度的方式计算损失值L对模型权重矩阵W的梯度;数值梯度的公式;数值梯度计算过程

文章目录 概要1. 数值梯度的公式2. 数值梯度计算过程3. 数值梯度的特点 概要 前文已经简单介绍梯度,本文主要介绍大语言模型中使用数值梯度的方法实现 损失值 L L L 对模型权重矩阵的梯度计算,而不是传统的链式法则进行梯度计算。如果想要理解整体计算方…

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介 登录模块很简单,前端发送账号密码的表单,后端接收验证后即可~ 淦!可是我想多了,于是有了以下几个问题(里面还包含网络安全问题): 1.登录时的验证码 2.自动登录的实现 3.怎么维护前后端…

Linux第95步_Linux内核中的INPUT子系统

Linux内核对“按键、鼠标、键盘、触摸屏”等这一类输入设备而创建的“框架”被称为“input子系统”,它们在本质上还是字符设备,只是采用input子系统处理输入事件,并上报给用户。前面讲的“pinctrl子系统和gpio子系统”主要用于GPIO驱动开发&a…

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果: – 使用Pygame模拟粒子运动,粒子会以爱心的轨迹分布并运动。爱心公式: 爱心的数学公式: x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果: 粒子…

2024/11/18学习日志

为了更好地记录并反思自己的学习状况,将每日学习的内容、时长、心得等记录于此日志。 于9月3日开始记录,计划每日记录,希望至少能够坚持一个学期。 学习内容: 大物: 尺缩效应m的变化相对论框架下的能量 计数&#…

C#调用JAVA

参考教程:使用IKVMC转换Jar为dll动态库(含idea打包jar方法)-CSDN博客 已经实践过,好使。