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对它们服务器产生太大压力之后他们会不会封掉。不过目前可用。。所有的代码如上了。。

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

  • 相关阅读:
    LeetCode 382. Linked List Random Node
    LeetCode 398. Random Pick Index
    LeetCode 1002. Find Common Characters
    LeetCode 498. Diagonal Traverse
    LeetCode 825. Friends Of Appropriate Ages
    LeetCode 824. Goat Latin
    LeetCode 896. Monotonic Array
    LeetCode 987. Vertical Order Traversal of a Binary Tree
    LeetCode 689. Maximum Sum of 3 Non-Overlapping Subarrays
    LeetCode 636. Exclusive Time of Functions
  • 原文地址:https://www.cnblogs.com/zhouzhaokun/p/2171315.html
Copyright © 2011-2022 走看看