linux常用网络工具汇总
- 6. 抓包工具
- 6.1 wireshark
- 安装
- 界面介绍
- 使用
- 过滤器
- TCP协议示例
- 关于wireshark的缺点
- 6.2 tcpdump
- 命令格式
- 关键字
- 使用
- 关于tcpdump的缺点
- 6.3 fiddler
- 6.4 burpsuite
6. 抓包工具
6.1 wireshark
Wireshark
(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
这款软件在windows和macOS中使用较多,但也支持linux,毕竟提供了源码。
安装
下载地址 官网,一定要看好是官网才下载哦
注意:win10以前的系统,安装4.0的版本,win10及以后版本安装4.2版本,具体看下说明
安装期间会提示安装Npcap,勾选安装即可,如果已安装了,可以忽略
Npcap是一组网络通信工具集,提供了捕获网络数据包的功能。通过这些工具,用户可以截获、分析和过滤网络上传输的数据包,对于网络安全、系统开发和网络故障排查等领域有着重要的应用。
安装完成会提示选择网卡
界面介绍
wireshark和大多数软件相似,WireShark 界面包含一些常用的菜单和工具栏等,详细包括:
- 菜单栏
- 工具栏
- 过滤器
- 数据包列表面板
- 数据包详细信息面板
- 数据包字节信息面板
- 抓包按钮
下面我们来详细了解一下wireshark的使用方法
使用
wireshark有几种使用场景,包括:
- 直接抓取流量包分析
- 导入流量包分析(可以通过
tcpdump
等工具在linux导出流量包数据)
这里如果抓取的流量包后缀名是.cap
或.pcap
,在导入的时候可以看到一个小鲨鱼鳍标识的文件,比较方便。
========================================================================================================
下面我们从一个ping
示例开始,简单介绍如何使用wireshark
- 使用抓取的机器
ping
一台机器,尽量选择能ping
的通的,这里我们使用192.168.202.129 ping 192.168.202.128
- 使用wireshark开始抓取流量包
- 在过滤器添加筛选条件
icmp
(后面会详细介绍过滤器) - 一般就可以看到成对的流量包(request和reply)
- 打开一个
request
请求包,查看详细信息
我们知道ICMP协议使用IP协议的服务进行传输,属于网络层的协议。在IPv4中,ICMP报文是在IP数据报内被封装传输的。具体来说,IPv4数据报的协议字段值为1表示该报文携带了ICMP消息。这表明ICMP与IPv4之间的紧密联系,其中ICMP利用IPv4的传输机制来发送和接收控制消息
在本例的IPv4
(Internet Protocol Version 4
)协议中,我们看到
Protocol:ICMP(1)
Source Address:192.168.202.129
Destination Address:192.168.202.128
在ICMP
(Internet Control Message Protocol
),我们可以看到一些类型信息,比如Type:8(Echo(ping)request)
,校验信息等等
- 在
reply
回复包中,我们可以看到
在IPv4
中,我们可以看到Protocol
、Source Address
和Destination Address
信息和预期一致
在ICMP
中,我们看到Type
、校验信息和时间戳等等
过滤器
抓包过滤器
在抓包前使用,它的过滤有一个基本的语法格式:BPF语法格式。
BPF(全称 Berkeley Packet Filter),中文叫伯克利封包过滤器,它有四个核心元素:类型、方向、协议 和 逻辑运算符。
类型Type:主机(host)、网段(net)、端口(port)
方向Dir:源地址(src)、目标地址(dst)
协议Proto:各种网络协议,比如:tcp、udp、http
逻辑运算符:与( && )、或( || )、非( !)
四个元素可以自由组合,比如:
src host 192.168.31.1
抓取源IP为 192.168.31.1 的数据包
tcp || udp
抓取 TCP 或者 UDP 协议的数据包
显示过滤器
在抓包后或者抓包的过程中使用。
显示过滤器的语法包含5个核心元素:IP、端口、协议、比较运算符和逻辑运算符。
IP地址:ip.addr、ip.src、ip.dst
端口:tcp.port、tcp.srcport、tcp.dstport
协议:tcp、udp、http
比较运算符:> < == >= <= !=
逻辑运算符:and、or、not、xor(有且仅有一个条件被满足)
五个核心元素可以自由组合,比如:
ip.addr == 192.168.32.121
显示IP地址为 192.168.32.121 的数据包
tcp.port == 80
显示端口为 80 的数据包
ip.dst==192.168.202.129 and icmp
目的地址是192.168.202.129并且使用icmp协议
TCP协议示例
本节将使用wireshark
演示TCP协议的三次握手和四次挥手的过程
- 在虚拟机安装
nginx
,开启web服务
[root@node-252 ~]# systemctl start nginx
[root@node-252 ~]# ss -nlput|grep -w 80
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=2173,fd=6),("nginx",pid=2172,fd=6))
- 打开
wireshark
并设置过滤器
tcp and tcp.port == 80
- 网页访问服务器80端口
- 查看
wireshark
抓取信息
下面使用wireshark辅助我们详细分析TCP建立连接和断开连接的过程
我们知道TCP建立连接的过程,三次握手
包括:
服务器和客户端建立连接之前,服务器均处于LISTEN状态
一. 客户端向服务器发送连接请求SYN
[第一次握手]
8 2.484246 192.168.202.1 192.168.202.128 TCP 66 51613 → 80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM
客户端处于状态是SYN_SENT,发送
SYN
包,seq=0
服务器处于LISTEN状态
二. 服务器向客户端发送连接响应SYN, ACK
[第二次握手]
9 2.484397 192.168.202.128 192.168.202.1 TCP 66 80 → 51613 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM WS=128
服务器处于 SYN_RCVD状态,服务端收到客户端的
SYN
包并发送服务端SYN ACK
包,之后等待客户端对连接请求的确认(ACK包),此时服务器向客户端发送的包seq=0
,ack=seq(客户端的seq)+1=1
三. 客户端对连接请求的确认ACK
[第三次握手]
10 2.484504 192.168.202.1 192.168.202.128 TCP 54 51613 → 80 [ACK] Seq=1 Ack=1 Win=65536 Len=0
服务器接收到客户端回复的包后,服务器和客户端处于连接状态
客户端向服务器回复的ACK
包,ACK=seq(服务器seq)+1=1
这里一直用0,1如果觉得迷糊,可以查看seq
和ACK
的原始数据(raw)
,seq=ack(服务器的seq)+1=1
此时服务器和客户端处于连接状态ESTABLISH
然后我们看到一些HTTP协议的相关内容
11 2.485264 192.168.202.1 192.168.202.128 HTTP 529 GET / HTTP/1.1
12 2.485469 192.168.202.128 192.168.202.1 TCP 60 80 → 51613 [ACK] Seq=1 Ack=476 Win=30336 Len=0
13 2.494322 192.168.202.128 192.168.202.1 HTTP 235 HTTP/1.1 304 Not Modified
14 2.696190 192.168.202.128 192.168.202.1 TCP 235 [TCP Retransmission] 80 → 51613 [PSH, ACK] Seq=1 Ack=476 Win=30336 Len=181
这里由于我们之前测试访问过这个网页,浏览器在本地生成了缓存。所以显示未修改,我们把nginx
首页更新下内容
[root@node-252 ~]# echo "hello,this is tcp status show" > /usr/share/nginx/html/index.html
再次抓取
3077 2117.746787 192.168.202.1 192.168.202.128 HTTP 529 GET / HTTP/1.1
3078 2117.749914 192.168.202.128 192.168.202.1 TCP 60 80 → 56888 [ACK] Seq=1 Ack=476 Win=30336 Len=0
3079 2117.750087 192.168.202.128 192.168.202.1 TCP 290 80 → 56888 [PSH, ACK] Seq=1 Ack=476 Win=30336 Len=236 [TCP segment of a reassembled PDU]
3080 2117.750222 192.168.202.128 192.168.202.1 HTTP 84 HTTP/1.1 200 OK (text/html)
我们看到服务器向客户端通过TCP
的数据包[PSH, ACK
]发送了一些内容,打开第四条记录,可以看到如下内容
看到最后一行确实是我们修改的内容
TCP断开连接的过程,四次挥手
包括:
一. 由于客户端长时间未访问服务器,所以服务器主动断开连接 [第一次挥手]
3085 2122.759948 192.168.202.128 192.168.202.1 TCP 60 80 → 56888 [FIN, ACK] Seq=267 Ack=476 Win=30336 Len=0
服务器向客户端发送
FIN
报文,此时Seq=267 Ack=476
,并处于FIN_WAIT_1
状态
二. 客户端收到连接释放报文段FIN
报文后,确认可以断开,并向服务器发送ACK
应答报文 [第二次挥手]
3086 2122.760042 192.168.202.1 192.168.202.128 TCP 54 56888 → 80 [ACK] Seq=476 Ack=268 Win=65280 Len=0
客户端向服务器发送的回复报文,包括
Seq=Ack(服务器)=476 Ack=Seq+1=268
服务器接收到客户端的回复报文后,状态切换为FIN_WAIT_2
三. 确认无数据传输或数据传输完毕后,客户端向服务器发送一个FIN,ACK
结束响应报文 [第三次挥手]
3087 2122.760119 192.168.202.1 192.168.202.128 TCP 54 56888 → 80 [FIN, ACK] Seq=476 Ack=268 Win=65280 Len=0
在发送完成ACK报文后,客户端还可以继续完成业务数据的发送,待剩余数据发送完成后,或者CLOSE-WAIT(关闭等待)截止后,客户端会向服务器发送一个FIN,ACK结束响应报文,表示被动断开方的数据都发送完了,然后,客户端进入LAST_ACK状态。
Seq=476 Ack=268
,这里的序列号和确认号和第二次挥手相同
四. 服务器发送最后的确认报文 [第四次挥手]
3088 2122.760245 192.168.202.128 192.168.202.1 TCP 60 80 → 56888 [ACK] Seq=268 Ack=477 Win=30336 Len=0
主动断开方收在到FIN,ACK断开响应报文后,还需要进行最后的确认,向被动断开方发送一个ACK确认报文,然后,自己就进入TIME_WAIT状态,等待超时后最终关闭连接。处于TIME_WAIT状态的主动断开方,在等待完成2*MSL的时间后,如果期间没有收到其他报文,则证明对方已正常关闭,主动断开方的连接最终关闭。
Seq=268(客户端Ack) Ack=477(客户端Seq+1)
关于wireshark的缺点
Wireshark的缺点主要包括:
- 学习曲线较陡:要灵活使用Wireshark,需要具备一定的网络基础知识,对于初学者来说,这可能会构成一定的难度。
- HTTPS数据包分析限制:由于Wireshark是在链路层获取数据包信息,因此无法分析加密的HTTPS数据包内容。虽然可以对HTTPS数据包进行解密,但这需要一定的操作复杂度,并且可能耗费大量时间。
- 企业级环境中效率低下:在现代企业级环境中,使用Wireshark通过传统方式进行快速采集和分析数据包,尤其是涉及业务、应用及用户性能问题的智能告警和关联分析时,效率低下,且某些功能无法实现。
6.2 tcpdump
tcpdump
是一个网络数据采集分析工具,可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not
等逻辑语句来帮助你去掉无用的信息。
一般使用linux作为服务器操作系统,并不会配置图形界面,所以为了直观分析网络数据采集结果,大都是通过
wireshark
+tcpdump
组合使用,即通过tcpdump
采集数据,通过wireshark
进行分析。
- 安装
apt install -y tcpdump #debian系列
yum install -y tcpdump #redhat系列
命令格式
SYNOPSIS
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q|-P in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
tcpdump [协议类型] [源或目标] [主机名称或IP] [or/and/not/!条件组合] [源或目标] [主机名或IP] [or/and/not/!条件组合] [端口] [端口号] …… [or/and/not/!条件组合] [条件]
- 常用参数
-a #将网络地址和广播地址转变成名字
-A #以ASCII格式打印出所有分组,并将链路层的头最小化
-b #数据链路层上选择协议,包括ip/arp/rarp/ipx都在这一层
-c #指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump
-d #将匹配信息包的代码以人们能够理解的汇编格式输出
-dd #将匹配信息包的代码以c语言程序段的格式输出
-ddd #将匹配信息包的代码以十进制的形式输出
-D #打印系统中所有可以监控的网络接口
-e #在输出行打印出数据链路层的头部信息
-f #将外部的Internet地址以数字的形式打印出来,即不显示主机名
-F #从指定的文件中读取表达式,忽略其他的表达式
-i #指定监听网络接口 #常用
-l #使标准输出变为缓冲形式,可以数据导出到文件
-L #列出网络接口已知的数据链路
-n #不把网络地址转换为名字
-N #不输出主机名中的域名部分,例如www.baidu.com只输出www
-nn #不进行端口名称的转换
-P #不将网络接口设置为混杂模式
-q #快速输出,即只输出较少的协议信息
-r #从指定的文件中读取数据,一般是-w保存的文件
-w #将捕获到的信息保存到文件中,且不分析和打印在屏幕 #常用
-s #从每个组中读取在开始的snaplen个字节,而不是默认的68个字节
-S #将tcp的序列号以绝对值形式输出,而不是相对值
-T #将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
-t #在输出的每一行不打印时间戳
-tt #在每一行中输出非格式化的时间戳
-ttt #输出本行和前面以后之间的时间差
-tttt #在每一行中输出data处理的默认格式的时间戳
-u #输出未解码的NFS句柄
-v #输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息
-vv #输出相信的保报文信息
关键字
- 数据类型的关键字:
host、port、net
host 192.168.130.1表示一台主机
net 192.168.130.0表示一个网络网段
port 80 指明端口号为80
在这里如果没有指明数据类型,那么默认就是host
- 数据传输方向的关键字:
src、dst、dst or src、dst and src
这些关键字指明了传输的方向,比如src 192.168.130.1说明数据包源地址是192.168.130.1。dst net 192.168.130.0指明目的网络地址是192.168.130.0,默认是监控主机对主机的src和dst,即默认监听本机和目标主机的所有数据。
-
协议关键字:
ip、arp、rarp、udp
-
其他关键字:
运算类型:or、and、not、!
辅助功能型:gateway、less、broadcast、greater
使用
注:使用tcpdump需要root权限
- 抓取
icmp
协议数据包
tcpdump -i any icmp -w icmp.pcap
-i any
为任意网络接口,即任意网卡,条件为筛选icmp
,-w icmp.pcap
保存为icmp.pcap
文件
导入到wireshark
呈现的数据内容
2. 添加条件抓取icmp
协议数据包
[root@node-252 ~]# tcpdump -i ens33 icmp and host 192.168.202.128 -v -w icmp.pcap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 24
指定网卡为ens33,本次指定主机为
192.168.202.128
,-v
显示详细信息,会提示Got 24
即抓取的包数量,当有多个条件时,需要使用关键字and or
- 继续添加条件
tcpdump -s0 -vnn -i ens33 icmp and src 192.168.202.128 -w icmp.pcap
-s0
防止包截断,-nn
不进行端口名称转换,src
源地址为192.168.202.128
,类似还可以指定dst
目的地址,dst net
目的网络,src net
源网络
常用的示例
### 过滤主机 ###
tcpdump -i eth0 host 192.168.1.70 #抓取所有经过 eth0,目的或源地址是 192.168.1.70 的网络数据
tcpdump -i eth1 src host 192.168.1.70 #抓取所有经过 eth0,源地址是 192.168.1.70 的网络数据
tcpdump -i eth1 dst host 192.168.1.70 #抓取所有经过 eth0,目的地址是 192.168.1.70 的网络数据
### 过滤端口 ###
tcpdump -i eth0 port 22 #抓取所有经过 eth0,目的或源端口是 22 的网络数据
tcpdump -i eth1 src port 22 #抓取所有经过 eth0,源端口是 22 的网络数据
tcpdump -i eth1 dst port 22 #抓取所有经过 eth0,目的端口是 22 的网络数据
### 过滤协议 ###
tcpdump -i eth0 tcp
tcpdump -i eth0 udp
tcpdump -i eth0 ip
tcpdump -i eth0 icmp
tcpdump -i eth0 arp
当我们发现流量异常的时候,我们可能不会指定太多条件,因为当时可能无法判断出协议、端口和地址等信息来源,所以往往使用最宽泛的条件,然后通过wireshark
进行过滤筛选
tcpdump -i ens33 -w any.pcap
关于tcpdump的缺点
以下是一些 tcpdump 的缺点:
- 性能影响:tcpdump 在运行时会捕获所有网络流量,这可能会对系统性能产生一定影响。
- 复杂的过滤器:tcpdump 的过滤器相对复杂,需要一定时间学习和掌握。
- 无用输出:默认情况下,tcpdump 输出的包含大量信息,很难直接获取有用的数据。
- 不易于集成:tcpdump 主要是命令行工具,不易于与其他系统或应用程序集成。
- 缺乏用户界面:tcpdump 没有用户友好的界面,难以用于非专业人士。
- 安全问题:如果不正确配置,tcpdump 可能会捕获敏感数据,带来安全风险。
针对这些缺点,解决方法可能包括:
- 使用 tcpdump 的 -i 参数指定网络接口,限制捕获范围。
- 使用 tcpdump 的表达式优化过滤器,精确匹配所需的数据包。
- 使用 tcpdump 的 -w 参数将捕获的数据包保存到文件中,然后使用其他工具(如 Wireshark)分析。
- 使用 tcpdump 的 -C 参数设置数据包的存储上限,防止磁盘空间耗尽。
- 使用 tcpdump 的 -q 参数减少输出信息量。
- 使用 tcpdump 的 -Z 参数将进程放到后台运行。
- 使用 tcpdump 的 -z 参数设置捕获数据包的时间限制。
结合使用 tcpdump 和其他网络工具,如 wireshark 或 tshark 进行更复杂的分析。
6.3 fiddler
fiddler是一个http
协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
-
官网:https://www.telerik.com/fiddler
-
原理图
代理工具嘛,在客户端和服务器之间加了一层
下载安装
- 选择
FIDDLER TOOLS
>Fiddler Classic
- 点击
Try For Free
- 进入到以下页面,它会问你用 Fiddler 做什么?然后再填写你的邮箱,选上
Country
,勾选上I agree
以及I accept
,再点击Download For Windows
然后就会下载 FiddlerSetup.5.0.20244.10953-latest.exe
,当前我下载的版本
运行.exe
,安装完成后,会有如下提示
界面介绍及使用可以参考 https://blog.csdn.net/xhmico/article/details/133852152,介绍的非常详细
6.4 burpsuite
Burp Suite 是用于攻击web应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。
参考 https://blog.csdn.net/m0_68483928/article/details/140502752 介绍的比较详细