搜索
缓存时间21 现在时间21 缓存数据 很多人如果换一个时间认识,就会有不同的结局。
查看: 156|回复: 2

哪位大佬又解决过移动墙的方法,求助 [疑问]

[复制链接]
发表于 2024-9-29 17:16:48 | 显示全部楼层 |阅读模式

注册免广告,解锁更好的浏览体验!

您需要 登录 才可以下载或查看,没有账号?注册

×
哪位大佬又解决过移动墙的方法,求助
爱生活,爱奶昔~
发表于 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自带的即可
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2024-9-29 21:40:09 来自手机 | 显示全部楼层
yagamil 发表于 2024-9-29 18:13
那么我们首先研究一下 移动墙的原理(不想看废话的直接跳过 但授人以鱼不如授人以渔 多学刁是好事情)

1: ...

一个包拆成17份,这速度不得慢死
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

Powered by Nyarime.

GMT+8, 2024-10-12 21:45 , Processed in 0.029440 second(s), 10 queries , Gzip On, Redis On
发帖际遇·手机版·小黑屋·RSS·奶昔网 |网站地图

登录切换风格
快速回复 返回顶部 返回列表