C#.NET动手开发域名抢注前检测工具。
1 | demo:下载 <a href= "http://www.kuaipan.cn/file/id_19288762550855653.html" rel= "noopener nofollow" >http://www.kuaipan.cn/file/id_19288762550855653.html</a> |
1 | 相信院子里很多朋友都有过抢注域名的经历,去官方网站查询一些特殊域名是否已经被注册。比如喜欢找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对它们服务器产生太大压力之后他们会不会封掉。不过目前可用。。所有的代码如上了。。
如果各位大侠有更好的方法。希望不吝赐教。我当吸取教训。改进代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库