跨平台应用开发进阶(四十三)一文走近网络层抓包工具:WhireShark_pcap 跨平台

下面是我在学习HTML和CSS的时候整理的一些笔记,有兴趣的可以看下:

HTML、CSS部分截图

进阶阶段

进阶阶段,开始攻 JS,对于刚接触 JS 的初学者,确实比学习 HTML 和 CSS 有难度,但是只要肯下功夫,这部分对于你来说,也不是什么大问题。

JS 内容涉及到的知识点较多,看到网上有很多人建议你从头到尾抱着那本《JavaScript高级程序设计》学,我是不建议的,毕竟刚接触 JS 谁能看得下去,当时我也不能,也没那样做。

我这部分的学习技巧是,增加次数,减少单次看的内容。就是说,第一遍学习 JS 走马观花的看,看个大概,去找视频以及网站学习,不建议直接看书。因为看书看不下去的时候很打击你学下去的信心。

然后通过一些网站的小例子,开始动手敲代码,一定要去实践、实践、实践,这一遍是为了更好的去熟悉 JS 的语法。别只顾着来回的看知识点,眼高手低可不是个好习惯,我在这吃过亏,你懂的。

1、JavaScript 和 ES6

在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。

JavaScript部分截图

2、前端框架

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

以 Vue 为例,我整理了如下的面试题。

Vue部分截图

文章目录

一、前言

网络是移动应用生命线,网络层面的各种问题会给移动应用带来许多迷惑的行为和症状。通过抓取网络包数据,可以针对性地分析由网络层面问题引起的各种症状,包括连接中断TLS 握手失败DNS 解析失败等错误。

CharlesFiddler 可以帮助捕获和分析 HTTP 层面的问题,如果问题发生在 TCP/IP 层面,则需要 TCP 报文的捕获和分析工具。Wireshark(支持 Mac/Windows 平台)、Network Monitor(Windows 平台)和 TCPDUMP 是常用的三种网络层抓包工具。比较常见的网络层问题包括 SSL 握手失败TCP 链接中断重发等。

本节介绍 Wireshark基本使用方法。

wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark抓包信息。

注意⚠️:出于安全考虑,wireshark只能查看封包,而不能修改封包的内容或者发送封包。 wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS。所以wireshark看不懂HTTPS中的内容。如果是处理HTTPHTTPS 还是用 Fiddler,其他协议比如TCPUDP 就用wireshark

二、条件过滤

  • 过滤源ip、目的ip
ip.dst==192.168.101.8 #查找目的地址为192.168.101.8的包

ip.src==1.1.1.1 #查找源地址为1.1.1.1 的包

  • 端口过滤
tcp.port==80 #把源端口和目的端口为80的都过滤出来

tcp.dstport==80 #只过滤目的端口为80的

tcp.srcport==80 #只过滤源端口为80的包

  • 协议过滤
arp #ARP协议

icmp || icmpv6 #ICMP协议

smb || nbss || nbns || nbipx || ipxsap || netbios #Server Message Block类协议

http || tcp.port == 80 || http2 #HTTP协议,这是很简陋的识别方法

tcp.flags & 0x02 || tcp.flags.fin == 1 #TCP连接的起始和关闭报文

hsrp || eigrp || ospf || bgp || cdp || vrrp || carp || gvrp || igmp || ismp #路由类协议

eth.fcs\_bad==1 || ip.checksum\_bad==1 || tcp.checksum\_bad==1 || udp.checksum\_bad==1 || sctp.checksum\_bad==1 || mstp.checksum\_bad==1 || cdp.checksum\_bad==1 || edp.checksum\_bad==1 || wlan.fcs\_bad==1 #条件中的各类协议的checksum异常

! ip.dst == 224.0.0.0/4 && ip.ttl < 5 && !pim) || (ip.dst == 224.0.0.0/24 && ip.dst != 224.0.0.251 && ip.ttl != 1 && !(vrrp || carp) #TTL异常报文

tcp.flags.reset eq 1 #TCP流被RESET报文

icmp.type eq 3 || icmp.type eq 4 || icmp.type eq 5 || icmp.type eq 11 || icmpv6.type eq 1 || icmpv6.type eq 2 || icmpv6.type eq 3 || icmpv6.type eq 4 #ICMP协议错误,协议的type字段值错误报文

  • http模式过滤
http.request.method=="GET" #过滤get请求的包

http.request.method=="POST" #过滤post请求的包

  • 两个过滤条件连接符and的使用
ip.src==192.168.101.8 and http #过滤ip为192.168.101.8并且为http协议

  • 过滤http握手的空报文

使用wireshark打开pcap包,通过条件过滤数据长度为0的包,命令如下:

tcp.len > 0

  • 过滤重复数据包

使用cmd命令窗口,进入wireshark安装目录,找到editcap.exe程序。执行editcap.exe -d命令,指定源文件(d:\input.pcap)和目标文件(d:\output.pcap),命令如下:

C:\Program Files\Wireshark>editcap.exe -d d:\input.pcap d:\output.pcap

  • 过滤TCP重传数据包

使用wireshark打开pcap包,通过条件过滤tcp.analysis.retransmission的包,命令如下:

http && !(tcp.analysis.retransmission)

  • 过滤TCP解析错误数据包

使用wireshark打开pcap包,通过条件过滤TCP重传,乱序,丢包,重复响应的包,命令如下:

tcp.analysis.flags && !tcp.analysis.window_update

三、字段含义

在TCP层,字段有以下⼏个标识:SYNFINACKPSHRSTURG

它们的含义是:

  • SYN表⽰建⽴连接;
  • FIN表⽰关闭连接;
  • ACK表⽰响应;
  • PSH表⽰有数据传输;
  • RST表⽰连接重置。
  • URG:Urget pointer is valid (紧急指针字段值有效)

其中,ACK是可能与SYNFIN等同时使⽤的,⽐如SYNACK可能同时为1,它表⽰的就是建⽴连接之后的响应,如果只是单个的⼀个SYN,它表⽰的只是建⽴连接。TCP的⼏次握⼿就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表⽰的是建⽴连接,⽽后者表⽰的是断开连接。

RST⼀般是在FIN之后才会出现为1的情况,表⽰的是连接重置。⼀般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;⽽当出现SYNSYN+ACK包时,我们认为客户端与服务器建⽴了⼀个连接。PSH为1的情况,⼀般只出现在DATA内容不为0的包中,也就是说PSH为1表⽰的是有真正的TCP数据包内容被传递。

wireshark抓包过滤条件:

(ip.src == 127.0.0.1) && (tcp.srcport == 27015 || tcp.dstport == 27015) && (tcp.flags.push == 1)

四、TCP连接

三次握手Three-way Handshake

在这里插入图片描述

一个虚拟连接的建立是通过三次握手来实现。

  1. (B) --> [SYN] --> (A)

假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.。

注意⚠️: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources)。认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不 能让外部任何主机主动建立连接。
2. (B) <-- [SYN/ACK] <–(A)

接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作。

注意⚠️: SYN/ACK包是仅SYN 和 ACK 标记为1的包。
3. (B) --> [ACK] --> (A)

B收到SYN/ACK 包,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成。

注意⚠️: ACK包就是仅ACK 标记设为1的TCP包。需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。

这就是为何连接跟踪很重要的原因了。没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接。一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意)。而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包。

4.1 三次握手示例

通过TCP三次握手:SYN-SYN ACK-ACK,建立连接
以抓取443为例(加密,端口不一定为443):

在这里插入图片描述

先:DNS请求

DNS请求:
在这里插入图片描述

DNS response:

在这里插入图片描述

客户端发起TCP三次握手:

在这里插入图片描述

第一次:SYN=1,ACK=0,端口61020–443

在这里插入图片描述

第二次:SYN=1,ACK=0+1,端口443-61020,确认序号=序列号+1

在这里插入图片描述

第三次:ACK=1,端口61020–443

在这里插入图片描述

Client发送hello包:

在这里插入图片描述

  • Random:随机生成数,用于生成最终密钥
  • Session ID:会话标识符
  • Cipher Suites:加密套件,
  • Compression Merhods:压缩方法
    Server hello:

在这里插入图片描述

服务器也生成了一个随机数发送给客户端,双方同时拥有两个随机数
服务器返回证书,客户端收到后根据证书链辨别真伪,服务器中有公钥,用于加密后面生成的Prenaster secret(会话密钥)
安全连接建立,发送数据:Application Data

TLS传输过程:

在这里插入图片描述

①-④:握手阶段
⑤:握手后双方使用协商好的密钥进行通讯
②中有多个类型,是因为它是一个多握手信息,一次性发送多个握手协议包
SNI:TLS的扩展,用来解决一个服务器拥有多个域名的情况
TLS握手信息中并不携带客户端要访问的目标地址,若一台服务器用多个虚拟主机,且域名不同,使用了不一样的证书,TLS使用添加host的方法识别访问那台虚拟主机,在握手第一阶段ClientHello的报文中添加SNI中包含 Server NAME,即Host内容。

五、色彩规则

在这里插入图片描述

黑色:报文错误(TCP解析错误、重传、乱序、丢包、重复响应)

在这里插入图片描述

  • TCP dup ack:重复应答
  • TCP Retransmission:TCP重传,TCP有超时重传机制
  • TCP Otu-of-Order:乱序,网络拥塞导致包到达时间不同,时延长,导致包丢失
  • TCP Previous segment not captured:前一段未捕获,丢失
  • TCP Dup ACK:TCP重复应答,#前表示丢失序号,后表示丢失次数
  • TCP Retransmission:TCP重传
  • TCP ACKed unseen segment:报文没抓全,此报文是ACK报文
  • TCP ZeroWindow与TCP Window Full:
  • TCP ZeroWindow:告诉对方,我的接收窗口的大小,即出现时告诉对方不要在发送数据
  • TCP Window Full:当待发送数据为0,出现Full,表示我不能再发送数据了
  • HSRP State Change:HSRP(热备份协议),表示状态非active和standby
  • Spanning Tree Topology Change:生成树协议状态为0x80,拓扑发生变化
  • OSPF State Chang:OSPF的msg类型不是hello
  • ICMP errors:ICMP协议错误,协议type字段值错误

红色:各类异常

  • TCP RST:TCP流被RESET,出现原因:1、端口未打开2、请求超时3、提前关闭连接4、在一个已关闭的socket上收数据。断开连接,远端服务器尝试打开链接但无结果时,也会初心RST信号,这是防火墙阻隔连接的情况,每个SYN都返回一个RST。
  • SCTP ABORT:串流控制协议的chunk_type为ABORT
  • TTL low or unexpected:TTL异常
  • Checksum Errors:条件中的各类checksum异常,在PC上抓包时网卡的一些设置经常会使Wireskark显示此错误
结束

一次完整的面试流程就是这样啦,小编综合了腾讯的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析,分享给小伙伴们,有没有需要的小伙伴们都去领取!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值