在测试功能的过程中,出现这样一种现象.前端js发起ajax请求后,在浏览器的审查元素网络状态中可以看到status为pending,等15秒以后js会把当前超时的请求取消掉,变成了红色的cancel.针对这一现象,我在本地Windows电脑和远程Linux测试机进行了网络抓包分析.

由于出现的几率很随机,但是出现频率挺高,我先在linux测试机中使用tcpdump进行的抓包分析,可以看到正常的请求是可以看得到数据的,异常的请求根本就没有连接数据,因此断定异常的数据根本就没有请求到我当前的机器.然后在本地windows电脑中使用Ethereal进行抓包分析,才发现了原因.

我本地有进行域名绑定测试机host,host所使用的ip是内网IP,是这种形式172.16.228.187,但是在抓到的数据包中变成了我之前绑定的host是个公网IP,由于安全原因,公网IP已经被禁止直接访问了,才因此出现的异常.我猜测是在进行域名DNS解析的时候,偶尔会把我之前的缓存的host返回来,才造成的这种现象

解决这一问题的方式是清除浏览器的所有缓存数据,清理自己的电脑的dns缓存,使用ipconfig/flushdns

那么下面这个是我正常情况下的tcpdump抓包结果,可以解释下各条记录的意义
tcpdump -i eth1 port 80
使用tcpdump一定要用-i参数指定下监听哪个网卡,可以使用ifconfig查看当前ip的网卡,有的是eth0,有的是eth1,这样可以抓取到这个网卡上的数据.还要过滤一下端口号,一般就只看80端口的数据就可以了

TCP三次握手的过程,可以在下面的请求中看得到.
第一次握手:10.222.128.166.60110 > 172.16.228.187.http 这里可以知道客户端IP是10.222.128.166,请求来自于60110端口,目的IP是172.16.228.187的80端口.这里的Flag是很有意义的,Flags [S]表示的是
客户端的SYN请求,seq序列号是1594115281.
第二次握手:服务端返回给客户端Flags [S.],seq序列号4134215995, ack确认号是1594115282,ack是客户端seq的+1值
第三次握手:客户端给服务端 Flags [.],.表示标志位均为0 , ack是1

15:40:19.988481 IP 10.222.128.166.60110 > 172.16.228.187.http: Flags [S], seq 1594115281, win 8192, options [mss 1300,nop,wscale 8,nop,nop,sackOK], length 0
15:40:19.988528 IP 172.16.228.187.http > 10.222.128.166.60110: Flags [S.], seq 4134215995, ack 1594115282, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
15:40:19.995864 IP 10.222.128.166.60110 > 172.16.228.187.http: Flags [.], ack 1, win 260, length 0

下面就是实际的数据传输过程了,可以看到tcp的分段传输,客户端到服务端的数据seq 1:1180 ,长度1179,下一段是seq 1180:1221,长度41.
也可以看到应答机制,服务端给客户端的ack 1180,ack 1221.

15:40:19.996031 IP 10.222.128.166.60110 > 172.16.228.187.http: Flags [P.], seq 1:1180, ack 1, win 260, length 1179
15:40:19.996067 IP 172.16.228.187.http > 10.222.128.166.60110: Flags [.], ack 1180, win 137, length 0
15:40:19.997779 IP 10.222.128.166.60110 > 172.16.228.187.http: Flags [P.], seq 1180:1221, ack 1, win 260, length 41
15:40:19.997800 IP 172.16.228.187.http > 10.222.128.166.60110: Flags [.], ack 1221, win 137, length 0
15:40:20.113390 IP 172.16.228.187.http > 10.222.128.166.60110: Flags [P.], seq 1:953, ack 1221, win 137, length 952
15:40:20.114305 IP 172.16.228.187.http > 10.222.128.166.60110: Flags [F.], seq 953, ack 1221, win 137, length 0
15:40:20.122015 IP 10.222.128.166.60110 > 172.16.228.187.http: Flags [.], ack 954, win 256, length 0
15:40:20.122044 IP 10.222.128.166.60110 > 172.16.228.187.http: Flags [F.], seq 1221, ack 954, win 256, length 0
15:40:20.122057 IP 172.16.228.187.http > 10.222.128.166.60110: Flags [.], ack 1222, win 137, length 0

六个标志位
同步SYN,在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1;
确认ACK,仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;
终止FIN,用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放;
紧急URG,当URG=1,表明紧急指针字段有效。告诉系统此报文段中有紧急数据;
推送PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应,这时候就将PSH=1;
复位RST,当RST=1,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;

windows电脑使用Ethereal也是需要先设置捕获的网卡,选对自己的iP网卡,可以使用ipconfig来查看

这些请求跑到了之前设置的公网IP上,根本就不会得到回应,因此前端就那里就会报出异常了

[日常] 使用TCPDUMP和Ethereal抓包分析HTTP请求中的异常情况的更多相关文章

  1. 聊聊tcpdump与Wireshark抓包分析

    1 起因# 前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况.这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了.在排查 ...

  2. [TCP/IP] 传输层-ethereal 抓包分析TCP包

    开启抓包工具抓取一个HTTP的GET请求,我的ip是10.222.128.159    目标服务器ip是140.143.25.27 握手阶段: 客户端 ===> SYN MSS=1460(我能接 ...

  3. Fidller抓包分析post请求

    目的:抓包是为了最近做接口测试做准备,以前没有用过这个工具,最近来学下,但是网上很多文章了,所以不一一记录,有一部分参考即可 1.如何抓取想要的web端或者手机端包,已经有很多文章谢了,推荐的参考文章 ...

  4. tcpdump使用和抓包分析

    参考资料: http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html tcpdump可以将网络中传送的数据包的“头”完全截获下来 ...

  5. [TCP/IP] 数据链路层-ethereal 抓包分析数据帧

    1.下载 http://dx1.pc0359.cn/soft/e/ethereal.rar 2.打开软件,指定抓取的网卡,下面是我抓取自己的主要网卡数据 3.开启个ping命令 , 不停的ping一台 ...

  6. 爬虫系列(二) Chrome抓包分析

    在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...

  7. Wireshark和TcpDump抓包分析心得

    Wireshark和 TcpDump抓包分析心得  1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Window ...

  8. TCP三次握手与Tcpdump抓包分析过程

    一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A ...

  9. 转:tcpdump抓包分析(强烈推荐)

    转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...

随机推荐

  1. Data Management Technology(1) -- Introduction

    1.Database concepts (1)Data & Information Information Is any kind of event that affects the stat ...

  2. LRU的实现(使用list)

    首先是LRU的定义,LRU表示最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高. 所以逻辑应该是每次都要将新被访问的页放到列表头部,如果超过了list长度限制,就将列表尾部的元素踢出去. ...

  3. Python踩坑系列之使用redis报错:module 'redis' has no attribute 'Redis'问题

    初次使用redis时,在链接Redis后,运行报错“module 'redis' has no attribute 'Redis' ”. 具体代码如下: import redis r = redis. ...

  4. 点击element-ui表格中的图标,上方显示具体的文字描述

    <template> <el-table :data="tableData" style="width: 100%"> <el-t ...

  5. 【Autoit】Autoit 使用

    一.Autoit 上传文件. 1.常用语法 - WinActivate("title")         聚焦到指定活动窗口 - ControlFocus ( "titl ...

  6. AcWing 39. 对称的二叉树

    地址 https://www.acwing.com/problem/content/description/38/ 题目描述请实现一个函数,用来判断一棵二叉树是不是对称的. 如果一棵二叉树和它的镜像一 ...

  7. testNG常用用法总结

    一.testNG介绍 TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit,   功能都差不多, 只是功能更加强大,使用也更方便 Java中已经有一个JUnit的测试框架了.  T ...

  8. dom0、dom2、dom3事件

    https://www.jianshu.com/p/3acdf5f71d5b addEventListener():可以为元素添加多个事件处理程序,触发时会按照添加顺序依次调用. removeEven ...

  9. Theory of Storage

    https://www.intelligenteconomist.com/theory-of-storage/ The Theory of Storage describes features obs ...

  10. css3中calc、vw、vh、vmin、vmax 属性的应用及兼容性详解

    一. calc()的使用什么是calc()? calc()从字面我们可以把他理解为一个函数function.其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定 ...