{"id":843,"date":"2025-11-19T14:04:59","date_gmt":"2025-11-19T06:04:59","guid":{"rendered":"https:\/\/help.ipnut.com\/?post_type=docs&#038;p=843"},"modified":"2025-11-23T18:26:12","modified_gmt":"2025-11-23T10:26:12","password":"","slug":"c-integration-demoipnut-proxy-configuration-via-c-2","status":"publish","type":"docs","link":"https:\/\/www.ipnut.com\/help\/development-documentation\/c-integration-demoipnut-proxy-configuration-via-c-2\/","title":{"rendered":"C# Integration DemoIPNut Proxy Configuration via C#"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"843\" class=\"elementor elementor-843\" data-elementor-post-type=\"docs\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ba8677 e-flex e-con-boxed e-con e-parent\" data-id=\"6ba8677\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4feddc8 elementor-widget elementor-widget-text-editor\" data-id=\"4feddc8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"ds-markdown-paragraph\">After purchasing static IP services from IPNut platform, use the following C# code samples for integration.<\/p><hr \/>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6407f4f elementor-widget elementor-widget-heading\" data-id=\"6407f4f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">1. SOCKS5 Proxy Example<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9df9d5a elementor-widget elementor-widget-code-highlight\" data-id=\"9df9d5a\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * SOCKS5 Proxy Demo - C#\r\n *\/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Sockets;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    public class Socks5ProxyDemo\r\n    {\r\n        private readonly string proxyHost = \"proxy.ipnut.com\";\r\n        private readonly int proxyPort = 28001;\r\n        private readonly string proxyUsername = \"ipnut\";\r\n        private readonly string proxyPassword = \"123456789\";\r\n\r\n        \/**\r\n         * Connect to SOCKS5 proxy server\r\n         *\/\r\n        private async Task<Socket> ConnectToSocks5ProxyAsync()\r\n        {\r\n            try\r\n            {\r\n                var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n\r\n                \/\/ Resolve proxy server address\r\n                var hostEntry = await Dns.GetHostEntryAsync(proxyHost);\r\n                var proxyEndPoint = new IPEndPoint(hostEntry.AddressList[0], proxyPort);\r\n\r\n                await socket.ConnectAsync(proxyEndPoint);\r\n                Console.WriteLine(\"Successfully connected to SOCKS5 proxy server\");\r\n\r\n                return socket;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"Failed to connect to proxy server: {ex.Message}\");\r\n                return null;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * SOCKS5 authentication handshake\r\n         *\/\r\n        private async Task<bool> Socks5AuthenticateAsync(Socket socket)\r\n        {\r\n            try\r\n            {\r\n                \/\/ SOCKS5 handshake packet\r\n                byte[] handshake = new byte[]\r\n                {\r\n                    0x05, \/\/ SOCKS version 5\r\n                    0x02, \/\/ Number of authentication methods\r\n                    0x00, \/\/ No authentication\r\n                    0x02  \/\/ Username\/password authentication\r\n                };\r\n\r\n                await socket.SendAsync(new ArraySegment<byte>(handshake), SocketFlags.None);\r\n\r\n                \/\/ Receive server response\r\n                byte[] response = new byte[2];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(response), SocketFlags.None);\r\n\r\n                if (bytesReceived < 2)\r\n                {\r\n                    Console.WriteLine(\"Failed to receive handshake response\");\r\n                    return false;\r\n                }\r\n\r\n                if (response[0] != 0x05)\r\n                {\r\n                    Console.WriteLine(\"Unsupported SOCKS version\");\r\n                    return false;\r\n                }\r\n\r\n                \/\/ If username\/password authentication is required\r\n                if (response[1] == 0x02)\r\n                {\r\n                    return await Socks5UsernamePasswordAuthAsync(socket);\r\n                }\r\n                else if (response[1] != 0x00)\r\n                {\r\n                    Console.WriteLine($\"Unsupported authentication method: {response[1]}\");\r\n                    return false;\r\n                }\r\n\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"SOCKS5 authentication failed: {ex.Message}\");\r\n                return false;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * SOCKS5 username\/password authentication\r\n         *\/\r\n        private async Task<bool> Socks5UsernamePasswordAuthAsync(Socket socket)\r\n        {\r\n            try\r\n            {\r\n                var authPacket = new System.Collections.Generic.List<byte>();\r\n                authPacket.Add(0x01); \/\/ Authentication version\r\n                authPacket.Add((byte)proxyUsername.Length);\r\n                authPacket.AddRange(Encoding.UTF8.GetBytes(proxyUsername));\r\n                authPacket.Add((byte)proxyPassword.Length);\r\n                authPacket.AddRange(Encoding.UTF8.GetBytes(proxyPassword));\r\n\r\n                await socket.SendAsync(new ArraySegment<byte>(authPacket.ToArray()), SocketFlags.None);\r\n\r\n                byte[] authResponse = new byte[2];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(authResponse), SocketFlags.None);\r\n\r\n                if (bytesReceived < 2)\r\n                {\r\n                    Console.WriteLine(\"Failed to receive authentication response\");\r\n                    return false;\r\n                }\r\n\r\n                if (authResponse[0] != 0x01 || authResponse[1] != 0x00)\r\n                {\r\n                    Console.WriteLine(\"SOCKS5 authentication failed\");\r\n                    return false;\r\n                }\r\n\r\n                Console.WriteLine(\"SOCKS5 authentication successful\");\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"Username\/password authentication failed: {ex.Message}\");\r\n                return false;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Connect to target server through SOCKS5 proxy\r\n         *\/\r\n        private async Task<bool> Socks5ConnectToTargetAsync(Socket socket, string targetHost, int targetPort)\r\n        {\r\n            try\r\n            {\r\n                var connectPacket = new System.Collections.Generic.List<byte>();\r\n                connectPacket.Add(0x05); \/\/ SOCKS version\r\n                connectPacket.Add(0x01); \/\/ CONNECT command\r\n                connectPacket.Add(0x00); \/\/ Reserved\r\n\r\n                \/\/ Domain name type\r\n                connectPacket.Add(0x03); \/\/ Domain name\r\n                connectPacket.Add((byte)targetHost.Length);\r\n                connectPacket.AddRange(Encoding.UTF8.GetBytes(targetHost));\r\n\r\n                \/\/ Port\r\n                connectPacket.Add((byte)((targetPort >> 8) & 0xFF));\r\n                connectPacket.Add((byte)(targetPort & 0xFF));\r\n\r\n                await socket.SendAsync(new ArraySegment<byte>(connectPacket.ToArray()), SocketFlags.None);\r\n\r\n                \/\/ Receive connection response\r\n                byte[] connectResponse = new byte[10];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(connectResponse), SocketFlags.None);\r\n\r\n                if (bytesReceived < 2)\r\n                {\r\n                    Console.WriteLine(\"Failed to receive connection response\");\r\n                    return false;\r\n                }\r\n\r\n                if (connectResponse[0] != 0x05 || connectResponse[1] != 0x00)\r\n                {\r\n                    Console.WriteLine($\"SOCKS5 connection failed, code: {connectResponse[1]}\");\r\n                    return false;\r\n                }\r\n\r\n                Console.WriteLine(\"Successfully connected to target server through SOCKS5 proxy\");\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"SOCKS5 connection to target failed: {ex.Message}\");\r\n                return false;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Send HTTP request through SOCKS5 proxy\r\n         *\/\r\n        public async Task SendHttpRequestViaSocks5Async(string targetHost, int targetPort, string path = \"\/ip\")\r\n        {\r\n            Console.WriteLine($\"=== Send HTTP Request via SOCKS5 Proxy ===\");\r\n\r\n            var socket = await ConnectToSocks5ProxyAsync();\r\n            if (socket == null) return;\r\n\r\n            try\r\n            {\r\n                if (!await Socks5AuthenticateAsync(socket))\r\n                    return;\r\n\r\n                if (!await Socks5ConnectToTargetAsync(socket, targetHost, targetPort))\r\n                    return;\r\n\r\n                \/\/ Send HTTP request\r\n                string httpRequest =\r\n                    $\"GET {path} HTTP\/1.1\\r\\n\" +\r\n                    $\"Host: {targetHost}\\r\\n\" +\r\n                    \"User-Agent: CSharp-SOCKS5-Proxy\/1.0\\r\\n\" +\r\n                    \"Connection: close\\r\\n\" +\r\n                    \"\\r\\n\";\r\n\r\n                byte[] requestBytes = Encoding.UTF8.GetBytes(httpRequest);\r\n                await socket.SendAsync(new ArraySegment<byte>(requestBytes), SocketFlags.None);\r\n\r\n                \/\/ Receive HTTP response\r\n                Console.WriteLine(\"HTTP Response:\");\r\n                byte[] buffer = new byte[4096];\r\n                int bytesReceived;\r\n\r\n                while ((bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None)) > 0)\r\n                {\r\n                    string response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);\r\n                    Console.Write(response);\r\n                }\r\n\r\n                Console.WriteLine();\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"Request failed: {ex.Message}\");\r\n            }\r\n            finally\r\n            {\r\n                socket?.Close();\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Use HttpClient with SOCKS5 proxy\r\n         *\/\r\n        public async Task UseHttpClientWithSocks5Async()\r\n        {\r\n            Console.WriteLine(\"=== Use HttpClient with SOCKS5 Proxy ===\");\r\n\r\n            try\r\n            {\r\n                \/\/ Create custom HttpClientHandler using SOCKS5 proxy\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = new WebProxy($\"socks5:\/\/{proxyUsername}:{proxyPassword}@{proxyHost}:{proxyPort}\"),\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(30);\r\n                httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(\"CSharp-SOCKS5-HttpClient\/1.0\");\r\n\r\n                var response = await httpClient.GetAsync(\"http:\/\/httpbin.org\/ip\");\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string content = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine($\"Status Code: {response.StatusCode}\");\r\n                Console.WriteLine($\"Response Content: {content}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"HttpClient request failed: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Run SOCKS5 demo\r\n         *\/\r\n        public async Task RunDemoAsync()\r\n        {\r\n            Console.WriteLine(\"Starting SOCKS5 proxy test...\\n\");\r\n\r\n            \/\/ Test Socket method\r\n            await SendHttpRequestViaSocks5Async(\"httpbin.org\", 80, \"\/ip\");\r\n            await SendHttpRequestViaSocks5Async(\"httpbin.org\", 80, \"\/user-agent\");\r\n            await SendHttpRequestViaSocks5Async(\"httpbin.org\", 80, \"\/headers\");\r\n\r\n            \/\/ Test HttpClient method\r\n            await UseHttpClientWithSocks5Async();\r\n\r\n            Console.WriteLine(\"SOCKS5 proxy test completed!\");\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ed94fd elementor-widget elementor-widget-heading\" data-id=\"1ed94fd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">2. HTTP Proxy Example<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dabad42 elementor-widget elementor-widget-code-highlight\" data-id=\"dabad42\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * HTTP Proxy Demo - C#\r\n *\/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Http;\r\nusing System.Net.Sockets;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    public class HttpProxyDemo\r\n    {\r\n        private readonly string proxyHost = \"proxy.ipnut.com\";\r\n        private readonly int proxyPort = 28001;\r\n        private readonly string proxyUsername = \"ipnut\";\r\n        private readonly string proxyPassword = \"123456789\";\r\n\r\n        \/**\r\n         * Use HttpClient with HTTP proxy\r\n         *\/\r\n        public async Task UseHttpClientWithHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"=== Use HttpClient with HTTP Proxy ===\");\r\n\r\n            try\r\n            {\r\n                \/\/ Create proxy credentials\r\n                var proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = proxy,\r\n                    UseProxy = true,\r\n                    PreAuthenticate = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(30);\r\n                httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(\"CSharp-HTTP-Proxy\/1.0\");\r\n\r\n                \/\/ Test multiple endpoints\r\n                string[] testUrls = {\r\n                    \"http:\/\/httpbin.org\/ip\",\r\n                    \"http:\/\/httpbin.org\/user-agent\",\r\n                    \"http:\/\/httpbin.org\/headers\"\r\n                };\r\n\r\n                foreach (string url in testUrls)\r\n                {\r\n                    Console.WriteLine($\"\\nRequest: {url}\");\r\n\r\n                    try\r\n                    {\r\n                        var response = await httpClient.GetAsync(url);\r\n                        response.EnsureSuccessStatusCode();\r\n\r\n                        string content = await response.Content.ReadAsStringAsync();\r\n                        Console.WriteLine($\"Status Code: {response.StatusCode}\");\r\n                        Console.WriteLine($\"Response Content: {content}\");\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        Console.WriteLine($\"Request failed: {ex.Message}\");\r\n                    }\r\n\r\n                    await Task.Delay(1000); \/\/ Avoid sending requests too fast\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"HttpClient request failed: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Use WebClient with HTTP proxy\r\n         *\/\r\n        public async Task UseWebClientWithHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\\n=== Use WebClient with HTTP Proxy ===\");\r\n\r\n            try\r\n            {\r\n                using var webClient = new WebClient();\r\n\r\n                \/\/ Set proxy\r\n                webClient.Proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                webClient.Headers[\"User-Agent\"] = \"CSharp-WebClient-Proxy\/1.0\";\r\n                webClient.Headers[\"Accept\"] = \"application\/json\";\r\n\r\n                string response = await webClient.DownloadStringTaskAsync(\"http:\/\/httpbin.org\/ip\");\r\n                Console.WriteLine($\"Response Content: {response}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"WebClient request failed: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Use Socket with HTTP proxy (CONNECT method)\r\n         *\/\r\n        public async Task UseSocketWithHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\\n=== Use Socket with HTTP Proxy (CONNECT Method) ===\");\r\n\r\n            Socket socket = null;\r\n            try\r\n            {\r\n                \/\/ Connect to proxy server\r\n                var hostEntry = await Dns.GetHostEntryAsync(proxyHost);\r\n                var proxyEndPoint = new IPEndPoint(hostEntry.AddressList[0], proxyPort);\r\n\r\n                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);\r\n                await socket.ConnectAsync(proxyEndPoint);\r\n                Console.WriteLine(\"Successfully connected to HTTP proxy server\");\r\n\r\n                \/\/ Build authentication information\r\n                string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($\"{proxyUsername}:{proxyPassword}\"));\r\n\r\n                \/\/ Send CONNECT request\r\n                string connectRequest =\r\n                    $\"CONNECT httpbin.org:80 HTTP\/1.1\\r\\n\" +\r\n                    $\"Host: httpbin.org:80\\r\\n\" +\r\n                    $\"Proxy-Authorization: Basic {auth}\\r\\n\" +\r\n                    $\"User-Agent: CSharp-Socket-Proxy\/1.0\\r\\n\" +\r\n                    $\"Connection: keep-alive\\r\\n\" +\r\n                    $\"\\r\\n\";\r\n\r\n                byte[] requestBytes = Encoding.UTF8.GetBytes(connectRequest);\r\n                await socket.SendAsync(new ArraySegment<byte>(requestBytes), SocketFlags.None);\r\n\r\n                \/\/ Read proxy response\r\n                byte[] buffer = new byte[4096];\r\n                int bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None);\r\n                string response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);\r\n\r\n                if (!response.Contains(\"200 Connection established\"))\r\n                {\r\n                    Console.WriteLine($\"Proxy connection failed: {response}\");\r\n                    return;\r\n                }\r\n\r\n                Console.WriteLine(\"Successfully connected to target server through HTTP proxy\");\r\n\r\n                \/\/ Send HTTP request\r\n                string httpRequest =\r\n                    \"GET \/ip HTTP\/1.1\\r\\n\" +\r\n                    \"Host: httpbin.org\\r\\n\" +\r\n                    \"User-Agent: CSharp-Socket-Proxy\/1.0\\r\\n\" +\r\n                    \"Connection: close\\r\\n\" +\r\n                    \"\\r\\n\";\r\n\r\n                byte[] httpRequestBytes = Encoding.UTF8.GetBytes(httpRequest);\r\n                await socket.SendAsync(new ArraySegment<byte>(httpRequestBytes), SocketFlags.None);\r\n\r\n                \/\/ Read HTTP response\r\n                Console.WriteLine(\"HTTP Response:\");\r\n                StringBuilder responseBuilder = new StringBuilder();\r\n\r\n                while ((bytesReceived = await socket.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None)) > 0)\r\n                {\r\n                    responseBuilder.Append(Encoding.UTF8.GetString(buffer, 0, bytesReceived));\r\n                }\r\n\r\n                Console.WriteLine(responseBuilder.ToString());\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"Socket request failed: {ex.Message}\");\r\n            }\r\n            finally\r\n            {\r\n                socket?.Close();\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * HTTP proxy POST request demo\r\n         *\/\r\n        public async Task HttpProxyPostRequestAsync()\r\n        {\r\n            Console.WriteLine(\"\\n=== HTTP Proxy POST Request Demo ===\");\r\n\r\n            try\r\n            {\r\n                var proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = proxy,\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(30);\r\n                httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(\"CSharp-HTTP-POST-Proxy\/1.0\");\r\n\r\n                var postData = new\r\n                {\r\n                    name = \"ipnut_user\",\r\n                    email = \"user@ipnut.com\",\r\n                    message = \"Test HTTP proxy POST request\"\r\n                };\r\n\r\n                string json = System.Text.Json.JsonSerializer.Serialize(postData);\r\n                var content = new StringContent(json, Encoding.UTF8, \"application\/json\");\r\n\r\n                var response = await httpClient.PostAsync(\"https:\/\/httpbin.org\/post\", content);\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string responseContent = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine($\"Status Code: {response.StatusCode}\");\r\n                Console.WriteLine($\"Response Content: {responseContent}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"POST request failed: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Run HTTP proxy demo\r\n         *\/\r\n        public async Task RunDemoAsync()\r\n        {\r\n            Console.WriteLine(\"Starting HTTP proxy test...\\n\");\r\n\r\n            await UseHttpClientWithHttpProxyAsync();\r\n            await UseWebClientWithHttpProxyAsync();\r\n            await UseSocketWithHttpProxyAsync();\r\n            await HttpProxyPostRequestAsync();\r\n\r\n            Console.WriteLine(\"HTTP proxy test completed!\");\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d472cdd elementor-widget elementor-widget-heading\" data-id=\"d472cdd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">3. Proxy Testing Tool<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65a9e71 elementor-widget elementor-widget-code-highlight\" data-id=\"65a9e71\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * Proxy Testing Tool - C#\r\n *\/\r\n\r\nusing System;\r\nusing System.Net;\r\nusing System.Net.Http;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    public class ProxyTestTool\r\n    {\r\n        private readonly string proxyHost = \"proxy.ipnut.com\";\r\n        private readonly int proxyPort = 28001;\r\n        private readonly string proxyUsername = \"ipnut\";\r\n        private readonly string proxyPassword = \"123456789\";\r\n\r\n        \/**\r\n         * Test SOCKS5 proxy\r\n         *\/\r\n        public async Task TestSocks5ProxyAsync()\r\n        {\r\n            Console.WriteLine(\"Test SOCKS5 Proxy:\");\r\n\r\n            try\r\n            {\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = new WebProxy($\"socks5:\/\/{proxyUsername}:{proxyPassword}@{proxyHost}:{proxyPort}\"),\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(15);\r\n\r\n                var response = await httpClient.GetAsync(\"http:\/\/httpbin.org\/ip\");\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string content = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine(\"\u2705 SOCKS5 Proxy connection successful\");\r\n                Console.WriteLine($\"   Status Code: {response.StatusCode}\");\r\n                Console.WriteLine($\"   Current IP: {content}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u274c SOCKS5 Proxy connection failed: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Test HTTP proxy\r\n         *\/\r\n        public async Task TestHttpProxyAsync()\r\n        {\r\n            Console.WriteLine(\"\\nTest HTTP Proxy:\");\r\n\r\n            try\r\n            {\r\n                var proxy = new WebProxy($\"http:\/\/{proxyHost}:{proxyPort}\")\r\n                {\r\n                    Credentials = new NetworkCredential(proxyUsername, proxyPassword)\r\n                };\r\n\r\n                var handler = new HttpClientHandler\r\n                {\r\n                    Proxy = proxy,\r\n                    UseProxy = true\r\n                };\r\n\r\n                using var httpClient = new HttpClient(handler);\r\n                httpClient.Timeout = TimeSpan.FromSeconds(15);\r\n\r\n                var response = await httpClient.GetAsync(\"http:\/\/httpbin.org\/ip\");\r\n                response.EnsureSuccessStatusCode();\r\n\r\n                string content = await response.Content.ReadAsStringAsync();\r\n                Console.WriteLine(\"\u2705 HTTP Proxy connection successful\");\r\n                Console.WriteLine($\"   Status Code: {response.StatusCode}\");\r\n                Console.WriteLine($\"   Current IP: {content}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Console.WriteLine($\"\u274c HTTP Proxy connection failed: {ex.Message}\");\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Run tests\r\n         *\/\r\n        public async Task RunTestsAsync()\r\n        {\r\n            Console.WriteLine(\"=== Proxy Testing Tool ===\\n\");\r\n\r\n            await TestSocks5ProxyAsync();\r\n            await TestHttpProxyAsync();\r\n\r\n            Console.WriteLine(\"\\nProxy testing completed!\");\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f2dc16 elementor-widget elementor-widget-heading\" data-id=\"8f2dc16\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">4. Main Program File<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25c2b30 elementor-widget elementor-widget-code-highlight\" data-id=\"25c2b30\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp>\/**\r\n * Main Program - Proxy Demo Entry Point\r\n *\/\r\n\r\nusing System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ProxyDemo\r\n{\r\n    class Program\r\n    {\r\n        static async Task Main(string[] args)\r\n        {\r\n            Console.WriteLine(\"C# Proxy Connection Demo Program\");\r\n            Console.WriteLine(\"================================\\n\");\r\n\r\n            \/\/ Run proxy testing tool\r\n            var testTool = new ProxyTestTool();\r\n            await testTool.RunTestsAsync();\r\n\r\n            Console.WriteLine(\"\\n\" + new string('=', 50) + \"\\n\");\r\n\r\n            \/\/ Run SOCKS5 demo\r\n            var socks5Demo = new Socks5ProxyDemo();\r\n            await socks5Demo.RunDemoAsync();\r\n\r\n            Console.WriteLine(\"\\n\" + new string('=', 50) + \"\\n\");\r\n\r\n            \/\/ Run HTTP demo\r\n            var httpDemo = new HttpProxyDemo();\r\n            await httpDemo.RunDemoAsync();\r\n\r\n            Console.WriteLine(\"\\nAll demos completed!\");\r\n            Console.WriteLine(\"Press any key to exit...\");\r\n            Console.ReadKey();\r\n        }\r\n    }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c99704 elementor-widget elementor-widget-heading\" data-id=\"5c99704\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">5. Project Configuration File<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-085c506 elementor-widget elementor-widget-code-highlight\" data-id=\"085c506\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp><Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>Exe<\/OutputType>\r\n    <TargetFramework>net6.0<\/TargetFramework>\r\n    <ImplicitUsings>enable<\/ImplicitUsings>\r\n    <Nullable>enable<\/Nullable>\r\n  <\/PropertyGroup>\r\n\r\n<\/Project><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b73809 elementor-widget elementor-widget-heading\" data-id=\"4b73809\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">6. Compilation and Execution Instructions<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d438eba elementor-widget elementor-widget-code-highlight\" data-id=\"d438eba\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-csharp \">\n\t\t\t\t<code readonly=\"true\" class=\"language-csharp\">\n\t\t\t\t\t<xmp># 1. Create new project\r\ndotnet new console -n ProxyDemo\r\ncd ProxyDemo\r\n\r\n# 2. Add the above code files to the project, then compile and run:\r\n# bash\r\n# Compile project\r\ndotnet build\r\n\r\n# 2. Run program\r\ndotnet run\r\n\r\n# 3. Release version\r\ndotnet publish -c Release\r\n\r\n# 4. Run complete demo:\r\n\r\n# bash\r\ndotnet run\r\n\r\n# 5. Run SOCKS5 demo only:\r\n# csharp\r\n\/\/ In Program.cs, comment out other parts, keep only:\r\nvar socks5Demo = new Socks5ProxyDemo();\r\nawait socks5Demo.RunDemoAsync();\r\n\r\n# 6. Run HTTP demo only:\r\n# csharp\r\n\/\/ In Program.cs, comment out other parts, keep only:\r\nvar httpDemo = new HttpProxyDemo();\r\nawait httpDemo.RunDemoAsync();<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9522d6b elementor-widget elementor-widget-text-editor\" data-id=\"9522d6b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<hr \/><p class=\"ds-markdown-paragraph\">Technical Support<br \/>For integration assistance or location-specific requirements:<\/p><ul><li><p class=\"ds-markdown-paragraph\">Email:\u00a0Support@ipnut.com<\/p><\/li><li><p class=\"ds-markdown-paragraph\">Live Chat: 24\/7 real-time support via official website<\/p><\/li><\/ul><p class=\"ds-markdown-paragraph\">*All code examples support both HTTP and SOCKS5 protocols with enterprise-grade authentication and security features.*<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>After purchasing sta [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"doc_category":[45],"doc_tag":[],"class_list":["post-843","docs","type-docs","status-publish","hentry","doc_category-development-documentation"],"year_month":"2026-05","word_count":1900,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"admin","author_nicename":"admin","author_url":"https:\/\/help.ipnut.com\/author\/admin\/"},"doc_category_info":[{"term_name":"Development Documentation","term_url":"https:\/\/help.ipnut.com\/docs\/development-documentation\/"}],"doc_tag_info":[],"lang":"en","translations":{"en":843,"cn":700},"knowledge_base_info":[],"knowledge_base_slug":[],"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/comments?post=843"}],"version-history":[{"count":13,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/843\/revisions"}],"predecessor-version":[{"id":1131,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/docs\/843\/revisions\/1131"}],"wp:attachment":[{"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/media?parent=843"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_category?post=843"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/help.ipnut.com\/wp-json\/wp\/v2\/doc_tag?post=843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}