zoukankan      html  css  js  c++  java
  • C#.NET动手开发域名抢注前检测工具。 西安

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

    废话不多说,先上图

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

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

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

    域名类型选择框的数据我目前是写死的。在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对它们服务器产生太大压力之后他们会不会封掉。不过目前可用。。所有的代码如上了。。

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

  • 相关阅读:
    前端之HTML
    python 迭代器、生成器、装饰器
    python实现线程池
    Archiva与maven配置使用
    Jenkins在windows环境下安装无法安装插件
    ②Jenkins集成—集成构建部署
    linux环境下maven的安装配置
    linux环境下git的安装配置
    ①Jenkins集成—入门安装使用
    Ant build.xml相关属性详解
  • 原文地址:https://www.cnblogs.com/zhouzhaokun/p/2171315.html
Copyright © 2011-2022 走看看