网络基础回顾:DNS、IP封锁与HTTP/S协议关键点

网络基础回顾:DNS、IP封锁与HTTP/S协议关键点


昨天有个读者在后台问我:"为什么改了Hosts文件还是打不开ZLibrary?明明Ping得通啊。" 这个问题让我想起刚入行时踩过的坑------你以为网络通了,其实只是你以为。今天我们就从这个问题切入,把DNS、IP封锁和HTTP/S这几个基础但容易误解的概念拆开揉碎了讲清楚。


一、DNS:你以为的"域名解析"可能只是缓存把戏

很多人以为改了Hosts文件就万事大吉,其实Hosts只是本地DNS解析的第一站。系统在查Hosts之后,还可能走DNS缓存、本地DNS服务器、公共DNS(比如8.8.8.8)这一整套流程。我遇到过最诡异的情况是:Hosts改对了,但浏览器死活不认,最后发现是DNS-over-HTTPS(DoH)在作祟------现代浏览器默认开启DoH时,会绕过系统的DNS解析机制。

bash 复制代码
# 查看本地DNS缓存(Windows)
ipconfig /displaydns
# 清空它,有时候缓存比想象中顽固
ipconfig /flushdns

踩坑提醒 :别以为Hosts是万能的,浏览器插件、VPN客户端、甚至某些安全软件都可能劫持DNS请求。调试时最好先用nslookupdig验证真实解析结果:

bash 复制代码
nslookup z-lib.is 8.8.8.8
# 如果返回的IP不是你Hosts里写的,说明请求被劫持了

二、IP封锁:TCP握手背后的沉默杀戮

"Ping得通但网页打不开"------这是典型的IP封锁场景。Ping走的是ICMP协议,而网页访问走的是TCP协议。运营商或防火墙可以只封TCP端口而放过ICMP,让你产生"网络是通的"错觉。

python 复制代码
# 简单测试TCP端口是否可达(Python示例)
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
try:
    # 测试443端口,这里经常是封锁重点
    sock.connect(("目标IP", 443))
    print("TCP握手成功")
except Exception as e:
    print(f"连接被掐了: {e}")
finally:
    sock.close()

更隐蔽的封锁是TCP RST攻击 :你的SYN包能出去,对方也回了SYN-ACK,但中途被防火墙伪造RST包强行中断握手。抓包看Wireshark会看到一串"TCP Spurious Retransmission"警告,这时候就得考虑用隧道或加密混淆把TCP流量藏起来。


三、HTTP/S协议:中间人就在你身边

即使DNS和IP层都通了,应用层还有一道关卡:HTTPS拦截。有些防火墙会做SSL中间人检测,通过证书指纹或SNI(Server Name Indication)识别并阻断敏感网站。

bash 复制代码
# 用curl测试HTTPS连接,注意--resolve参数绕过DNS
curl -v --resolve z-lib.is:443:真实IP https://z-lib.is
# 如果卡在SSL握手,可能是SNI被盯上了

关键点 :SNI是TLS握手时明文发送的域名信息,防火墙看一眼就知道你要访问什么网站。应对方案有两种:一是用ESNI(Encrypted SNI) ,但普及度不高;二是把流量套在WebSocket或HTTP/2 Stream里,伪装成普通网站流量。

不过要注意,别随便在代码里关证书验证(verify=False那种写法),除非你清楚自己在做什么------中间人攻击真不是闹着玩的。


四、实战调试心法

  1. 分层排查 :从底层往上层撸。先ping,再telnet IP 端口测TCP,然后curl -I看HTTP响应头,最后上浏览器。很多问题在第二步就现原形了。

  2. 善用本地代理工具 :Charles、Fiddler这类工具能帮你看到HTTPS解密后的流量(需安装信任证书),有时候封锁规则就藏在HTTP头部的X-Blocked-By字段里。

  3. 不要相信单一检测手段:Ping通不代表TCP通,TCP通不代表TLS握手成功,TLS通了还可能遇到HTTP 451状态码(法律原因不可访问)。多维度验证才靠谱。


写在最后

网络封锁的本质是一场不对称战争:防守方占据协议栈的每个层级,进攻方则要在夹缝里找生机。我的经验是,越底层的绕过越稳定,但实现越复杂;越高层的方案越灵活,但也越容易失效。调试时保持耐心,一次只动一个变量,记住那句老话:"它能在curl里工作吗?如果能,那就不是网络问题,是你的代码问题。"

下次我们聊具体的技术方案:如何用域名前置、SNI伪装和隧道技术,让请求"看起来像别的请求"。保持好奇,保持折腾。


专栏预告:003、隧道技术入门:SSH、Cloudflare Tunnel与反向代理实战

相关推荐
AI云海17 分钟前
python 列表、元组、集合和字典
开发语言·python
二十雨辰1 小时前
[爬虫]-Urllib
爬虫·python
andxe2 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
玉鸯2 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
shiyi.十一3 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
weixin_446260853 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao3 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
DFT计算杂谈4 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
qetfw4 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具