C#.NET动手开发域名抢注前检测工具。

demo:下载 http://www.kuaipan.cn/file/id_19288762550855653.html
相信院子里很多朋友都有过抢注域名的经历,去官方网站查询一些特殊域名是否已经被注册。比如喜欢找4个字母或者4个数字的朋友肯定去查询过。最近小弟也有这个需求。但是一个一个去查询很麻烦。而且想的肯定都不全面。于是我做了个小工具。暂且起名叫 域名检测工具。他可以扫描出来你事先设置的规则下所有可注册域名列表。

废话不多说,先上图

C#.NET动手开发域名抢注前检测工具。

可以看到前边有个选项框。可以选择 纯数字,纯字母或者数字字母混合类型的域名。第二个配置是 域名长度。第三个配置是域名结尾。

本来我是想把第三个配置  也就是 域名结尾部分取消。让系统自动去检测常用域名后缀下的所有可注册域名。但是由于本人正则太烂。写不出来匹配规则。暂且就这样了!

界面就这样了。。下边上代码:

域名类型选择框的数据我目前是写死的。在Load事件里边加载的。代码如下:

 private void Main_Load(object sender, EventArgs e)
{
IList
<DoMailType> list = new List<DoMailType>();
list.Add(
new DoMailType() { TID = 1, TName = "数字", TDescription = "纯数字" });
list.Add(
new DoMailType() { TID = 2, TName = "字母", TDescription = "纯字母" });
list.Add(
new DoMailType() { TID = 3, TName = "混合", TDescription = "字母和数字混合" });

cmbDoMailType.DataSource
= list;

cmbDoMailType.ValueMember
= "TID";
cmbDoMailType.DisplayMember
= "TName";
}
 /// <summary>
/// 域名类别
/// </summary>
public class DoMailType
{
/// <summary>
/// 类别ID
/// </summary>
public int TID { get; set; }
/// <summary>
/// 类别名称
/// </summary>
public string TName { get; set; }
/// <summary>
/// 类别说明
/// </summary>
public string TDescription { get; set; }
}

然后是 开始扫描按钮。这个按钮事件也很简单。。他只是启动一个 timer控件。代码如下:

 private void btnStart_Click(object sender, EventArgs e)
{
timer1.Enabled
= true;
btnStart.Enabled
= false;
btnEnd.Enabled
= true;
}

 private void timer1_Tick(object sender, EventArgs e)
{
CheckResult();
}

CheckResult() 方法也比较简单。首先我是用个抓包工具。点击查询之后通过抓包工具查看它像服务器发送的请求。都是GET的。方法入下:

private void CheckResult()
{
try
{
string lastStr;
string url;
string validateCode;
GetUrl(
out lastStr, out url, out validateCode);

HttpWebRequest httpRequest
= (HttpWebRequest)WebRequest.Create(url);
httpRequest.Timeout
= 2000;
httpRequest.Method
= "GET";
HttpWebResponse httpResponse
= (HttpWebResponse)httpRequest.GetResponse();
StreamReader sr
= new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
string result = sr.ReadToEnd();

if (!result.Contains("(已被注册)"))
{
Log.WriteLog(
"www." + validateCode + lastStr);
if (this.textBox1.Text != "")
{
this.textBox1.Text += "\r\n";
}
this.textBox1.Text += "www." + validateCode + lastStr;

}

textBox1.Focus();
textBox1.Select(textBox1.Text.Length,
0);
textBox1.ScrollToCaret();

sr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
this.timer1.Enabled = false;
}
}

private void GetUrl(out string lastStr, out string url, out string validateCode)
{
int type = Convert.ToInt32(cmbDoMailType.SelectedValue);
int size = Convert.ToInt32(this.txtSize.Text.Trim());
lastStr
= this.txtLastStr.Text.Trim();
//string url = "http://www.now.cn/whois/nowcheck.net?query={0}&Submit22=%D4%D9%B4%CE%B2%E9%D1%AF&blog=&domain%5B%5D=.com&domain%5B%5D=.net&domain%5B%5D=.cn&domain%5B%5D=.com.cn&domain%5B%5D=.net.cn";
url = "http://www.now.cn/whois/nowcheck.net?query={0}&Submit22=%D4%D9%B4%CE%B2%E9%D1%AF&blog=&domain%5B%5D={1}";
switch (type)
{
case 1://数字
validateCode = CrateNumber(size);
break;
case 2://字母
validateCode = CrateLetter(size);
break;
case 3:
validateCode
= CreateLetterAndNumber(size);
break;
default:
//1
validateCode = CrateNumber(size);
break;
}
//validateCode = "269";
url = string.Format(url, validateCode, lastStr);
}
/// <summary>
/// 创建随机数字
/// </summary>
/// <param name="size"></param>
/// <returns></returns>
private static string CrateNumber(int size)
{
string validateCode;
char[] chars = "023456789".ToCharArray();
Random random
= new Random();
validateCode
= string.Empty;
for (int i = 0; i < size; i++)
{
char rc = chars[random.Next(0, chars.Length)];
if (validateCode.IndexOf(rc) > -1)
{
i
--;
continue;
}
validateCode
+= rc;
}
return validateCode;
}
/// <summary>
/// 创建随机字母
/// </summary>
/// <param name="size"></param>
/// <returns></returns>
private static string CrateLetter(int size)
{
string validateCode;
char[] chars = "abcdefghighlmnopqrstuvwxyz".ToCharArray();
Random random
= new Random();
validateCode
= string.Empty;
for (int i = 0; i < size; i++)
{
char rc = chars[random.Next(0, chars.Length)];
if (validateCode.IndexOf(rc) > -1)
{
i
--;
continue;
}
validateCode
+= rc;
}
return validateCode;
}
/// <summary>
/// 创建随机混合字符串
/// </summary>
/// <param name="size"></param>
/// <returns></returns>
private static string CreateLetterAndNumber(int size)
{
string validateCode;
char[] chars = "abcdefghighlmnopqrstuvwxyz023456789".ToCharArray();
Random random
= new Random();
validateCode
= string.Empty;
for (int i = 0; i < size; i++)
{
char rc = chars[random.Next(0, chars.Length)];
if (validateCode.IndexOf(rc) > -1)
{
i
--;
continue;
}
validateCode
+= rc;
}
return validateCode;
}

 

我POST的是 时代互联的。。不晓得这个POST对它们服务器产生太大压力之后他们会不会封掉。不过目前可用。。所有的代码如上了。。

如果各位大侠有更好的方法。希望不吝赐教。我当吸取教训。改进代码。

你可能感兴趣的:(.net)