规避移动墙对域名的封锁
什么是移动墙
大多数灰产、黑产网站域名经常会出现还没背GFW墙(电信、网通可以访问),但是移动线路已经被墙的情况。
国外服务器有些国家是走的固定线路,比如香港走南方电信,俄罗斯走北京联通;中国移动的宽带用户如果访问这些境外网站,会增加中国移动给电信、联通的结算费用,所以移动会选择直接阻断访问,也就是墙掉域名无法访问;
2022年5月左右,出现部分地区运营商节点不通的情况;
如何检测域名是否被运营商墙?
推荐工具:
https://www.boce.com 网站测速(HTTP测速)
https://zijian.aliyun.com/detect/http 网站测速(HTTP测速)
https://www.17ce.com/ 有 下载异常 和 ***** 即无法正常访问网站;
https://aicesu.com/ 类似boce
https://www.dnspod.cn/tech/ 80 443 端口检查
http://www.jucha.com/safe/ 可以检测微信、QQ屏蔽,域名被墙被污染没有 boce 检测的准确、精细;

用国内节点检测域名,选择【移动】线路,全国大多数地区反回的状态均为 000 或失败,则表示被移动网络屏蔽,无法返回数据。
移动墙的原因和动机:
你使用中国移动的宽带网络访问搭建在电信或者联通网络上的网站,会产生的跨网流量,中国移动就会给中国电信和中国联通付费。 由于历史原因,建立在电信或者联通(网通)网络上的服务器非常多,移动给电信和联通交的费用远大于收到的费用。
因此移动会自行劫持DNS(地区不同可能劫持强度不同),尽可能的返回位于移动网络内的服务器,针对热门HTTP内容还会劫持到移动自建的缓存服务器,对于国外网站,多半会跨网,就QoS限速,对于非法网站,直接阻断访问。
简言之,中国移动为了减少网间结算,把热门内容劫持到自己的镜像服务器,并建立黑名单机制,在黑名单里的就qcs或者间歇性阻断,或完全阻断。
被中国移动墙的域名怎么救?
四字节分割
#!/usr/bin/env python3
import os
import signal
from scapy.all import *
from netfilterqueue import NetfilterQueue
import argparse
window_size = 4
def modify_window(pkt):
try:
ip = IP(pkt.get_payload())
if ip.haslayer(TCP) and ip[TCP].flags == "SA":
ip[TCP].window = window_size
del ip[IP].chksum
del ip[TCP].chksum
pkt.set_payload(bytes(ip))
elif ip.haslayer(TCP) and ip[TCP].flags == "FA":
ip[TCP].window = window_size
del ip[IP].chksum
del ip[TCP].chksum
pkt.set_payload(bytes(ip))
elif ip.haslayer(TCP) and ip[TCP].flags == "PA":
ip[TCP].window = window_size
del ip[IP].chksum
del ip[TCP].chksum
pkt.set_payload(bytes(ip))
elif ip.haslayer(TCP) and ip[TCP].flags == "A":
ip[TCP].window = window_size
del ip[IP].chksum
del ip[TCP].chksum
pkt.set_payload(bytes(ip))
except:
pass
pkt.accept()
def parsearg():
parser = argparse.ArgumentParser(description='Description of your program')
parser.add_argument('-q', '--queue', type=int, help='iptables Queue Num')
parser.add_argument('-w', '--window_size', type=int, help='Tcp Window Size')
args = parser.parse_args()
if args.queue is None or args.window_size is None:
exit(1)
window_size = args.window_size
return args.queue
def main():
queue_num = parsearg()
nfqueue = NetfilterQueue()
nfqueue.bind(queue_num, modify_window)
try:
print("Starting netfilter_queue process...")
nfqueue.run()
except KeyboardInterrupt:
pass
if name == "main":
#sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
signal.signal(signal.SIGINT, lambda signal, frame: sys.exit(0))
main()将上面代码保存成geneva.py,然后执行下面命令安装依赖
yum install -y python3 python3-devel gcc gcc-c++ git libnetfilter* libffi-devel
pip3 install --upgrade pip
python3 -m pip install --upgrade pip
pip3 install scapy netfilterqueue运行程序
nohup ./python3 geneva.py -q 100 -w 4 &
iptables -I OUTPUT -p tcp -m multiport --sports 80,443 --tcp-flags SYN,RST,ACK,FIN,PSH SYN,ACK -j NFQUEUE --queue-num 100
301跳转方法
文献参考
更新日志
f8f53-于
