18 隐私模式下面发送 http 请求不成功

news2025/1/21 5:55:38

前言

是这样的一个情况, 最近 我们服务存在这样的一个问题 

是在登录界面, 假设我用户名 或者 密码输入错误, 能够得到真确的结果, 拿到了 正常的 http 响应, 回来 "用户名 或者 密码 不正确 "

但是 假设是在 隐私模式下面, 同样的输入, 同样的服务, 但是结果 不一样, 等待 十多秒之后 请求挂了, CONNECTION RESET 

错误信息 大概是如下, 呵呵 这个很神奇 

另外 还有一个问题就是  当我启动 fiddler 之后, 这个网站的服务就发送发送不出去了 

效果 和上面的这个一样, 但是 差别是在于 上面的会 pending 15秒, 但是 启动 fiddler 之后里面就请求失败 

问题的调试

通过 抓包 发现, 隐私模式下面发送的请求 

发送了一次 /token 请求之后, 后面又进行了 五六次的 tcp 重传 

大概的猜测就是 对方服务器 拿到了 tcp 请求之后, 丢弃了该 tcp 包?? 

呵呵 所以 我写了一套 checksum 计算, 来校验 隐私模式下面出问题的包的 checksum, 但是 发现是 完全对的上的 

wireshark 抓包, 发送方正常情况如下 

wireshark 抓包, 发送方异常情况如下 

通过 http 请求的对比, tcp 整个报文的对比, 发现 二者报文 没有太大的差异 

但是 异常情况下, 对方服务器没有确认该包, 然后 发送方进行了重传 

tcpdump 抓包, 接收方来查看请求情况如下 

我测试的时候, 正常情况测试了三次, 异常情况测试了 三次 

但是 抓包的结果, 只能看到 正常情况的这三次请求 

另外 tcpdump 日志信息如下, 没有被 内核丢弃的包 

[root@localhost sxxzx2019]# tcpdump tcp -i ens192 port 80 -w target.cap 
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
^C47954 packets captured
48001 packets received by filter
0 packets dropped by kernel

但是 还有不确认的地方就是 

我们客户端 -> 网闸 -> 互联网服务器, 这个过程中, 网闸上面的情况 我们接触不到 

所以 网闸是否接收到 "/token" 的 tcp 包, 这个我们确认不了 

另外 这整个问题也很奇怪 

这里的配置 之前是有一个 vpn 的, 但是我删除了之后(不确定是否重启) 似乎 隐私模式下面就能够正常访问了?  是因为请求被代理到了这个 vpn??

当然 这个结论待证实 

但是打开 fiddler 之后, 来访问该网站, 还是报错 

这个 也是遗留下来的问题, 日志如下 

# 开启 fidder 之后 发送 http 请求失败 
-= Fiddler Event Log =-

17:11:02:7699 [Fiddler] No HTTP request was received from (chrome:6800) new client socket, port 54233.
17:11:04:0902 Fiddler.Network.AutoProxy> AutoProxy Detection failed.
17:11:04:0902 AutoProxy failed. Disabling for this network.
17:11:24:1592 [Fiddler] No HTTP request was received from (chrome:6800) new client socket, port 54247.
17:11:24:2568 [Fiddler] No HTTP request was received from (chrome:6800) new client socket, port 54248.
17:11:24:4004 [Fiddler] No HTTP request was received from (chrome:6800) new client socket, port 54249.
17:11:24:5367 [Fiddler] No HTTP request was received from (chrome:6800) new client socket, port 54252.

chrome 中的错误日志如下 

Access to XMLHttpRequest at 'http://61.185.228.1:33111/auth/oauth/token' from origin 'http://61.185.228.1:33111' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `local`.
auth/oauth/token:1 Failed to load resource: net::ERR_FAILED

可以参考这篇文章 

The request client is not a secure context and the resource is in more-private address ...
https://blog.csdn.net/tianzhonghaoqing/article/details/124328920

chrome://flags/#block-insecure-private-network-requests 

允许发送 不安全的私有网络请求 即可 

Block insecure private network requests.
Prevents non-secure contexts from making sub-resource requests to more-private IP addresses. An IP address IP1 is more private than IP2 if 1) IP1 is localhost and IP2 is not, or 2) IP1 is private and IP2 is public. This is a first step towards full enforcement of CORS-RFC1918: https://wicg.github.io/cors-rfc1918 ®C Mac, Windows, Linux, Chrome OS, Android

#block-insecure-private-network-requests

客户端 本身的域是 61.185.228.1:33111 

然后 fiddler 启动之后, 将 61.185.228.1:33111 请求先走 127.0.0.1:8888, 然后 fiddler 代理到目标服务 61.185.228.1:33111 

走的是 more-private 的域, 因此 触发了 浏览器的 CROS 保护策略 

至于这个 more-private 怎么定义, 多半是一个是 外网, 一个是 本地, 本地会比外网 more private 把

fiddler 一分钟定时捕获失败

默认的 8888 端口是否被占用, 如果被占用, 调整 代理端口 

找到 可疑 的 vpn 服务, 关闭 

Test01CalcTcpChecksum

为了这个问题, 特地写了一个 tcp 的 checksum 的计算的小程序, 呵呵 分享一下 

tcpBody 就贴 从 wireshark 中复制出来的二进制的报文即可 

/**
 * Test01CalcTcpChecksum
 *
 * @author Jerry.X.He
 * @version 1.0
 * @date 2022/10/31 16:20
 */
public class Test01CalcTcpChecksum {

    private static int startIpOffset = 0x1a;
    private static int tcpLenOffset = 0x2d;
    private static int ethHeaderSize = 14, ipHeaderSize = 20, tcpHeaderSize = 20;
    private static int totalHeaderSize = ethHeaderSize + ipHeaderSize + tcpHeaderSize;

    // Test01CalcTcpChecksum
    public static void main(String[] args) {

        String tcpBody = "0000   58 25 75 c3 9c b7 b0 6e bf cf 63 db 08 00 45 00\n" +
                "0010   05 8a 23 a8 40 00 80 06 b1 51 c0 a8 33 38 3d b9\n" +
                "0020   ee da f2 73 83 b0 02 59 f3 05 73 ab 0e 0b 50 18\n";

        int[] bytes = loadByteStream(tcpBody);
        int tcpBodySize = bytes.length - totalHeaderSize;

        Integer zeroAndProtocol = 0x0006;
        Integer tcpHeaderAndDataSize = tcpHeaderSize + tcpBodySize;

        int dummyHeaderCheckSum = locateInteger(bytes, startIpOffset) + locateInteger(bytes, startIpOffset + 2)
                + locateInteger(bytes, startIpOffset + 4) + locateInteger(bytes, startIpOffset + 6)
                + zeroAndProtocol + tcpHeaderAndDataSize;
        int tcpHeaderCheckSum = calcTcpHeaderCheckSum(bytes);
        int tcpBodyCheckSum = calcTcpDataCheckSum(bytes, tcpBodySize);

        int totalSum = dummyHeaderCheckSum + tcpHeaderCheckSum + tcpBodyCheckSum;
        int trimmedTotalSum = ((totalSum & 0xffff0000) >> 16) + (totalSum & 0xffff);
        int reversedTotalSum = ~trimmedTotalSum;

        String checkSumHexStr = Integer.toHexString(reversedTotalSum).substring(4);
        int checkSumInPacket = locateInteger(bytes, ethHeaderSize + ipHeaderSize + tcpHeaderSize - 4);
        String checkSumInPacketStr = Integer.toHexString(checkSumInPacket);
        // 0x2a80
        System.out.println(String.format("%s - %s", checkSumHexStr, checkSumInPacketStr));
        if (!Objects.equals(checkSumHexStr, checkSumInPacketStr)) {
            throw new RuntimeException(" unexpected checksum ");
        }
        int x = 0;

    }

    public static int[] loadByteStream(String lines) {
        List<Integer> list = new ArrayList<>();
        for (String line : lines.split("\n")) {
            String[] splits = line.split("\\s+");
            for (int i = 1; i < splits.length; i++) {
                int b = Integer.parseInt(splits[i], 16);
                list.add(b);
            }
        }

        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        return result;
    }

    public static int locateInteger(int[] bytes, int startIdx) {
        int byteWeight = (1 << 8);
        // 如果是最后一个元素, 补充 0
        if (startIdx + 1 >= bytes.length) {
            return bytes[startIdx] * byteWeight + 0x00;
//            return 0x00 * byteWeight + bytes[startIdx];
        }

        return bytes[startIdx] * byteWeight + bytes[startIdx + 1];
    }

    public static int calcTcpHeaderCheckSum(int[] bytes) {
        int checkSum = 0;
        int checkSumOffset = ethHeaderSize + ipHeaderSize, checkSumIteMax = tcpHeaderSize / 2;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < checkSumIteMax; i++) {
            int checkSumByte = locateInteger(bytes, checkSumOffset);
            // if is checksum, update checksum to 0
            if (i == (checkSumIteMax - 2)) {
                checkSumByte = 0;
            }
            checkSum += checkSumByte;
            checkSumOffset += 2;
            sb.append(" ").append(Integer.toHexString(checkSumByte));
        }
//        System.out.println(sb.toString());
        return checkSum;
    }

    public static int calcTcpDataCheckSum(int[] bytes, int tcpBodySize) {
        int checkSum = 0;
        int checkSumOffset = ethHeaderSize + ipHeaderSize + tcpHeaderSize, checkSumIteMax = (tcpBodySize + 1) / 2;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < checkSumIteMax; i++) {
            int checkSumByte = locateInteger(bytes, checkSumOffset);
            checkSum += checkSumByte;
            checkSumOffset += 2;
            sb.append(" ").append(Integer.toHexString(checkSumByte));
        }
//        System.out.println(sb.toString());
        return checkSum;
    }

}

执行效果如下  

Test02CalcIpChecksum

为了这个问题, 特地写了一个 ip 的 checksum 的计算的小程序, 呵呵 分享一下 

tcpBody 就贴 从 wireshark 中复制出来的二进制的报文即可 

package com.hx.test14;

import java.util.Objects;

import static com.hx.test14.Test01CalcTcpChecksum.loadByteStream;
import static com.hx.test14.Test01CalcTcpChecksum.locateInteger;

/**
 * Test01CalcTcpChecksum
 *
 * @author Jerry.X.He
 * @version 1.0
 * @date 2022/10/31 16:20
 */
public class Test02CalcIpChecksum {

    private static int startIpOffset = 0x1a;
    private static int tcpLenOffset = 0x2d;
    private static int ethHeaderSize = 14, ipHeaderSize = 20, tcpHeaderSize = 20;
    private static int totalHeaderSize = ethHeaderSize + ipHeaderSize + tcpHeaderSize;

    // Test01CalcTcpChecksum
    public static void main(String[] args) {

        String tcpBody = "0000   58 25 75 c3 9c b7 b0 6e bf cf 63 db 08 00 45 00\n" +
                "0010   05 8f 23 a4 40 00 80 06 b1 50 c0 a8 33 38 3d b9\n" +
                "0020   ee da f2 1f 83 b0 e9 62 05 3b cb 80 60 a8 50 18\n";

        int[] bytes = loadByteStream(tcpBody);

        int ipHeaderCheckSum = calcIpHeaderCheckSum(bytes);
        int totalSum = ipHeaderCheckSum;
        int trimmedTotalSum = ((totalSum & 0xffff0000) >> 16) + (totalSum & 0xffff);
        int reversedTotalSum = ~trimmedTotalSum;

        String checkSumHexStr = Integer.toHexString(reversedTotalSum).substring(4);
        int checkSumInPacket = locateInteger(bytes, ethHeaderSize + ipHeaderSize - 10);
        String checkSumInPacketStr = Integer.toHexString(checkSumInPacket);
        // 0xb150
        System.out.println(String.format("%s - %s", checkSumHexStr, checkSumInPacketStr));
        if (!Objects.equals(checkSumHexStr, checkSumInPacketStr)) {
            throw new RuntimeException(" unexpected checksum ");
        }
        int x = 0;

    }

    public static int calcIpHeaderCheckSum(int[] bytes) {
        int checkSum = 0;
        int checkSumOffset = ethHeaderSize, checkSumIteMax = ipHeaderSize / 2;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < checkSumIteMax; i++) {
            int checkSumByte = locateInteger(bytes, checkSumOffset);
            // if is checksum, update checksum to 0
            if (i == (checkSumIteMax - 5)) {
                checkSumByte = 0;
            }
            checkSum += checkSumByte;
            checkSumOffset += 2;
            sb.append(" ").append(Integer.toHexString(checkSumByte));
        }
        System.out.println(sb.toString());
        return checkSum;
    }


}

执行效果如下  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware ESXi 7.0 U3l macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3l macOS Unlocker & OEM BIOS (标准版和厂商定制版) 提供标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-oem/&#xff0c;查看最新版…

C++---状态压缩dp---小国王(每日一道算法2023.4.15)

注意事项&#xff1a; 状压dp难度警告&#xff01; 本题为"状态压缩dp—蒙德里安的梦想"的近似题&#xff0c;建议先阅读这篇文章并理解。 题目&#xff1a; 在 nn 的棋盘上放 k 个国王&#xff0c;国王可攻击相邻的 8 个格子&#xff0c;求使它们无法互相攻击的方案…

1~5年的软件测试工程师,该学习哪些知识实现涨薪20K?

工作已经8年有余&#xff0c;这8年里特别感谢技术管理人员的器重&#xff0c;以及同事的帮忙&#xff0c;学到了不少东西。这8年里走过一些弯路&#xff0c;也碰到一些难题&#xff0c;也受到过做为一名测试却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东…

华为暑期实习

前言&#xff1a; 多行数据需要输入的时候可以用下面的结构&#xff1a; while True:try:n int(input())s input().split()num []for i in s:num.append(int(i))k int(input())print(num[n-k])except:break输入两组数据&#xff1a; 1 8108 17 2542 4218 9064 4908 1526 …

【WLSM、FDM状态估计】电力系统状态估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

实验二 图像空间域频率域滤波

一&#xff0e;实验目的&#xff1a; 1. 模板运算是空间域图象增强的方法&#xff0c;也叫模板卷积。 &#xff08;1&#xff09;平滑&#xff1a;平滑的目的是模糊和消除噪声。平滑是用低通滤波器来完成&#xff0c;在空域中全是正值。 &#xff08;2&#xff09;锐化&…

ChatGPT实战100例 - (01) 秒出思维导图

文章目录ChatGPT实战100例 - (01) 秒出思维导图一、需求与思路1. 需求&#xff1a;快速的头脑风暴2. 思路&#xff1a;生成markdown然后转化嗯二、生成markdown语法的思维导图1. 问题2. 回答三、把markdown文本转换成思维导图1. 转换2. 下载ChatGPT实战100例 - (01) 秒出思维导…

Nature Communications|评估推进基于网络的蛋白质-蛋白质相互作用预测的社区工作

题目&#xff1a;Assessment of community efforts to advance network-based prediction of protein–protein interactions 文献来源&#xff1a;Nature Communications | (2023) 14:1582 4 代码&#xff1a;https://github.com/spxuw/PPI-Prediction-Project 内容&#x…

英语基础:四级431、六级没过,考研英语78分经验分享 (23考研)

前言 博主备考时的英语基础&#xff1a;英语四级431分, 六级没过 研究生英语二分数&#xff1a;78分 ps&#xff1a;也许这个分数段不是一些大佬的目标分数 (80)&#xff0c;本篇文章的目的只是帮助一些英语基础差的同学&#xff0c;提供一些备考经验。 一、基础阶段 时间&…

AI与未来文明:人工智能能否重塑人类文化,改变社会生活?

哈喽&#xff0c;大家好&#xff0c;我是木易巷&#xff01; 今天我想和大家深入探讨一个备受关注、广泛讨论的话题&#xff1a;人工智能&#xff08;AI&#xff09;及其对我们人类未来发展的影响&#xff0c;人工智能能否重塑人类文化&#xff0c;改变社会生活&#xff1f; 我…

JVM参数

GC参数 年轻代老年代参数SerialSerial Old-XX:UseSerialGCParallel ScavengeParallel Old-XX:UseParallelGC -XX:UseParallelOldGCParallel NewCMS-XX:UseParNewGC -XX:UseConcMarkSweepGCG1G1-XX:UseG1GCZGCZGC-XX:UseZGC jdk默认GC新生代老年代默认参数jdk8Parallel Scaven…

Ps 毛玻璃效果

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何制作毛玻璃效果&#xff1f; 复制图层 导入一张图片&#xff0c;Ctrlj复制一层&#xff0c;右键—智能对象&#xff08;目的&#xff1a;方便后期更换图片&#xff09; 画矩形 画矩形(不要描边)&#xff0c;…

2023年提供优质客户服务的9种专家方法

随着我们进入 2023年&#xff0c;客户服务从未如此重要。研究表明&#xff0c;86%的客户会为良好的客户服务多支付高达 25%的费用。拥有最佳客户体验的客户比客户体验不佳的客户多花费 140%。 1.确保您拥有一支出色的客户服务团队 创造出色的客户体验意味着拥有合适的团队。但出…

Android 屏幕刷新机制与优化方案~

作者&#xff1a;阿健君 屏幕刷新机制 基本概念 刷新率&#xff1a;屏幕每秒刷新的次数&#xff0c;单位是 Hz&#xff0c;例如 60Hz&#xff0c;刷新率取决于硬件的固定参数。帧率&#xff1a;GPU 在一秒内绘制操作的帧数&#xff0c;单位是 fps。Android 采用的是 60fps&am…

小程序组件的生命周期

组件生命周期 组件的生命周期&#xff0c;指的是组件自身的一些函数&#xff0c;这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。 其中&#xff0c;最重要的生命周期是 created attached detached &#xff0c;包含一个组件实例生命流程的最主要时间点。 …

(链表专题) 83. 删除排序链表中的重复元素 ——【Leetcode每日一题】

83. 删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示例 2&#xff1a; 输入&#xff1a;he…

在线Plist文件格式转Json文件格式

Plist文件是一种用于存储应用程序配置信息的文件格式&#xff0c;其中包含应用程序的各种设置和数据。在过去&#xff0c;Plist文件通常是以 .plist 格式存储的。然而&#xff0c;随着时间的推移&#xff0c;人们开始使用 JSON 格式来存储更复杂的数据结构和数据。如果您需要将…

浏览器便携化操作方法

直接进入主题 如果我们不想把 Chrome 安装进 C 盘&#xff0c;又或者想测试多配置&#xff0c;那么浏览器的便携化就非常重要了。 浏览器便携化的方法有很多&#xff0c;国内常用的有两种。 1、MyChrome MyChrome 最早由网友“甲壳虫”开发&#xff0c;除了浏览器便携化&a…

Linux0.11 进程切换(十)

系列文章目录 Linux 0.11启动过程分析&#xff08;一&#xff09; Linux 0.11 fork 函数&#xff08;二&#xff09; Linux0.11 缺页处理&#xff08;三&#xff09; Linux0.11 根文件系统挂载&#xff08;四&#xff09; Linux0.11 文件打开open函数&#xff08;五&#xff09…

AI 写文献回顾,好使吗?

&#xff08;注&#xff1a;本文为小报童精选文章&#xff0c;已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09;作为一个大学老师&#xff0c;我平时少不了指导学生写论文。选题阶段很重要的工作&#xff0c;就是文献回顾。文献回顾的目的&#xff0c;是要…