【过移动墙】技术浅谈 附带穿移动墙脚本

Danko 1月前 1524

今天在和兄弟们在群里愉快的讨论新的推广手法

找了个域名测试了一下 有吃瓜兄弟马上过去访问

“哎?怎么访问不了”

“噢 我是移动网络啊”

那么我们首先研究一下 移动墙的原理(不想看废话的直接跳过 但授人以鱼不如授人以渔 多学刁是好事情)

1:什么是移动墙?

境外网站只要你的服务器IP不是国内域名经常就会出现电信联通可以访问,但是移动打不开的情况。

首先你要知道 很多国外服务器IDC 他们走的线路是不同的 例如:香港走南方电信,俄罗斯走北京联通;(以上来源于网络科普)移动的用户如果访问这些境外网站,移动公司就得给电信 联通钱,所以移动现在直接给你一刀切 就不让你访问,也就是墙掉域名无法访问

2:移动墙的原理

用移动的网访问电信联通带宽上的网站,就会产生一个跨域流量 相当于你来我停车场停车 你要给我停车费,移动就得给电信联通付停车费 建国互联网早期的网站都是选择电信和联通的 之前联通叫网通 所以移动吃亏了啊 就要给他俩每年很多费用 所以现在移动会自行劫持你的DNS 让你尽可能用移动的服务器 有一些热门网站 移动也会干脆给你镜像 给你劫持过来 放在自己的服务器上 对于境外IP的服务器 就直接给你限速(QoS策略 这里不做解释 网上很多人解释的比我好 我一知半解)对于有的违法网站就直接给你一刀切 不让你访问

3:解决方法

该方法有待考证稳定性!脚本来源互联网 我并非原创!

复制下方代码保存文件(从cat复制到EOF,复制后粘贴到终端回车,会自动将代码保存成geneva.py)

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:
        ex it(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.ex it(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自带的即可

各位定位一下

        ex it(1)

关键字 在上面的代码中 论坛设置不允许x i 所以只能中间加空格

最新回复 (5)
  • 十字路口 1月前
    0 2
    分享和总结使人进度

    感谢站长的无私总结
  • zhdyx 1月前
    0 3
    移动没墙、联通网络打开0.0.0.0怎么回事
  • Danko 1月前
    0 4
    zhdyx 移动没墙、联通网络打开0.0.0.0怎么回事
    运营商劫持
  • 十字路口 1月前
    0 5
    Danko 运营商劫持
    有的帖子图会掉
    建议自己放到图床
  • Danko 1月前
    0 6
    十字路口 有的帖子图会掉 建议自己放到图床
    收到老大!
返回
发新帖