|
发表于 2024-9-29 18:13:05
|
显示全部楼层
那么我们首先研究一下 移动墙的原理(不想看废话的直接跳过 但授人以鱼不如授人以渔 多学刁是好事情)
1:什么是移动墙?
境外网站只要你的服务器IP不是国内域名经常就会出现电信联通可以访问,但是移动打不开的情况。
首先你要知道 很多国外服务器IDC 他们走的线路是不同的 例如:香港走南方电信,俄罗斯走北京联通;(以上来源于网络科普)移动的用户如果访问这些境外网站,移动公司就得给电信 联通钱,所以移动现在直接给你一刀切 就不让你访问,也就是墙掉域名无法访问
2:移动墙的原理
用移动的网访问电信联通带宽上的网站,就会产生一个跨域流量 相当于你来我停车场停车 你要给我停车费,移动就得给电信联通付停车费 建国互联网早期的网站都是选择电信和联通的 之前联通叫网通 所以移动吃亏了啊 就要给他俩每年很多费用 所以现在移动会自行劫持你的DNS 让你尽可能用移动的服务器 有一些热门网站 移动也会干脆给你镜像 给你劫持过来 放在自己的服务器上 对于境外IP的服务器 就直接给你限速(QoS策略 这里不做解释 网上很多人解释的比我好 我一知半解)对于有的违法网站就直接给你一刀切 不让你访问
3:解决方法
该方法有待考证稳定性!脚本来源互联网 我并非原创!
复制下方代码保存文件(从cat复制到EOF,复制后粘贴到终端回车,会自动将代码保存成geneva.py)
- cat <<'EOF' >geneva.py
- #!/usr/bin/env python3
- import os
- import signal
- from scapy.all import *
- from netfilterqueue import NetfilterQueue
- import argparse
- window_size = 17
- 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():
- global window_size
- 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()
- EOF
复制代码
CentOS 安装依赖(centos7测试已通过)
- yum install -y python3 python3-devel gcc gcc-c++ git libnetfilter* libffi-devel
- pip3 install --upgrade pip
- pip3 install scapy netfilterqueue
复制代码
Ubuntu安装依赖(Ubuntu 22测试已通过)
- sudo apt-get install build-essential python3-dev libnetfilter-queue-dev libffi-dev libssl-dev iptables python3-pip -y
- pip3 install scapy netfilterqueue
复制代码
执行程序: 一条条执行
- nohup python3 geneva.py -q 100 -w 17 &
- nohup python3 geneva.py -q 101 -w 4 &
- iptables -I OUTPUT -p tcp --sport 80 --tcp-flags SYN,RST,ACK,FIN,PSH SYN,ACK -j NFQUEUE --queue-num 100
- iptables -I OUTPUT -p tcp --sport 443 --tcp-flags SYN,RST,ACK,FIN,PSH SYN,ACK -j NFQUEUE --queue-num 101
复制代码
如何查看是否运行成功?
输入命令ps -ef|grep geneva出现下方内容为启动成功
现在我们检测一下移动线路(cloudflare.com失败是因为还没解析过来)
前一秒我我还在被封
后一秒解决
注意 一定要开启强制https 宝塔的或者你cdn自带的即可 |
|