linux常用网络工具汇总三

177 阅读12分钟

linux常用网络工具汇总

      1. 抓包工具
        • 6.1 wireshark
          • 安装
          • 界面介绍
          • 使用
          • 过滤器
          • TCP协议示例
          • 关于wireshark的缺点
        • 6.2 tcpdump
          • 命令格式
          • 关键字
          • 使用
          • 关于tcpdump的缺点
        • 6.3 fiddler
        • 6.4 burpsuite
        • 6.5 Sniff Master(抓包大师)

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

  1. 使用抓取的机器ping一台机器,尽量选择能ping的通的,这里我们使用192.168.202.129 ping 192.168.202.128
  2. 使用wireshark开始抓取流量包
  3. 在过滤器添加筛选条件icmp(后面会详细介绍过滤器)
  4. 一般就可以看到成对的流量包(request和reply)
  • 打开一个request请求包,查看详细信息

我们知道ICMP协议使用IP协议的服务进行传输,‌属于网络层的协议。‌在IPv4中,‌ICMP报文是在IP数据报内被封装传输的。‌具体来说,‌IPv4数据报的协议字段值为1表示该报文携带了ICMP消息。‌这表明ICMP与IPv4之间的紧密联系,‌其中ICMP利用IPv4的传输机制来发送和接收控制消息

在本例的IPv4Internet Protocol Version 4)协议中,我们看到

Protocol:ICMP(1)
Source Address192.168.202.129
Destination Address192.168.202.128

ICMPInternet Control Message Protocol),我们可以看到一些类型信息,比如Type:8(Echo(ping)request),校验信息等等

  • reply回复包中,我们可以看到
    IPv4中,我们可以看到ProtocolSource AddressDestination Address信息和预期一致
    ICMP中,我们看到Type、校验信息和时间戳等等
过滤器
  1. 抓包过滤器在抓包前使用 ,它的过滤有一个基本的语法格式: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 协议的数据包

  1. 显示过滤器在抓包后或者抓包的过程中使用
    显示过滤器的语法包含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协议的三次握手和四次挥手的过程

  1. 在虚拟机安装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))
  1. 打开wireshark并设置过滤器
tcp and tcp.port == 80
  1. 网页访问服务器80端口

  2. 查看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=0ack=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如果觉得迷糊,可以查看seqACK的原始数据(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      #在输出的每一行