參考了網上很多資料,綜合整理出來最終的代碼:
using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Text; using System.Threading.Tasks; using static System.Console; using static System.GC; using static System.Net.WebRequest; namespace 代理測試 { class Program { int printCount; Uri uri; Encoding bin; string[] IpSectionSpan = { "10.197.255.", "10.197.198." }; NetworkCredential credit; [STAThread] static void Main(string[] args) { new Program(); ReadKey(); } public Program() { var dr = new AppSettingsReader(); credit = new NetworkCredential( dr.GetValue("uid", typeof(string)).ToString(), dr.GetValue("pwd", typeof(string)).ToString()); //var creadentiCache = new CredentialCache(); uri = new Uri("http://wwww.baidu.com/"); bin = Encoding.GetEncoding("UTF-8"); //測試 IpSectionSpan 中所有IP段中所有IP TestIPSetions(); } private void TestIPSetions() { //for (int i = 1; i < 255; i++) //{ TestInSpan(198.ToString()); //} } private void TestInSpan(string ipSect) { for (var i = 255; i > 0; i--) { var wproxy = new WebProxy(@"10.137." + ipSect + "." + i, 3128); //uri = new Uri("http://10.137.255." + i+":3128/"); //creadentiCache.Add(uri, "Basic", credit); //wproxy.Credentials = creadentiCache; wproxy.Credentials = credit; //Collect(); var req = Create(uri) as HttpWebRequest; req.PreAuthenticate = true; req.Timeout = 1000; //超時 req.Proxy = wproxy; req.KeepAlive = false; try { WebResponse resp; req.BeginGetResponse(ra => { try { using (resp = req.EndGetResponse(ra)) { if (resp != null) { var sr = new StreamReader(resp.GetResponseStream(), bin); var str = sr.ReadToEnd(); if (!str.Contains("百度")) return; WriteLine("{0}\t:{1} \t 驗證成功!", printCount++, wproxy.Address); sr.Close(); sr.Dispose(); } } } catch (Exception ex) { WriteLine("{0}\t:{1} \t 驗證失敗,失敗原因:\t {2}", printCount++, wproxy.Address, ex.Message); } }, null); } catch (Exception e) { WriteLine(e.Message); } } } } }