Share Tool Bypass Proxy => Giảm dung lượng proxy dạng GB

leenguyen69

Senior
Joined
Sep 5, 2014
Messages
736
Solutions
2
Reactions
619
MR
3.785
Hello Mọi Người,
Tình hình thì mọi người đã biết nếu sử dụng proxy dạng tính theo dung lượng mà tải web có nhiều hình ảnh video thì sẽ rất tốn kém.
Nên mình mạo muội share mọi người cái tool C# lỏ dựa vào kinh nghiệm sử dụng bản thân + nhờ AI ChatGPT. Thật sự trình code của mình cũng lỏ nên anh em coder chân chính thấy code tào lao thì bỏ qua cho mình, hoặc có thể đóng góp chỉnh sửa! Thank mng

Cụ thể tool này có 2 chức năng chính thôi:
1. Nhập vào list proxy dạng: host:port:user:pass , => sau đó sẽ chuyển về dạng không có pass: 127.0.0.1:10000, port 10000 sẽ tăng dần theo số lượng proxy
2. Cho phép mọi người nhập vào danh sách domain, danh sách đuôi media, nếu anh em nhập danh sách vào thì những domain hoặc file media có đuôi trong sách sách sẽ loadd trực tiếp qua mạng chính không thông qua proxy!



Hướng dẫn sử dụng:
+ File proxy.txt chứa danh sách proxy lấy từ các dịch vụ như pyproxy, abc, luna v.v.v:
Code:
host:port:user:pass
host:port:user:pass
v.v.v.
+ File domains.txt chứa danh sách các domain sẽ không cho load qua proxy:
Code:
domain.com
domain2.com
domain3.com
+File fileEx.txt chứa danh sách các đuôi media sẽ không cho load qua proxy:
Code:
jpg
png
sgv
mp4
avi
Download: https://mega.nz/file/Ud83zSJY#nHoKtMq6KCJv39vY-2yw0hpYU5Q8DrL4lHUmzdQkJZ4
Download C++ 2013: https://mega.nz/file/NR0HyahZ#UEuuWU-eMEtFcFrY8UFN0aJ0IMUh25Du2lhEfH281KY
Download C++ 2015: https://mega.nz/file/4JFBCSIC#H4KtoEa7rkSNchcaAwtU093nIy6RDCrUtou4pGleh00
Bước 1: Khởi chạy file BypassProxy.exe, nếu ae không chạy được thì cần Cài C++ 2013 or 2015 link ở trên
Bước 2: Chọn PROXY, sau đó chọn danh sách chưa file proxy

Bước 3 (Không bắt buộc): Chọn danh sách domain cần bypass không cho load qua proxy
Bước 4 (Không bắt buộc): Chọn danh sách file extentions không cho load qua proxy
* B3, B4 không chọn thì chỉ chuyển proxy về dạng không có user:pass
Bước 5: Nhấn START, nếu thấy hiện thông báo Security Warning thì nhấn Yes

Thế là xong danh sách proxy mới sẽ nằm trong file newproxy.txt


Full Source Code cho ai cần tham khảo:


C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BypassProxy
{
    public partial class Form1 : Form
    {
        private List<Proxy> proxyList = new List<Proxy>();
        private List<String> domainList = new List<String>();
        private List<String> fileExList = new List<String>();
        private LocalProxyServer2 serverProxy;
        private int startPort = 10000;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
                Title = "Select Proxy List File"
            };

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    proxyList.Clear();
                    string[] lines = File.ReadAllLines(openFileDialog.FileName);

                    foreach (string line in lines)
                    {
                        // Skip empty lines
                        if (string.IsNullOrWhiteSpace(line)) continue;

                        string[] parts = line.Split(':');
                        if (parts.Length == 4)
                        {
                            Proxy proxy = new Proxy
                            {
                                Host = parts[0],
                                Port = parts[1],
                                Username = parts[2],
                                Password = parts[3]
                            };
                            proxyList.Add(proxy);
                        }
                    }

                    // Update ListBox (optional)
                    ListBox listBox = this.Controls["proxyListBox"] as ListBox;
                    if (listBox != null)
                    {
                        listBox.Items.Clear();
                        listBox.Items.AddRange(proxyList.ToArray());
                    }

                    MessageBox.Show($"Loaded {proxyList.Count} proxies successfully!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading proxy file: {ex.Message}");
                }
            }
        }

        private async void button2_Click(object sender, EventArgs e)
        {
            if (proxyList.Count == 0)
            {
                MessageBox.Show("Vui lòng chọn file chứa list proxy: host:port:user:pass");
                return;
            }
            else
            {
                try
                {
                    serverProxy = new LocalProxyServer2(fileExList, domainList);
                    serverProxy.AddEndPoint(10000, "192.168.1.1:1080:user:pass");
                    serverProxy.Start();
                    serverProxy.RemoveProxyEndPoint(10000);
                    int startPort = 10000;
                    List<string> successfulProxies = new List<string>();

                    foreach (Proxy proxy in proxyList)
                    {
                        try
                        {
                            serverProxy.AddEndPoint(startPort, proxy.ToString());
                            // Thêm proxy thành công vào danh sách với định dạng 127.0.0.1:port
                            successfulProxies.Add($"127.0.0.1:{startPort}");
                            startPort++;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Failed to start proxy {proxy}: {ex.Message}");
                            startPort++;
                            continue;
                        }
                        label1.Text = $"{startPort} started";
                        await Task.Delay(50);
                    }

                    // Ghi đè file newproxy.txt với danh sách proxy thành công
                    File.WriteAllLines("newproxy.txt", successfulProxies);
                    MessageBox.Show($"Đã khởi chạy {successfulProxies.Count} proxy! Vui lòng kiểm tra danh sách proxy mới tại file newproxy.txt");
                }
                catch { }
               
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
                Title = "Chọn danh sách domain không load qua proxy"
            };

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    domainList.Clear();
                    string[] lines = File.ReadAllLines(openFileDialog.FileName);

                    foreach (string line in lines)
                    {
                        // Skip empty lines
                        if (string.IsNullOrWhiteSpace(line)) continue;

                        domainList.Add(line);
                    }

                    MessageBox.Show($"Loaded {domainList.Count} domain successfully!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading domain file: {ex.Message}");
                }
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
                Title = "Chọn định dạng file không load qua proxy"
            };

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    fileExList.Clear();
                    string[] lines = File.ReadAllLines(openFileDialog.FileName);

                    foreach (string line in lines)
                    {
                        // Skip empty lines
                        if (string.IsNullOrWhiteSpace(line)) continue;

                        fileExList.Add($".{line}");
                    }

                    MessageBox.Show($"Loaded {fileExList.Count} ex successfully!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading ex file: {ex.Message}");
                }
            }
        }
    }

    public class Proxy
    {
        public string Host { get; set; }
        public string Port { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }

        public override string ToString()
        {
            return $"{Host}:{Port}:{Username}:{Password}";
        }
    }
    public class LocalProxyServer2 : IDisposable
    {
        private bool decryptSsl = true;
        private bool disposed = false;

        private ConcurrentDictionary<int, IExternalProxy> upStreamHttpProxies = new ConcurrentDictionary<int, IExternalProxy>();
        private ProxyServer proxyServer = new ProxyServer();
        private List<ExplicitProxyEndPoint> endPoints = new List<ExplicitProxyEndPoint>();
        private List<string> mediaTypes;
        private List<string> domains;

        //public long totalDownloadedBytes = 0;
        //public long totalUploadedBytes = 0;


        public LocalProxyServer2(List<string> mediaTypes = null, List<string> domains = null)
        {
            this.mediaTypes = mediaTypes;
            this.domains = domains;
            proxyServer.EnableHttp2 = true;
            proxyServer.TcpTimeWaitSeconds = 20;
            proxyServer.ConnectionTimeOutSeconds = 25;
            proxyServer.ReuseSocket = true;
            proxyServer.EnableConnectionPool = false;
            proxyServer.ForwardToUpstreamGateway = false;
            proxyServer.CertificateManager.SaveFakeCertificates = true;
            proxyServer.ServerCertificateValidationCallback += OnServerCertificateValidation;
            proxyServer.BeforeRequest += OnBeforeRequest;
            //proxyServer.BeforeResponse += OnBeforeResponse;

        }

        //private Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e)
        //{
        //    return Task.FromResult(0);
        //}

        public void Start()
        {
            if (!proxyServer.ProxyRunning)
            {
                proxyServer.Start();
            }
        }


        public void AddEndPoint(int localPort, string proxyServerInfo)
        {
            if (!string.IsNullOrWhiteSpace(proxyServerInfo) && proxyServerInfo.IndexOf(":") != -1)
            {
                var args = proxyServerInfo.Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                var host = args[0];
                var port = Convert.ToInt32(args[1]);
                var user = string.Empty;
                var pwd = string.Empty;
                if (args.Length >= 4)
                {
                    user = args[2];
                    pwd = args[3];
                }

                //AddEndPoint(localPort, host, port, user, pwd);
                if (!upStreamHttpProxies.ContainsKey(localPort))
                {
                    var tcpProxy = new ExplicitProxyEndPoint(IPAddress.Any, localPort, decryptSsl);
                    tcpProxy.BeforeTunnelConnectRequest += onBeforeTunnelConnectRequest;
                    proxyServer.AddEndPoint(tcpProxy);
                    endPoints.Add(tcpProxy);
                    var upStreamProxy = new ExternalProxy(host, port, user, pwd) { ProxyType = ExternalProxyType.Http };
                    upStreamHttpProxies.TryAdd(localPort, upStreamProxy);
                }
            }
        }

        public void RemoveProxyEndPoint(int localPort)
        {
            var endPoint = endPoints.Find(e => e.Port == localPort);
            if (endPoint != null)
            {

                proxyServer.RemoveEndPoint(endPoint);
                endPoints.Remove(endPoint);
                endPoint.BeforeTunnelConnectRequest -= onBeforeTunnelConnectRequest;
                if (upStreamHttpProxies.ContainsKey(localPort))
                {
                    upStreamHttpProxies.TryRemove(localPort, out _);
                }

                Console.WriteLine($"Dừng proxy trên cổng {localPort}");

            }


        }

        public void ReplaceProxyEndPoint(int localPort, string proxyServerInfo)
        {
            RemoveProxyEndPoint(localPort);
            AddEndPoint(localPort, proxyServerInfo);
            Console.WriteLine($"Thay thế proxy trên cổng {localPort} với proxy mới");
        }
        public void Stop()
        {
            try
            {

                foreach (var endPoint in endPoints)
                {
                    endPoint.BeforeTunnelConnectRequest -= onBeforeTunnelConnectRequest;
                }


                proxyServer.BeforeRequest -= OnBeforeRequest;
                //proxyServer.BeforeResponse -= OnBeforeResponse;
                proxyServer.ServerCertificateValidationCallback -= OnServerCertificateValidation;

                proxyServer.Stop();
            }
            catch
            {
                Console.WriteLine("Error when stop ProxyServer!");
            }
        }

        public Dictionary<int, string> GetUpStreamProxies()
        {
            var dic = new Dictionary<int, string>();
            foreach (var localPort in upStreamHttpProxies.Keys)
            {
                IExternalProxy px;
                upStreamHttpProxies.TryGetValue(localPort, out px);
                if (px != null)
                {
                    dic.Add(localPort, string.Format("{0}:{1}", px.HostName, px.Port));
                }
            }
            return dic;
        }

        async Task OnServerCertificateValidation(object sender, CertificateValidationEventArgs ev)
        {
            ev.IsValid = true;
            await Task.FromResult(0);
        }

        async Task onBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e)
        {

            var clientLocalPort = e.ClientLocalEndPoint.Port;
            IExternalProxy x;
            upStreamHttpProxies.TryGetValue(clientLocalPort, out x);
            if (x != null)
            {
                e.CustomUpStreamProxy = x;
            }
            await Task.FromResult(0);
        }

        async Task OnBeforeRequest(object sender, SessionEventArgs ev)
        {
            bool containsType = false;
            bool containsDomain = false;
            var url = ev.HttpClient.Request.Url;


            if (mediaTypes != null && mediaTypes.Count > 0)
            {
                containsType = mediaTypes.Any(type => url.ToLower().Contains(type.ToLower()));
            }

            if (domains != null && domains.Count > 0)
            {
                containsDomain = domains.Any(domain => url.ToLower().Contains(domain.ToLower()));
            }

            if (containsType || containsDomain)
            {
                Debug.WriteLine("Media Url: " + url);
            }
            else
            {
                var request = ev.HttpClient.Request;
                var cep = ev.ClientRemoteEndPoint;
                IExternalProxy x;
                upStreamHttpProxies.TryGetValue(ev.ProxyEndPoint.Port, out x);
                if (x != null)
                {
                    ev.CustomUpStreamProxy = x;
                }


            }

            await Task.FromResult(0);
        }
        async Task OnResponse(object sender, SessionEventArgs ev)
        {
            await Task.FromResult(0);
        }


        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    if (proxyServer != null)
                    {
                        Stop();
                        proxyServer.Dispose();
                    }
                }

                // Dispose unmanaged resources

                disposed = true;
            }
        }

        // Destructor
        ~LocalProxyServer2()
        {
            Dispose(false);
        }
    }
}

PS: Ai thấy hữu ích muốn donate thì có thể donate bằng cách chuyển vào quỹ từ thiện mmo tại đây: https://mmo4me.com/threads/huong-dan-ung-ho-quy-tu-thien.130732/
 
Last edited:

lam12d1

Newbie
Joined
Apr 23, 2025
Messages
7
Reactions
1
MR
0.057
em có tool 300k 1 tháng số lượng 1 ngày 100 đến 300 con
Gói proxy 500 con datacenter v4 900k
Gói proxy 1k con datacenter v4 1tr3
Gói 2k con datacenter v4 2tr1
Gói 3k con datacenter v4 3tr
Gói proxy 300 con dân cư ipv4 600k
Proxy xoay 50 port 2p xoay 1 lần 900k
Zalo 0332528600 - Tele: @Lamkul2310
 

Announcements

Forum statistics

Threads
433,966
Messages
7,316,457
Members
185,279
Latest member
Wuytinhh99
Back
Top Bottom