• 开始写Blog读取工具时一直是直接访问,访问方式也比较简单: WebRequest _HWR = WebRequest.CreateDefault(new System.Uri(URL)); WebResponse _HRS = _HWR.GetResponse() ; Stream ReceiveStream = _HRS...
    开始写Blog读取工具时一直是直接访问,访问方式也比较简单: 

    WebRequest _HWR = WebRequest.CreateDefault(new System.Uri(URL));

    WebResponse _HRS 
    = _HWR.GetResponse() ;

    Stream ReceiveStream 
    = _HRS.GetResponseStream();

    但是最近打开工程一看,代码运行不正常,调试了一下,原来客户端代理被ITS封掉了,只得去查找设置代理访问的方法,原来代码很简单,只需要加入下面代码即可。

    WebProxy _WP = new WebProxy(ProxyName,ProxyPort);
                _WP.BypassProxyOnLocal 
    = true;
                ICredentials credentials 
    = new NetworkCredential(UserName,UserKey,DomainName);
                _WP.Credentials 
    = credentials;

                WebRequest _HWR 
    = WebRequest.CreateDefault(new System.Uri(URL));
                _HWR.Proxy 
    = _WP;
                WebResponse _HRS 
    = _HWR.GetResponse() ;

    当然,MSDN上对于_HWR.Proxy = _WP;还有另外一个使用方式
    GlobalProxySelection.Select = _WP;其实也就是设置全局的代理服务,不需要再一一设置,抓取页面数据就比较简单了。

    Encoding encode = System.Text.Encoding.Default;
                StreamReader sr 
    = new StreamReader( ReceiveStream, encode );
                
                
    string HTMLContent = "";
                
                Char[] read 
    = new Char[256];
                
    int count = sr.Read( read, 0256 );
                
    while (count > 0
                
    {
                    String str 
    = new String(read, 0, count);
                    HTMLContent 
    += str;
                    count 
    = sr.Read(read, 0256);
                }

    OK,这样就完成了代码设置我们的代理,直接通过程序来访问IE内容了~~ 
    展开全文
  • C#实现Web代理服务器  代理服务程序是一种广泛使用的网络应用程序。代理程序的种类非常多,根据协议不同可以分成HTTP代理服务程序、FTP代理服务程序等,而运行代理服务程序的服务器也就相应称为HTTP代理服务器...
    转自: http://www.cnblogs.com/gfsoft/articles/278886.html

    用C#实现Web代理服务器

        代理服务程序是一种广泛使用的网络应用程序。代理程序的种类非常多,根据协议不同可以分成HTTP代理服务程序、FTP代理服务程序等,而运行代理服务程序的服务器也就相应称为HTTP代理服务器和FTP代理服务器。本文将介绍的Web代理服务程序代理的是HTTP协议。

      一、网络代理程序的优点

      代理服务所起的是一个桥的作用,它是网络信息的中转站。在网络中应用代理服务一般是基于以下几个原因:

      (1)充分利用IP地址资源。在局域网中,一般对外的IP地址都是非常有限的,为了保证局域网内部的主机都能够访问互联网资源,通过网络代理就可以实现。
      (2)能够保证网络安全。网络代理可以充当内部网和互联网之间的防火墙,通过过滤IP地址,限定某些IP地址对外部资源的访问。
      (3)能够有效地隐藏自己的IP地址和主机名。由于所有对外网的请求都是通过代理服务器实现的,所以目的主机只能知道代理服务器的IP地址。
      (4)提高网络速度。通常代理服务器都设有一个较大的硬盘缓冲区,它存储界数据,当你再访问相同的数据时,则可以直接从缓冲区中取出信息,从而提高访问速度。

      二、网络代理的类型及实现原理

      网络代理服务根据工作层次,一般可分为应用层代理、传输层代理和SOCKS代理。应用层代理是工作在TCP/IP参考模型的应用层之上,它支持对应用层协议(如HTTP、FTP)的代理。它提供的控制最多,但是不灵活,必须要有相应的协议支持。如果协议不支持代理(如SMTP和POP),那就只能在应用层以下代理,也即传输层代理。传输层代理直接与TCP层交互,更加灵活。要求代理服务器具有部分真正服务器的功能:监听特定TCP或UDP端口,接收客户端的请求同时向客户端发出相应的响应。另一种代理需要改变客户端的IP栈,即SOCKS代理。它是可用的最强大、最灵活的代理标准协议。SOCK V4允许代理服务器内部的客户端完全地连接到外部的服务器,SOCK V5增加了对客户端的授权和认证,因此它是一种安全性较高的代理。本节后面介绍的代理是一种应用层上面的代理,所代理的协议是HTTP,也就是经常见到的Web代理。

      正如上面所说,网络代理就是一个连接客户端(需要代理的计算机)和服务器端(提供访问资源的服务器)的桥。要实现这种桥的功能,网络代理就必须满足下列条件,其实也是代理服务的运行的流程:

      (1)接收并解析客户端的请求。
      (2)创建到服务器的新连接,并转发客户端的请求信息。
      (3)接收服务器反馈的信息。
      (4)解释服务器的响应并将该响应传回给客户端。

      图1是网络代理服务的一个典型模型图: 

      
      网络代理虽然有很多优点,但由于使用代理后,自己对网络的所有请求都是通过代理服务器这个中间人来实现的,所以有可能碰上存有恶意的人监听你的输入的内容。同样,如果选择的代理服务器的带宽比较小,使用代理还会降低网速。

      总而言之,使用代理有利有弊,使用者要根据自身的情况来决定。但无论如何,选择一个好的代理服务器是非常重要的。

    三、C#实现Web代理服务程序

      经过了上面的介绍,我想大家对代理服务应该有了一个基本的认识,下面就让我们通过一个实例来深入体会一下如何用C#实现Web代理服务。Web代理服务的功能顺序是这样的:

      (1)侦听端口,等待客户端浏览器发送来的Web请求信息。
      (2)接收到客户端Web请求信息后,解析出目标Web服务器的地址,并创建一个Socket实例,并以此实例连接Web服务器上。
      (3)通过创建的Socket传送客户端的Web请求数据包到Web服务器的80端口。
      (4)接收Web服务器返回的页面数据。
      (5)把接收来的数据传送到客户端,从而实现Web代理。

      客户端对某个Web地址的浏览,可能要传送很多的Web请求信息(比如网页中的图像、Flash等),为了更快更准确地处理这些信息,Web代理服务程序通常采用多线程来处理每一个Web请求。细心的读者可能会发现,处理每一个客户端的Web请求信息,代理服务器软件都要使用二个Socket,一个是用来接收/传送客户机的信息,一个是和Web服务器进行交流。为了区分这二个Socket,我们把和服务器对话的称为“服务Socket”,和客户端机器对话的称为“客户Socket”。

      下面就开始Web代理服务程序的编写工作。这个实例包含三个部分内容:

      1.创建一个Web代理类。
      2.Web代理服务的类的实例化。
      3.如何通过这个Web代理类的实例实现Web代理服务。

      (一)创建一个Web代理类

      具体操作步骤如下:

      1.启动Visual Studio.Net,依次选择“文件”、“新建”、“项目”菜单后,在弹出“新建项目”对话框中将“项目类型”设置为“Visual C#项目”,将“模板”设置为“Windows应用程序”,在“名称”文本框中输入“WebProxy”,在“位置”文本框中输入“E:VS.NET项目”,然后单击“确定”按钮,这样项目便建立好了。
      2.依次选择菜单“项目”、“添加类”,将弹出“添加新项”对话框。
      3.将“模板”设置为“类”。
      4.在“名称”文本框中输入“Proxy”,单击“打开”按钮,具体如图2所示:
      5.在“解决方案资源管理器”窗口中,双击Proxy.cs文件,进入Proxy.cs文件的编辑界
      6.在Proxy.cs源文件的开头,添加下列代码,下列代码是导入Proxy.cs中要使用到的命名空间:

      using System;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.IO;

      7.用下列构造函数替代默认的构造函数。下面的代码是在Proxy类中创建一个构造函数。Proxy类只有一个构造函数,并且这个构造函数只有一个参数,这个参数是Socket对象,它主要用来和客户端进行数据交换,是一个“客户Socket”:

      public Proxy(Socket socket)
      {
      //
      // TODO: 在此处添加构造函数逻辑
      //
      this.clientSocket = socket ;
      }

      8.在定义Proxy类代码区中加入下列代码,下列代码是定义Proxy类中的使用的一些变量,这些变量主要是在后面的定义Run方法中使用。

      Socket clientSocket;
      Byte[] read = new byte[1024];
      //定义一个空间,存储来自客户端请求数据包
      Byte [] Buffer = null;
      Encoding ASCII = Encoding.ASCII;
      //设定编码
      Byte[] RecvBytes = new Byte[4096];
      //定义一个空间,存储Web服务器返回的数据

    9.创建Proxy类中的Run方法。Run方法是Proxy类中唯一的方法。其功能是从客户端接收HTTP请求,并传送到Web服务器,然后从Web服务器接收反馈来的数据,并传送到客户端。为了实现这二个不同方面的数据传送,Run方法中是通过两个Socket实例来实现的。在编写Run方法的时候,要注意下面两点:

      (1)由于HTTP建立于TCP协议之上,所以创建的Socket实例应该使用TCP协议。下面代码是创建可以传送HTTP请求命令到Web服务器和接收来自Web服务器反馈来信息的Socket实例:

      Socket IPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

      (2)另外一个Socket是在代理服务程序侦听端口号,接收连接请求时候得到的,所以应该以此Socket为参数,利用Proxy类中的构造函数来创建一个Proxy实例。此Socket实现从客户端接收HTTP请求信息,并传送数据到客户端。

      Socket创建和使用是实现Web代理软件的关键。在构造函数代码后面,输入下列代码:
      public void Run()
      {
      string clientmessage = " " ;
      //存放来自客户端的HTTP请求字符串
      string URL = " " ;
      //存放解析出地址请求信息
      int bytes = ReadMessage(read, ref clientSocket, ref clientmessage);
      if (bytes == 0)
      {
      return ;
      }
      int index1 = clientmessage.IndexOf(' ');
      int index2 = clientmessage.IndexOf(' ', index1 + 1);
      if ((index1 == -1) || (index2 == -1))
      {
      throw new IOException();
      }
      string part1 = clientmessage.Substring(index1 + 1, index2 - index1);
      int index3 = part1.IndexOf('/', index1 + 8);
      int index4 = part1.IndexOf(' ', index1 + 8);
      int index5 = index4 - index3;
      URL = part1.Substring(index1 + 4, (part1.Length - index5) - 8); 
      try
      {
      IPHostEntry IPHost = Dns.Resolve(URL);
      Console.WriteLine("远程主机名: " + IPHost.HostName);
      string [] aliases = IPHost.Aliases;
      IPAddress[] address = IPHost.AddressList;
      Console.WriteLine("Web服务器IP地址:" + address[0]);
      //解析出要访问的服务器地址
      IPEndPoint ipEndpoint = new IPEndPoint(address[0], 80);
      Socket IPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      //创建连接Web服务器端的Socket对象
      IPsocket.Connect(ipEndpoint);
      //Socket连Web接服务器
      if (IPsocket.Connected)
      Console.WriteLine("Socket 正确连接!");
      string GET = clientmessage;
      Byte[] ByteGet = ASCII.GetBytes(GET);
      IPsocket.Send(ByteGet, ByteGet.Length, 0);
      //代理访问软件对服务器端传送HTTP请求命令
      Int32 rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0);
      //代理访问软件接收来自Web服务器端的反馈信息
      Console.WriteLine("接收字节数:" + rBytes.ToString());
      String strRetPage = null;
      strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, rBytes);
      while (rBytes > 0)
      {
      rBytes = IPsocket.Receive(RecvBytes, RecvBytes.Length, 0);
      strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, rBytes);
      }
      IPsocket.Shutdown(SocketShutdown.Both);
      IPsocket.Close();
      SendMessage(clientSocket, strRetPage);
      //代理服务软件往客户端传送接收到的信息
      }
      catch (Exception exc2)
      
      }
      
      //接收客户端的HTTP请求数据
      private int ReadMessage(byte [] ByteArray, ref Socket s, ref String clientmessage)
      {
      int bytes = s.Receive(ByteArray, 1024, 0);
      string messagefromclient = Encoding.ASCII.GetString(ByteArray);
      clientmessage = (String)messagefromclient;
      return bytes;
      }
      
      //传送从Web服务器反馈的数据到客户端
      private void SendMessage(Socket s, string message)
      {
      Buffer = new Byte[message.Length + 1];
      int length = ASCII.GetBytes(message, 0, message.Length, Buffer, 0);
      Console.WriteLine("传送字节数:" + length.ToString());
      s.Send(Buffer, length, 0);
      }

      至此,Proxy类的定义过程就完成了。

      (二)利用Proxy类,实现Web代理

      下面是利用Proxy类实现Web代理程序的具体实现步骤,Proxy类被定义在命名空间  WebProxy中:

      1.在Visual Studio .Net的代码编辑器中打开Class1.cs文件,进入Class1.cs的代码编辑界面。

      2.在Class1.cs源文件的开头导入下列命名空间:

      using System;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.IO;
      using System.Threading;
      using WebProxy;

      3.在Main函数中添加下列代码,下列代码是利用Proxy类,来实现Web代理程序:

      const int port = 8000 ;
      //定义端口号
      TcpListener tcplistener = new TcpListener(port);
      Console.WriteLine("侦听端口号: " + port.ToString());
      tcplistener.Start();
      //侦听端口号
      while (true)
      {
      Socket socket = tcplistener.AcceptSocket();
      //并获取传送和接收数据的Scoket实例
      Proxy proxy = new Proxy(socket);
      //Proxy类实例化
      Thread thread = new Thread(new ThreadStart(proxy.Run));
      //创建线程
      thread.Start();
      //启动线程
      }

      保存上面的所有步骤,这样一个简单Web代理程序就算是完成了。此Web代理程序侦听的是8000端口号。

      (三)测试Web代码程序

      Web代理程序要通过二台计算机才能够实现,其中的一台计算机运行Web代理程序充当Web代理服务器,另外一台计算机充当客户机,通过Web代理服务器来浏览网页。在确定Web代理软件运行后,需要对客户机进行进行必要的设置:

      1.打开IE浏览器。

      2.依次选择“工具”、“Internet选项”,在弹出的“Internet选项”对话框中选择“连接”页面,单击其中的“局域网设置”按钮,在弹出的“局域网(LAN)设置”对话框,选择“为LAN使用代理服务器(X),(这些设置不会应用于拨号和VPN连接)”多选框,并在其中的“地址”文本框中输入代理服务器的IP地址,比如“10.138.198.213”,在“端口”文本框中输入“8000”,如图3所示:


      此时客户端的设置就完成了。在确定IP地址为“10.138.198.213”的这台计算机已经运行上面介绍的Web代理程序后,打开客户端的IE浏览器,并输入要浏览的网址,就可以通过Web代理服务器来浏览网页了。图4是Web代理服务程序在服务器端运行时的界面:

      四、总结

      至此一个简单的Web代理服务软件就算基本完成了。虽然代理服务的实现原理相对简单,但具体实现还是很繁琐的。网络代理是一个内容丰富,实现复杂的论题,本节介绍的代理服务软件,无论在实现的协议种类,还是实现的功能,都只能算很小的一部分。希望各位能够通过本文的介绍,结合其他相关的知识,创造出功能更强大、安全性更高,使用更稳定的网络代理服务程序来。

    展开全文
  • 此处利用c#编写窗体,一键打开代理服务器设置IE代理。此程序是基于一改进方案进行开发。一般的做法是直接修改注册表进行IE代理的设置,但是需要重启浏览器才能生效,改进方案中修正这一弊端,在浏览器运行时就能...


    在进行IE代理服务设置时,需要手动打开代理服务器以及设置IE浏览器代理设置、开启或关闭。此处利用c#编写窗体,一键打开代理服务器、设置IE代理。此程序是基于一改进方案进行开发。一般的做法是直接修改注册表进行IE代理的设置,但是需要重启浏览器才能生效,改进方案中修正这一弊端,在浏览器运行时就能正常设置代理,但是不涉及代理服务器。此程序可以调用已经配置好的代理服务器,在开启代理后,能直接访问需要代理的网站,此程序经过安装部署处理。

    主要程序的将在最后显示。
    以下记录使用的部分程序:
    1.计算已使用此代理程序时间:
    DateTime start_time = DateTime.Now;
     private void show_timer_Tick(object sender, EventArgs e)
            {
                DateTime time_now = DateTime.Now;
                date_label.Text = time_now.ToShortDateString();
                time_label.Text = time_now.ToShortTimeString();
                TimeSpan time_begin = new TimeSpan(start_time.Ticks);
                TimeSpan time_end= new TimeSpan(time_now.Ticks);
                TimeSpan time_span = time_end.Subtract(time_begin).Duration();
                usedTime_label.Text ="Used "+ time_span.Hours.ToString() + " hours" + " "+time_span.Minutes.ToString() + " mins";
    
            }
    主要使用 TimeSpan 以及 Timer 控件。此处同时显示了当前时间。

    2, 获取计算机的有关信息,电脑名,用户名,处理器数量,电脑物理地址,操作系统版本,运行时的共同语言(基本不需要)。

    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                this.MaximizeBox = false;
                computer_info_listBox.Items.Add("computer name:" );
                computer_info_listBox.Items.Add( Environment.MachineName);
                computer_info_listBox.Items.Add("user name:" );
                computer_info_listBox.Items.Add( Environment.UserName);
                computer_info_listBox.Items.Add("processor count:" );
                computer_info_listBox.Items.Add( Environment.ProcessorCount);
                computer_info_listBox.Items.Add("computer mac address:");
                 computer_info_listBox.Items.Add( GetNetworkAdapterID());
         
                computer_info_listBox.Items.Add("Operation system version:" );
                computer_info_listBox.Items.Add(Environment.OSVersion);
                computer_info_listBox.Items.Add("common language running:");
                computer_info_listBox.Items.Add(Environment.Version);
    此段代码被放置在组件初始化程序( InitializeComponent();)后面。
    其中,获取电脑物理地址调用了自定义的函数。函数定义如下
    public static string GetNetworkAdapterID()
            {
                
                    string mac = "";
                    ManagementClass mc = new ManagementClass("Win32_NetWorkAdapterConfiguration");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {
                       if((bool)mo["IPEnabled"]==true)
                            mac = mo["MacAddress"].ToString();
                            
                    }
    
                    return mac;
            }
    网上有关物理地址获取的方式较多。此处是参考官网上的实例。网上的此种方法函数定义稍复杂,测试发现,有些不一定能使用。

    3.打开,关闭代理服务器程序
    打开代理服务器
    将代理服务器文件放在debug文件下,包括.exe文件。然后在开启IE代理设置的同时,执行此程序。
               System.Diagnostics.Process.Start(@".\proxyfile\local\<span style="line-height: 29.7000007629395px; white-space: pre-wrap; font-family: 'microsoft yahei';">proxy</span>.exe");
    
    此处的proxyfile是包含.exe的文件。proxy是代理服务器名,此处没有填写自己正在使用的代理服务器名。

    关闭代理服务器程序
     public void KillProcess(string ProName)
            {
                Process[] Goagent_proxy = Process.GetProcessesByName(ProName);
              
                foreach(Process p_kill in Goagent_proxy)
                {
                    p_kill.Kill();
                }
            }
    关闭正在运行的代理服务器是通过调用以上函数完成的,其中函数的参数是代理服务器名,即proxy.exe中的 proxy
    此处主要使用 process 类,具体使用可以参考相关文档。

    4.关闭messagebox执行事件。此处是打开一网址。
     DialogResult message_Result=  MessageBox.Show("Step1: Import certificate from goagent, detail operation,see:" + "\n" + "    when you click the OK below,you will see the article " +"\n"+"Step2: click setting proxy button in the interface", "Instruction",MessageBoxButtons.OK);
              if (message_Result == DialogResult.OK)
              {
                  Process.Start("http://jingyan.baidu.com/article/8275fc869f1c0c46a03cf6e9.html ");
              }
            }




    5 安装部署
    此处使用的visual studio2012版,与2010版不同,需要手动下载InstallShiled.步骤如下;
    打开 VS, new -- project -- Installed--template--other Project Types --Setup and Deployment ,选择ok后者中间的 InstallShield Limited Edition Project,将在浏览器中打开下载改程序的网页,在右侧填写相关信息。然后下载。
    注意,若国家、城市等无法打开下拉选框进行填写时,表明这是Great Wall 在发挥作用,解决办法是使用代理服务器打开此页面。
    后面的步骤就是下载安装 InstallShield。 注意,安装之前要关闭VS,同时,右键安装程序,以管理员身份运行
    完成后,按照之前的步骤重新操作,即可。


    程序源码
    ProxySeting.cs:
    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Management;
    using System.IO;
    namespace IEProxyManagment
    {
        public partial class ProxySeting : Form
        {
            DateTime start_time = DateTime.Now;
            public ProxySeting()
            {
                InitializeComponent();
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                this.MaximizeBox = false;
                computer_info_listBox.Items.Add("computer name:" );
                computer_info_listBox.Items.Add( Environment.MachineName);
                computer_info_listBox.Items.Add("user name:" );
                computer_info_listBox.Items.Add( Environment.UserName);
                computer_info_listBox.Items.Add("processor count:" );
                computer_info_listBox.Items.Add( Environment.ProcessorCount);
                computer_info_listBox.Items.Add("computer mac address:");
                 computer_info_listBox.Items.Add( GetNetworkAdapterID());
         
                computer_info_listBox.Items.Add("Operation system version:" );
                computer_info_listBox.Items.Add(Environment.OSVersion);
                computer_info_listBox.Items.Add("common language running:");
                computer_info_listBox.Items.Add(Environment.Version);
    
                //DateTime start_time = DateTime.Now;
               
            }
    
            public static string GetNetworkAdapterID()
            {
                
                    string mac = "";
                    ManagementClass mc = new ManagementClass("Win32_NetWorkAdapterConfiguration");
                    ManagementObjectCollection moc = mc.GetInstances();
                    foreach (ManagementObject mo in moc)
                    {
                       if((bool)mo["IPEnabled"]==true)
                            mac = mo["MacAddress"].ToString();
                            
                    }
    
                    return mac;
            }
           /* public static List<string> GetMacByIPConfig()
            {
                List<string> macs = new List<string>();
                ProcessStartInfo startInfo = new ProcessStartInfo("ipconfig", "/all");
                startInfo.UseShellExecute = false;
                startInfo.RedirectStandardInput = true;
                startInfo.RedirectStandardOutput = true;
                startInfo.RedirectStandardError = true;
                startInfo.CreateNoWindow = false;
                Process p = Process.Start(startInfo);
    
                StreamReader reader = p.StandardOutput;
                string line = reader.ReadLine();
                while (!reader.EndOfStream)
                {
                    if (string.IsNullOrEmpty(line))
                    {
                        line = line.Trim();
    
                        if (line.StartsWith("Physical Address"))
                        {
                            macs.Add(line);
                        }
                    }
                    line = reader.ReadLine();
                }
                p.WaitForExit();
                p.Close();
                reader.Close();
    
                return macs;
            }   */
                   
            private void btnSetProxy_Click(object sender, EventArgs e)
            {
               System.Diagnostics.Process.Start(@".\proxyfile\local\proxy.exe");
                string proxyStr = combProxyList.Text.Trim();
                IEProxySetting.SetProxy(proxyStr, null);
                var currentProxy = GetProxyServer();
                if (currentProxy == proxyStr && GetProxyStatus())
                {
                    lblInfo.Text = "Setting Proxy:" + proxyStr + "  successfully!";
                    lblInfo.ForeColor = Color.Green;
                }
                else
                {
                    if (!GetProxyStatus())
                    {
                        lblInfo.Text = "Setting Proxy:" + proxyStr + "Proxy does not work!";
    
                    }
                    else
                    {
                        lblInfo.Text = "Setting Proxy:" + proxyStr + "failed,It is using" + currentProxy + "Proxy,please try!";
    
                    }
                    lblInfo.ForeColor = Color.Red;
                }
                ShowProxyInfo();
                btnSetProxy.Enabled = false;
                btnDisableProxy.Enabled = true;
            }
    
            private void ProxySetingWin_Load(object sender, EventArgs e)
            {
                ShowProxyInfo();
                InitProxyData();
            }
    
            /// <summary>
            /// 获取正在使用的代理
            /// </summary>
            /// <returns></returns>
            private string GetProxyServer()
            {
                //打开注册表 
                RegistryKey regKey = Registry.CurrentUser;
                string SubKeyPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
                RegistryKey optionKey = regKey.OpenSubKey(SubKeyPath, true);             //更改健值,设置代理, 
                string actualProxy = optionKey.GetValue("ProxyServer").ToString();
                regKey.Close();
                return actualProxy;
            }
    
            private bool GetProxyStatus()
            {
                //打开注册表 
                RegistryKey regKey = Registry.CurrentUser;
                string SubKeyPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
                RegistryKey optionKey = regKey.OpenSubKey(SubKeyPath, true);             //更改健值,设置代理, 
                int actualProxyStatus = Convert.ToInt32(optionKey.GetValue("ProxyEnable"));
                regKey.Close();
                return actualProxyStatus == 1 ? true : false;
            }
    
            private void ShowProxyInfo()
            {
                if (!GetProxyStatus())
                {
                    lblInitInfo.Text = "Proxy Disabled:";
                }
                else
                {
                    lblInitInfo.Text = "Current using Proxy is:" + GetProxyServer();
                }
            }
    
            private void InitProxyData()
            {
                List<string> proxyList = new List<string>{
                   "127.0.0.1:8087","127.0.0.1:8088"
               };
                combProxyList.DataSource = proxyList;
                combProxyList.SelectedIndex = 0;
            }
            public void KillProcess(string ProName)
            {
                Process[] Goagent_proxy = Process.GetProcessesByName(ProName);
              
                foreach(Process p_kill in Goagent_proxy)
                {
                    p_kill.Kill();
                }
            }
    
            private void btnDisableProxy_Click(object sender, EventArgs e)
            {
                
                KillProcess("proxy");
                IEProxySetting.UnsetProxy();
                if (!GetProxyStatus())
                {
                    lblInfo.Text = "Diable Proxy successfully!";
                    lblInfo.ForeColor = Color.Green;
                    btnSetProxy.Enabled = true;
                    btnDisableProxy.Enabled = false;
                }
                else
                {
                    lblInfo.Text = "fail to cancle,using Proxy " + GetProxyServer();
                    lblInfo.ForeColor = Color.Red;
                    btnSetProxy.Enabled = false;
                    btnDisableProxy.Enabled = true;
                }
                ShowProxyInfo();
              //  btnSetProxy.FlatAppearance.BorderSize = 0;//去边线
                btnSetProxy.Enabled = true;
                btnDisableProxy.Enabled = false;
            }
    
            private void btnSetProxy_MouseEnter(object sender, EventArgs e)
            {
                this.Cursor = Cursors.Hand;
                btnSetProxy.BackColor = Color.Red;
            }
    
            private void btnSetProxy_MouseLeave(object sender, EventArgs e)
            {
                this.Cursor = Cursors.Default;
                btnSetProxy.BackColor = System.Drawing.SystemColors.ControlLight;
            }
    
            private void btnDisableProxy_MouseEnter(object sender, EventArgs e)
            {
                this.Cursor = Cursors.Hand;
                btnDisableProxy.BackColor = Color.Red;
            }
    
            private void btnDisableProxy_MouseLeave(object sender, EventArgs e)
            {
                this.Cursor = Cursors.Default;
                btnDisableProxy.BackColor = System.Drawing.SystemColors.ControlLight;
            }
    
          
    
            private void problemsToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Counter any problem,please setting proxy manually"+"\n"+"Or, Contact the maker.");
            }
    
            private void editorToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Edited by YangHong,and based on other's work" + "\n" + "Contact him with email or QQ:1368783069");
            }
    
            private void exitToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void show_timer_Tick(object sender, EventArgs e)
            {
                DateTime time_now = DateTime.Now;
                date_label.Text = time_now.ToShortDateString();
                time_label.Text = time_now.ToShortTimeString();
                TimeSpan time_begin = new TimeSpan(start_time.Ticks);
                TimeSpan time_end= new TimeSpan(time_now.Ticks);
                TimeSpan time_span = time_end.Subtract(time_begin).Duration();
                usedTime_label.Text ="Used "+ time_span.Hours.ToString() + " hours" + " "+time_span.Minutes.ToString() + " mins";
    
            }
    
            private void instructionToolStripMenuItem_Click(object sender, EventArgs e)
            {
               // MessageBox.Show("Step1: Import certificate from goagent, detail operation,see:" + "\n" + "http://jingyan.baidu.com/article/8275fc869f1c0c46a03cf6e9.html " +"\n"+"Step2: click setting proxy button in the interface", "Instruction");
              DialogResult message_Result=  MessageBox.Show("Step1: Import certificate from goagent, detail operation,see:" + "\n" + "    when you click the OK below,you will see the article " +"\n"+"Step2: click setting proxy button in the interface", "Instruction",MessageBoxButtons.OK);
              if (message_Result == DialogResult.OK)
              {
                  Process.Start("http://jingyan.baidu.com/article/8275fc869f1c0c46a03cf6e9.html ");
              }
            }
        }
    }
    


    ProxySetting_Function

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IEProxyManagment
    {
       
        public class ProxySetting_Function
        {
            public static bool UnsetProxy()
            {
                return SetProxy(null, null);
            }
            public static bool SetProxy(string strProxy)
            {
                return SetProxy(strProxy, null);
            }
    
            public static bool SetProxy(string strProxy, string exceptions)
            {
                InternetPerConnOptionList list = new InternetPerConnOptionList();
    
                int optionCount = string.IsNullOrEmpty(strProxy) ? 1 : (string.IsNullOrEmpty(exceptions) ? 2 : 3);
                InternetConnectionOption[] options = new InternetConnectionOption[optionCount];
                // USE a proxy server ...
                options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS;
                options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY));
                // use THIS proxy server
                if (optionCount > 1)
                {
                    options[1].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
                    options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy);
                    // except for these addresses ...
                    if (optionCount > 2)
                    {
                        options[2].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS;
                        options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions);
                    }
                }
    
                // default stuff
                list.dwSize = Marshal.SizeOf(list);
                list.szConnection = IntPtr.Zero;
                list.dwOptionCount = options.Length;
                list.dwOptionError = 0;
    
    
                int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));
                // make a pointer out of all that ...
                IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length);
                // copy the array over into that spot in memory ...
                for (int i = 0; i < options.Length; ++i)
                {
                    IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize));
                    Marshal.StructureToPtr(options[i], opt, false);
                }
    
                list.options = optionsPtr;
    
                // and then make a pointer out of the whole list
                IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((Int32)list.dwSize);
                Marshal.StructureToPtr(list, ipcoListPtr, false);
    
                // and finally, call the API method!
                int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero,
                   InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                   ipcoListPtr, list.dwSize) ? -1 : 0;
                if (returnvalue == 0)
                {  // get the error codes, they might be helpful
                    returnvalue = Marshal.GetLastWin32Error();
                }
                // FREE the data ASAP
                Marshal.FreeCoTaskMem(optionsPtr);
                Marshal.FreeCoTaskMem(ipcoListPtr);
                if (returnvalue > 0)
                {  // throw the error codes, they might be helpful
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
    
                return (returnvalue < 0);
            }
        }
    
        #region WinInet structures
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct InternetPerConnOptionList
        {
            public int dwSize;               // size of the INTERNET_PER_CONN_OPTION_LIST struct
            public IntPtr szConnection;         // connection name to set/query options
            public int dwOptionCount;        // number of options to set/query
            public int dwOptionError;           // on error, which option failed
            //[MarshalAs(UnmanagedType.)]
            public IntPtr options;
        };
    
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct InternetConnectionOption
        {
            static readonly int Size;
            public PerConnOption m_Option;
            public InternetConnectionOptionValue m_Value;
            static InternetConnectionOption()
            {
                InternetConnectionOption.Size = Marshal.SizeOf(typeof(InternetConnectionOption));
            }
    
            // Nested Types
            [StructLayout(LayoutKind.Explicit)]
            public struct InternetConnectionOptionValue
            {
                // Fields
                [FieldOffset(0)]
                public System.Runtime.InteropServices.ComTypes.FILETIME m_FileTime;
                [FieldOffset(0)]
                public int m_Int;
                [FieldOffset(0)]
                public IntPtr m_StringPtr;
            }
        }
        #endregion
    
        #region WinInet enums
        //
        // options manifests for Internet{Query|Set}Option
        //
        public enum InternetOption : uint
        {
            INTERNET_OPTION_PER_CONNECTION_OPTION = 75
        }
    
        //
        // Options used in INTERNET_PER_CONN_OPTON struct
        //
        public enum PerConnOption
        {
            INTERNET_PER_CONN_FLAGS = 1, // Sets or retrieves the connection type. The Value member will contain one or more of the values from PerConnFlags 
            INTERNET_PER_CONN_PROXY_SERVER = 2, // Sets or retrieves a string containing the proxy servers.  
            INTERNET_PER_CONN_PROXY_BYPASS = 3, // Sets or retrieves a string containing the URLs that do not use the proxy server.  
            INTERNET_PER_CONN_AUTOCONFIG_URL = 4//, // Sets or retrieves a string containing the URL to the automatic configuration script.  
    
        }
    
        //
        // PER_CONN_FLAGS
        //
        [Flags]
        public enum PerConnFlags
        {
            PROXY_TYPE_DIRECT = 0x00000001,  // direct to net
            PROXY_TYPE_PROXY = 0x00000002,  // via named proxy
            PROXY_TYPE_AUTO_PROXY_URL = 0x00000004,  // autoproxy URL
            PROXY_TYPE_AUTO_DETECT = 0x00000008   // use autoproxy detection
        }
        #endregion
    
        internal static class NativeMethods
        {
            [DllImport("WinInet.dll", SetLastError = true, CharSet = CharSet.Auto)]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength);
        }
    }
    
















    展开全文
  • C#代理服务器 支持Socket5、FTP、等多种协议的代理服务器 可运行决定真实
  • c# socket设置代理

    2020-07-11 23:30:34
    c# socket设置代理,经测试没有问题,才敢发帖.
  • 采用c#实现的代理服务器技术,绝对的通俗易懂,而且可以作为很好的学习案例进行分析。特别是和http协议打交道比较多的c#.net程序员可千万别错过哦!只要能够学到东西,积分都是浮云
  • 1.新生命XProxy网络代理服务器 作者博客:http://www.cnblogs.com/nnhy/ 源码地址:http://xproxy.codeplex.com/ 2.SuperSocket代理服务器 作者博客:http://www.cnblogs.com/jzywh/ 源码地址:...

    1.新生命XProxy网络代理服务器

    作者博客:http://www.cnblogs.com/nnhy/

    源码地址:http://xproxy.codeplex.com/

    2.SuperSocket代理服务器

    作者博客:http://www.cnblogs.com/jzywh/

    源码地址:http://proxyserver.codeplex.com/(SuperSocket库http://supersocket.codeplex.com/)

    转载于:https://www.cnblogs.com/cgjt/archive/2012/07/06/TwoCSharpOpenSourceProxyServer.html

    展开全文
  • 实例29 <br>稿件名称:用C#实现Http代理服务器 <br>稿件作者:陈东 <br>程序名称:HttpProxy<br><br>运行环境:Win 98/2000;Microsoft C# <br>注意事项: <br>
  • 2019独角兽企业重金招聘Python工程师标准>>> ...

    今天无意中看大国外一款C#写的代理服务器,借此,分享给大家。

    解决方案:

    都是源码。

    C# HTTP代理服务器

    这里,我以控制台的形式,向大家展现下它的功能。

    我们以HTTP代理为例。

    别忘了,使用前,阅读下readme.txt。

    首次,启动,会提示你设置监听类。下面是我设置后,在应用程序目录生成了名为config.xml的配置文件。

    其中listener 配置的是我们使用的监听,value是主机+端口的形式。

     

    <MentalisProxy>
      <Version value="1.0" />
      <Settings />
      <Users />
      <Listeners>
        <listener type="Org.Mentalis.Proxy.Http.HttpListener" value="host:172.16.16.65;int:100" />
      </Listeners>
    </MentalisProxy>

    关于首次启动,如何根据命令提示设置,我们先看看启动后的效果吧

    启动后,我们根据软件提示,输入Help命令,就可以看大它支持的命令列表。这里,我要创建一个监听,就使用addlistener命令。

    addlistener
    >Org.Mentalis.Proxy.Http.HttpListener
    >host:127.0.0.1;int:100

    创建成功,下次启动程序,会自动启动这个监听。

    启动后,我们可以通过设置浏览器代理服务器,来进行测试,也就可以在请求的过程中,给程序加上断点。

    这里是局域网的IP,保存设置后,我们打开一个网页试试,以我的博客为例:

    李朝强的博客

    使用起来很简单。感兴趣的朋友,可以在评论后面留下邮箱,我会将源代码发给你。你也可以去http://www.mentalis.org/soft/top.qpx这个网站下载。

     

    转载于:https://my.oschina.net/lichaoqiang/blog/794164

    展开全文
  • 代理程序的种类非常多,根据协议不同可以分成HTTP代理服务程序、FTP代理服务程序等,而运行代理服务程序的服务器也就相应称为HTTP代理服务器和FTP代理服务器。本文将介绍的Web代理服务程序代理的是HTTP协议。 一、...
  • C#实现HTTP代理

    2020-07-01 23:50:26
    HTTP代理 C# 网页代理 web代理
  • 不知道为什么那些网文作者都说socks代理比http代理复杂,http代理和socks代理我都做了,明显感觉http代理比socks代理要复杂很多,因为http代理要自己解析http协议,...我做的那个http代理可谓很失败,用着用着就cpu100%...
  • 将开发过程中经常用到的一些代码段备份一下,如下代码段是关于C#穿过代理服务器取远程用户真实IP地址的代码,应该能对大伙有所用。if(Request.ServerVariables["HTTP_VIA"]!=null){ string user_IP=Request....
  • 开始写Blog读取工具时一直是直接访问,访问方式也比较简单:  WebRequest _HWR = WebRequest.CreateDefault(new System.Uri(URL));    ...WebResponse _HRS = _HWR.GetResponse() ;...
  • 二话不说先上图: 设置代理ip是参考网上的资料,下面是设置代理ip代码:
  • tcp socket代理服务器

    2020-07-11 23:31:20
    中间件 转发服务 包含: tcp socket基础编程 代理服务器模型,源码,demo。
  • https://www.cnblogs.com/sanler/p/7267944.html 转载于:https://www.cnblogs.com/changbaishan/p/11084166.html
  • 如何利用 C# 爬取 One 持有者返利数据! 如何利用 C# 爬取Gate.io交易所的公告! 如何利用 C# 爬取BigOne交易所的公告! 如何利用 C# 爬取 ONE 的交易数据? 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片...
  • c#实现的自动采集代理服务器和IP自动切换程序(C#.NET)
  • 转载:https://blog.csdn.net/dlmuxgyang/article/details/8495370用C#编写的代码如下:using System;using System.Windows.Forms;// 引入命名空间using Microsoft.Win32;...//ProxyFastSetting 代理快...
1 2 3 4 5 ... 20
收藏数 27,470
精华内容 10,988