网站安全攻击和防御中的屏蔽代理服务器

简介: 网站安全攻击和防御中的屏蔽代理服务器 网站安全一直是个重要话题,本人写了网络攻防的屏蔽代理服务器相关代码,分享下:1. 写个网页request类:using System;using System.

网站安全攻击和防御中的屏蔽代理服务器

 

网站安全一直是个重要话题,本人写了网络攻防的屏蔽代理服务器相关代码,分享下:

1. 写个网页request类:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public class WebRequestUtil
    {
        public static string responseBody = string.Empty; 
        public static bool GetWeb(string uri, string proxyAddress = "", int proxyPort = 0)
        {
            string serverUri = string.Format(uri);

            ////set limit for supporting 200 connection
            ServicePointManager.DefaultConnectionLimit = 1000;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverUri);

            if (!string.IsNullOrEmpty(proxyAddress))
            {
                WebProxy myproxy = new WebProxy(proxyAddress, proxyPort);
                request.Proxy = myproxy;
            }

            ////extend timeout for decrease request timeout re-trying times
            request.Timeout = 60 * 1000;
            request.Method = @"GET";

            UTF8Encoding encoding = new UTF8Encoding();
            request.Headers.Set("Cache-Control", @"no-cache");
            request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                bool isSent = false;
                int retryCount = 0;
                string errorStr = string.Empty;
                while (!isSent && retryCount <= 2)
                {
                    retryCount++;
                    try
                    {
                        using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                        {
                            responseBody = stream.ReadToEnd();
                        }

                        isSent = true;
                    }
                    catch (Exception exc)
                    {
                        if (!errorStr.Contains(exc.ToString()))
                        {
                            errorStr += exc.ToString();
                        }

                        ////Re-try when operation timeout
                        if (!exc.ToString().Contains("The operation has timed out"))
                        {
                            LogError(exc.ToString());
                        }

                        Thread.Sleep(1000);
                    }
                }

                if (retryCount > 100)
                {
                    string err = string.Format("request.GetRequestStream try 100 times and timeout! detail error: {0}", errorStr);
                    LogError(err);
                    return false;
                }

                ////need to close or abort request for each call to fix timeout issue, otherwise it will fail when the 3rd call!
                if (request != null)
                {
                    request.Abort();
                }

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    string err = string.Format("Failed, error:{1}", response.ToString());
                    LogError(err);
                    return false;
                }

                if (response != null)
                {
                    response.Close();
                }
            }
            catch (Exception exc)
            {
                LogError(exc.ToString());
                return false;
            }

            return true;
        }

        public static void LogError(string content)
        {
            File.AppendAllText("log.log", "ERROR: " + content + Environment.NewLine);
        }
    }
}

2. 采集代理服务器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static int FailCount = 0;
        static int TotalCount = 0;
        const string IPRegex = @"(\d{1,3}\.){3}\d{1,3}</td><td>\d{1,4}";
        static void Main()
        {
            DateTime startTime = DateTime.Now;
            //int i = 0;
            //while (DateTime.Now < startTime.AddMinutes(5))
            {
                //WriteLog("Try " + i++ + "th round! Begin" + DateTime.Now.ToString());

                //WebRequestUtil.GetWeb(@"http://edu.laliyun.com/test.php", "147.47.106.36", 1920);
                //File.AppendAllText(@"test.txt", WebRequestUtil.responseBody, Encoding.UTF8);

                string url = @"http://proxy.com.ru/gaoni/list_{0}.html";
                for (int i = 1; i <= 63; i++)
                {
                    WebRequestUtil.GetWeb(string.Format(url, i));

                    string sourceString = WebRequestUtil.responseBody;
                    string IPs = string.Empty;
                    var matches = Regex.Matches(sourceString, IPRegex);
                    if (matches.Count > 0)
                    {
                        foreach (var m in matches)
                        {
                            string ip = m.ToString().Replace("</td><td>", "#").Split('#')[0];
                            IPs += ip + Environment.NewLine;
                        }
                    }

                    File.AppendAllText(@"blacklist.txt", IPs, Encoding.UTF8);
                    Console.WriteLine("Done " + i.ToString() + " page.");
                }

                //Test2(1);
                //WriteLog("Total:" + TotalCount);
                //WriteLog("Fail:" + FailCount);
                //WriteLog("Try " + i++ + "th round! End" + DateTime.Now.ToString());
            }
            Console.WriteLine("Please press any key to end of this program!\r\n");
            Console.ReadKey();
        }

        static void WriteTotalLog(string message)
        {
            //WriteLog(message, @"C:\TotalLog.txt");
        }

        static void WriteLog(string message, string path = @"C:\Test\Test#log.txt")
        {
            message = "ThreadId:" + Thread.CurrentThread.ManagedThreadId + "," + message + Environment.NewLine;
            File.AppendAllText(path.Replace("#", Thread.CurrentThread.ManagedThreadId.ToString()), message);
        }

        static void WriteErrorLog(string message)
        {
            WriteLog(message, @"C:\TestError" + Thread.CurrentThread.ManagedThreadId + "log.txt");
        }


3. 多线程攻击服务器代码:

static void Test2(int numThreads)
        {
            ManualResetEvent resetEvent = new ManualResetEvent(false);
            int toProcess = numThreads;

            // Start workers.
            for (int i = 0; i < numThreads; i++)
            {
                new Thread(delegate()
                {
                    test();
                    //Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                    // If we're the last thread, signal
                    if (Interlocked.Decrement(ref toProcess) == 0)
                        resetEvent.Set();
                }).Start();
            }

            // Wait for workers.
            resetEvent.WaitOne();
            WriteTotalLog("Done all!");
        }

        static void test()
        {
            TotalCount++;

            try
            {
                WebRequestUtil.GetWeb(@"http://1111.ip138.com/ic.asp", "219.239.236.49", 8888);
                File.AppendAllText(@"response.html", WebRequestUtil.responseBody, Encoding.UTF8);
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId + "pass");
            }
            catch (Exception exc2)
            {
                FailCount++;
                WriteErrorLog("Error:" + exc2.ToString());
            }
        }
    }
}


4. Php网页屏蔽代理服务器代码:

<?php

$page= file_get_contents("blacklist.txt");

	if(!empty($_SERVER['HTTP_CLIENT_IP']))
	{
        	//check ip from share internet
        	$ip = $_SERVER['HTTP_CLIENT_IP'];
    	}
	else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
	{
        	//to check ip is pass from proxy
        	$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    	}
	else{
        	$ip = $_SERVER['REMOTE_ADDR'];
    	}

	echo  $ip;
if(strpos($page,$ip)!== false)
echo "您使用代理浏览我们的网站,很抱歉本站出于安全考虑屏蔽了代理,请使用非代理浏览,谢谢!";
else
echo "执行程序的正常逻辑";
?>


演示代码:http://edu.laliyun.com/test.php

目录
相关文章
|
3月前
|
SQL 监控 安全
服务器安全性漏洞和常见攻击方式解析
服务器安全性漏洞和常见攻击方式解析
|
7月前
|
网络协议 Windows
网络协议与攻击模拟-12-部署DHCP服务器
网络协议与攻击模拟-12-部署DHCP服务器
43 0
|
1月前
|
Linux 网络安全 Windows
如何通过隐藏服务器真实IP来防御DDOS攻击
如何通过隐藏服务器真实IP来防御DDOS攻击
|
2月前
|
域名解析 缓存 网络协议
DNS问题之服务器流量被攻击如何解决
DNS服务器是负责将域名转换为IP地址的服务,它是互联网上实现域名解析的关键基础设施;本合集将探讨DNS服务器的工作原理、配置方法和常见问题处理,帮助用户理解和优化DNS服务的使用。
42 3
|
3月前
|
云安全 缓存 安全
网站卡顿、打不开是不是服务器被攻击了?
当前防护网站的安全解决方案中,使用最多的就是安全SCND了。安全SCND的原理便是构建在网络之上的内容分发网络,依靠部署在高防机房的各个高防节点,经过中心渠道的负载均衡、内容分发、调度等功用模块,不仅可以将内容缓存至边缘节点,用户直接打开网站而不用再次从网站源服务器下载资源,而且德迅云安全SCDN部署多个高防节点,同时隐藏好网站的源IP,当有DDOS攻击的时候会被引流攻击到SCDN的高防节点,有高防节点进行拦截清洗恶意流量,且SCDN多节点防护,不会由于一个节点被攻击打死而导致网站无法访问。
|
3月前
|
存储 安全 网络安全
怎么看服务器是中毒了还是被攻击?以及后续处理方案
怎么看服务器是中毒了还是被攻击?以及后续处理方案
|
3月前
|
SQL 安全 网络协议
游戏服务器为何总是被人攻击的原因以及如何应对这些攻击
游戏服务器为何总是被人攻击的原因以及如何应对这些攻击
|
4月前
|
云安全 安全 网络安全
我的游戏服务器被攻击了怎么办,有什么方案解决?
游戏行业目前是攻击的重灾区,DDoS攻击的主要目标之一。每当遭受攻击,都会带来游戏不可用,而攻击者经常会勒索金钱,这样带来双重损失。 最要命的是在新游戏发布、游戏活动时间、以及节假日游戏收入旺季时段遭受DDoS攻击导致游戏公司损失更加明显。 最主要的还是会影响玩家的游戏体验,造成用户流失,直接缩短游戏的生命周期。
|
4月前
|
SQL 安全 网络安全
服务器入侵如何防护,业务被攻击如何处理,服务器安全防护方案
服务器入侵如何防护,业务被攻击如何处理,服务器安全防护方案
|
10月前
|
监控 安全 网络安全
服务器被专门针对零日漏洞的.locked勒索病毒攻击,数据能否恢复?
        近日,国内多家公司服务器感染了后缀.locked勒索病毒,公司的服务器文件全部被加密,急需数据恢复,否则公司运作无法进行,部分企业经联系数据恢复工程师远程查看,并沟通协商了相应的解决方案,通过双方远程协同配合,最终在当天顺利完整恢复数据。
256 0
服务器被专门针对零日漏洞的.locked勒索病毒攻击,数据能否恢复?

热门文章

最新文章