前言:其实,这个工具最开始是为了两位玩域名的朋友写的,虽然西部数码提供了一个自动化的域名检测工具(http://www.west.cn/web/mi/#),但是比较遗憾的是并没有提供.xin后缀的检测。因此,他们拜托我写下了这个小工具,在这个软件中对单个域名状态的检测我使用了万网提供的接口。
注:文末我会放出源代码和打包好的工具的下载链接,同时还会分享几个我生成的实用字典
一 原理简介
对大量域名的注册情况进行自动化检测,细分开来讲就是多次对单个域名的注册情况的检测。而对单个域名的检测我们可以使用万网提供的接口(http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=xxx.yy),具体细节可以参考我以前写过的一篇文章:http://www.zifangsky.cn/2015/11/java中的get和post请求,使用万网接口判断域名是否已被注/
因此,在这篇文章里,我主要实现的是:(1)做了一个比较直观的图形化界面;(2)支持从外部导入字典文件进行自动化检测;(3)支持对多种后缀的检测,包括可以自定义后缀;(4)同时还实现了对探测结果的导出。
运行后的截图基本上是这样的:
界面和导入导出功能不用多说,实现起来很简单,而且代码中有详细注释,一看就懂。这里需要说明的是,为了让检测的状态在界面中实时显示出来(左边的正在检测以及右边的可注册和超时域名),我选择了在一个新的线程里执行文件读取,联网查询这类比较费时的工作,同时使用了SwingUtilities.invokeLater来通知事件分发线程及时更新界面。
二 具体的代码实现package view;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileSystemView;
public class MainView extends JFrame implements ActionListener, MouseListener{
/**
* 自动化批量检测域名是否已注册
* @author zifangsky
* @blog http://www.zifangsky.cn
* @date 2015-12-30
* @version v1.0.0
*/
private static final long serialVersionUID = 1L;
private GridBagLayout gridbag;
private GridBagConstraints constraints;
private JPanel mainJPanel,panel1,panel2,panel3,panel4,panel5,panel6,panel7;
private JButton selectDic,beginCheck; // 选择字典,开始检测
private JLabel domainSuffix,custom,progress,result; //域名后缀,自定义后缀,探测进度,结果
private JFileChooser dicChooser; //字典选择
private JTextField customJTextField; //自定义
private JScrollPane progressPane,resultPane; //进度面板和结果面板
private JTextArea progressJtJTextArea,resultJTextArea; //同上
private JCheckBox[] suffixCheckBoxs = new JCheckBox[15]; //域名后缀多项选择框
private JMenuBar jMenuBar;
private JMenu help;
private JMenuItem author,contact,version,readme;
private JPopupMenu outPutData; //导出数据
private JMenuItem availableDomains,timeOutDomains,allDomains; //可用域名,超时域名,全部域名
private Font menuFont = new Font("宋体", Font.LAYOUT_NO_LIMIT_CONTEXT, 14); //菜单字体
private Font contentFont = new Font("宋体", Font.LAYOUT_NO_LIMIT_CONTEXT, 16); //正文字体
private String dicName = "",cu