端口扫描器之java实现

 
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; public class TcpThread extends Thread{ //定义变量
public static InetAddress hostAddress;//主机IP地址
public static int MIN_port; //The minimal number of port
public static int MAX_port; //The maximal number of port
private int NUM_thread; //线程总数
public static int type; //查询方式,0为IP方式1为主机名查询方式 public static int ip1;//IP前三位
public static int ip2;//IP4~6位
public static int ip3;//IP7~9位
public static int ipstart;//起始IP地址最后四位
public static int ipend;//结束IP地址最后四位
public static String ipAll;//完整的IP地址 String nameHost = "";//扫描的主机名称或IP地址
String typeport = "0";//端口类别 /**
* 构造函数
*/
public TcpThread( String name, int numthread ){
super(name);
this.NUM_thread = numthread;
} /**
* run()运行函数
*/
public void run( ) { int h = 0;//IP address
int i = 0;//port number Socket theTcpSocket; //根据IP地址进行扫描
if( 0 == type ){
//IP地址循环扫描
for( h = ipstart; h <= ipend; h++){
ipAll = "" + ip1 + "." + ip2 + "." + ip3 + "." + h;
nameHost = ipAll; try{
hostAddress = InetAddress.getByName( ipAll );
}catch( UnknownHostException e){} //不同端口循环扫描
for( i = MIN_port; i < MAX_port + Integer.parseInt( ThreadScan.maxThread.getText() );
i += Integer.parseInt(ThreadScan.maxThread.getText() ) ){
try{
theTcpSocket = new Socket(hostAddress, i);
theTcpSocket.close(); ThreadScan.Result.append( nameHost +":"+i); switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以
case 21:
typeport = "(FTP)";
break;
case 23:
typeport = "(TELNET)";
break;
case 25:
typeport = "SMTP";
break;
case 80:
typeport = "HTTP";
break;
case 110:
typeport = "POP";
break;
case 139:
typeport = "netBIOS";
break;
case 1433:
typeport = "SQL Server";
break;
case 3389:
typeport = "Terminal Service";
break;
case 443:
typeport = "HTTPS";
break;
case 1521:
typeport = "Oracle";
break;
} //端口没有特定类型
if( typeport.equals("0")){
ThreadScan.Result.append("\n");
}else{
ThreadScan.Result.append(":" + typeport + "\n");
}
}catch( IOException e){}
}
}
if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){
ThreadScan.Result.append("\n" + "扫描完成...");
//请"确定"按钮设置为可用
if( !ThreadScan.Submit.setEnable( true ) );
}
} //按主机名进行端口扫描
if( 1 == type ){
for( i = MIN_port + NUM_thread; i < MAX_port + Integer.parseInt(ThreadScan.maxThread.getText());
i += Integer.parseInt( ThreadScan.maxThread.getText( ) ) ) {
try{
theTcpSocket = new Socket( hostAddress, i );
theTcpSocket.close();
ThreadScan.Result.append(" " + i);
switch( i ){//其实这儿可以不用switch,直接用个hash表记录就可以
case 21:
typeport = "(FTP)";
break;
case 23:
typeport = "(TELNET)";
break;
case 25:
typeport = "SMTP";
break;
case 80:
typeport = "HTTP";
break;
case 110:
typeport = "POP";
break;
case 139:
typeport = "netBIOS";
break;
case 1433:
typeport = "SQL Server";
break;
case 3389:
typeport = "Terminal Service";
break;
case 443:
typeport = "HTTPS";
break;
case 1521:
typeport = "Oracle";
break;
}
if( typeport.equals("0") ){
ThreadScan.Result.append("\n");
}else{
ThreadScan.Result.append(":" + typeport + "\n");
}
}catch( IOException e){ }
}
if( i == MAX_port + Integer.parseInt(ThreadScan.maxThread.getText())){
ThreadScan.Result.append("\n" + "扫描完成...");
if( !ThreadScan.Submit.isEnable()){
ThreadScan.Submit.setEnabled( true );
}
}
}//End of if
}
}
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* 实现扫描的主体程序,TreadScan
* @author Administrator
*
*/ public class ThreadScan { public static JFrame main = new JFrame("Scaner(V1.0)By Nevermore"); //注册框架类
public static JTextArea Result = new JTextArea("", 4, 40); //显示扫描结果
public static JScrollPane resultPane = new
JScrollPane( Result, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); public static JTextField nameHost = new JTextField("localhost", 8 );//输入主机名文本框
public static JTextField fromip1 = new JTextField("0", 3); //输入IP地址前三位的文本框
public static JTextField fromip2 = new JTextField("0", 3); //输入IP地址4~6位的文本框
public static JTextField fromip3 = new JTextField("0", 3); //输入IP地址7~9位的文本框
public static JTextField fromip4 = new JTextField("0", 3); //输入IP地址后三位的文本框 public static JTextField toip = new JTextField("0", 3); //输入目标IP地址后四位 public static JTextField minPort = new JTextField("0", 4); //最小端口输入框
public static JTextField maxPort = new JTextField("1000", 4); //最大端口输入框 public static JTextField maxThread = new JTextField("100", 3); //最大线程数
public static JDialog DLGError = new JDialog(main, "错误!"); //错误提示框
public static JLabel DLGINFO = new JLabel("");
public static JLabel type = new JLabel("请选择:");
//扫描类型
public static JRadioButton radioIP = new JRadioButton("IP地址:");
public static JRadioButton radioHost = new JRadioButton("主机名:", true);
//单选按钮组
public static ButtonGroup group= new ButtonGroup();
public static JLabel p1 = new JLabel("端口范围:");
public static JLabel p2 = new JLabel("~");
public static JLabel p3 = new JLabel("~");
public static JLabel Pdot1 = new JLabel(".");
public static JLabel Pdot2 = new JLabel(".");
public static JLabel Pdot3 = new JLabel(".");
public static JLabel TNUM = new JLabel("线程数:");
public static JLabel RST = new JLabel("扫描结果:");
public static JLabel con = new JLabel("");
//定义按钮
public static JButton Ok = new JButton("确定");
public static JButton Submit = new JButton("开始扫描");
public static JButton Cancel = new JButton("退出");
public static JButton saveButton = new JButton("保存扫描结果");
//菜单栏设计:这一块好好学习学习
public static JMenuBar myBar = new JMenuBar();
public static JMenu myMenu = new JMenu("文件(F)");
public static JMenuItem saveItem = new JMenuItem("保存扫描结果(S)");
public static JMenuItem exitItem = new JMenuItem("退出(Q)");
public static JMenu myMenu2 = new JMenu("帮助");
public static JMenuItem helpItem = new JMenuItem("阅读"); /**
* 主方法
*/
public static void main( String[] argcs ){
main.setSize(500, 400);
main.setLocation(400, 400);
main.setResizable(false);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); DLGError.setSize(300, 100);
DLGError.setLocation(400, 400);
//添加"菜单栏"
myMenu.add(saveItem);
myMenu.add(exitItem); myMenu2.add(helpItem); myBar.add(myMenu);//将菜单条目添加到菜单
myBar.add(myMenu2); main.setJMenuBar(myBar);//将菜单添加到框架
//设置热键
myMenu.setMnemonic('F');
saveItem.setMnemonic('S');
//为"另存为"组建设置快捷键CTRL + S
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
//采用表格包模式布局
Container mPanel = main.getContentPane();
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10, 0, 0, 10); c.gridx = 0;// 设置表格坐标
c.gridy = 0;
c.gridwidth = 10;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(type, c); group.add(radioIP);
group.add(radioHost); c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(radioIP, c); c.gridx = 1;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.CENTER;
mPanel.add(fromip1, c); c.gridx = 2;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
mPanel.add(Pdot1, c); c.gridx = 3;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(fromip2, c); c.gridx = 4;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(Pdot2, c); c.gridx = 5;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(fromip3, c); c.gridy = 1;
c.gridx = 6;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(Pdot3, c); c.gridx = 7;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(fromip4, c); c.gridx = 8;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(p2, c); c.gridx = 9;
c.gridy = 1;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(toip, c); c.gridx = 0;
c.gridy = 2;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(radioHost, c); c.gridx = 1;
c.gridy = 2;
c.gridwidth = 3;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(nameHost, c); c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(p1, c); c.gridx = 1;
c.gridy = 3;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(minPort, c); c.gridx = 2;
c.gridy = 3;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(p3, c); c.gridx = 3;
c.gridy = 3;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(maxPort, c); c.gridx = 0;
c.gridy = 4;
c.gridwidth = 1;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(TNUM, c); c.gridx = 1;
c.gridy = 4;
c.gridwidth = 3;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(maxThread, c); c.gridx = 0;
c.gridy = 5;
c.gridwidth = 3;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(Submit, c); c.gridx = 3;
c.gridy = 5;
c.gridwidth = 3;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(saveButton, c); c.gridx = 6;
c.gridy = 5;
c.gridwidth =4;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(Cancel, c); c.gridx = 0;
c.gridy = 6;
c.gridwidth = 10;
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(RST, c); //设置文本域可以换行
Result.setLineWrap(true);
//设置文本域不可编辑
Result.setEditable(false); c.gridx = 0;
c.gridy = 7;
c.gridwidth = 10;
c.gridheight = 4;
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.CENTER;
mPanel.add(resultPane, c); Container dPanel = DLGError.getContentPane();
dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
dPanel.add(DLGINFO);
dPanel.add(Ok); Submit.addActionListener(new SubmitAction());
Cancel.addActionListener(new CancelAction());
Ok.addActionListener(new OkAction()); //实现保存功能
saveItem.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
JFileChooser fc = new JFileChooser();
int returnVal = fc.showSaveDialog(null);
//单击保存按钮
if( 0 == returnVal ){
File saveFile = fc.getSelectedFile();
try{
FileWriter writeOut = new FileWriter( saveFile );
writeOut.write(ThreadScan.Result.getText());
writeOut.close(); }catch( IOException ex ){ System.out.println("保存失败");}
}
}
});
//实现退出功能
ActionListener li = new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
System.exit(0);
}
};
exitItem.addActionListener(li);
//实现帮助功能 ActionListener lil = new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
new AboutDialog();//
}
};
helpItem.addActionListener(lil); ActionListener lill = new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
JFileChooser fc = new JFileChooser();
int returnVal = fc.showSaveDialog(null);
//单击保存按钮
if( 0 == returnVal ){
File saveFile = fc.getSelectedFile();
try{
FileWriter writeOut = new FileWriter(saveFile);
writeOut.write(ThreadScan.Result.getText());
writeOut.close();
}catch(IOException ex ){ System.out.println("保存失败");}
}else{
return;//单击取消
} }
};
saveButton.addActionListener(lill);
main.setVisible(true);
}
}
/**
*
* @author Nevermore
* 实现取消功能
*/
class CancelAction implements ActionListener{
public void actionPerformed( ActionEvent e){
System.exit(0);
}
}
/**
*
* @author Nevermore
* 实现确定按钮
*/
class SubmitAction implements ActionListener{
public void actionPerformed( ActionEvent a){
int minPort;
int maxPort;
int maxThread; int ip1 = 0;
int ip2 = 0;
int ip3 = 0;
int ipstart = 0;
int ipend = 0; String ipaddress = "";
String nameHost = "";
ThreadScan.Result.setText("");
if( ThreadScan.Submit.isEnabled()){
ThreadScan.Submit.setEnabled(false);
}
/**
* 判断扫描类型
* 根据IP地址扫描 type = 0
*根据主机名称扫描type = 1
*/
if( ThreadScan.radioIP.isSelected()){
TcpThread.type = 0;
//判断IP地址的前三位是否是int型
try{
ip1 = Integer.parseInt(ThreadScan.fromip1.getText());
}catch( NumberFormatException e ){
ThreadScan.DLGINFO.setText("错误的IP地址");
ThreadScan.DLGError.setVisible(true);
return;
}
try{
ip2 = Integer.parseInt(ThreadScan.fromip2.getText());
}catch( NumberFormatException e ){
ThreadScan.DLGINFO.setText("错误的IP地址");
ThreadScan.DLGError.setVisible(true);
return;
}
try{
ip3 = Integer.parseInt(ThreadScan.fromip3.getText());
}catch( NumberFormatException e ){
ThreadScan.DLGINFO.setText("错误的IP地址");
ThreadScan.DLGError.setVisible(true);
return;
}
try{
ipstart = Integer.parseInt(ThreadScan.fromip4.getText());
}catch( NumberFormatException e ){
ThreadScan.DLGINFO.setText("错误的IP地址");
ThreadScan.DLGError.setVisible(true);
return;
}
try{
ipend = Integer.parseInt(ThreadScan.toip.getText());
}catch( NumberFormatException e ){
ThreadScan.DLGINFO.setText("错误的IP地址");
ThreadScan.DLGError.setVisible(true);
return;
} //判断是否是合理的IP地址
if(ip1 < 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||
ip3 < 0 || ip3 > 255 || ipstart < 0 || ipstart > 255 ){
ThreadScan.DLGINFO.setText("IP地址为0~255的整数");
ThreadScan.DLGError.setVisible(true);
return ;
}else{
TcpThread.ip1 = ip1;
TcpThread.ip2 = ip2;
TcpThread.ip3 = ip3;
TcpThread.ipstart = ipstart;
}
//判断目标IP地是否合理
if( ipend < 0 || ipend > 255 ){
ThreadScan.DLGINFO.setText("目标IP地址的范围是0~255");
ThreadScan.DLGError.setVisible(true);
return;
}else{
TcpThread.ipend = ipend;
} ipaddress = "" + ip1 + ip2 + ip3 + ipstart; /**
* 判断IP地址的有效性
*/
try{
TcpThread.hostAddress = InetAddress.getByName(ipaddress);
}catch( UnknownHostException e){
ThreadScan.DLGINFO.setText("错误的IP或IP地址不可到达!");
ThreadScan.DLGError.setVisible(true);
return;
} if( ThreadScan.radioHost.isSelected()){
TcpThread.type = 1;
/**
* 判断主机名的有效性
*/
try{
TcpThread.hostAddress = InetAddress.getByName(ThreadScan.nameHost.getText());
}catch( UnknownHostException e){
ThreadScan.DLGINFO.setText("错误的域名或地址不可到达!");
ThreadScan.DLGError.setVisible(true);
return;
}
}
/**
* 判断端口号的有效性
*/
try{
minPort = Integer.parseInt(ThreadScan.minPort.getText());
maxPort = Integer.parseInt(ThreadScan.maxPort.getText());
maxThread = Integer.parseInt(ThreadScan.maxThread.getText());
}catch( NumberFormatException e ){
ThreadScan.DLGINFO.setText("错误的端口号或端口号和线程数必须为整数");
ThreadScan.DLGError.setVisible(true);
return;
}
/**
* 判断最小端口号的有效范围
* 判断条件大于0小于65535最大端口号大于最小端口号
*/
if( minPort < 0 || minPort > 65535 || minPort > maxPort ){
ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");
ThreadScan.DLGError.setVisible(true);
return;
}else{
TcpThread.MIN_port = minPort;
}
/**
* 判断最大端口号的有效范围
*/
if( maxPort < 0 || maxPort > 65535 || maxPort < minPort ){
ThreadScan.DLGINFO.setText("端口号范围:0~65535,并且最大端口号应大于最小端口号!");
ThreadScan.DLGError.setVisible(true);
return;
}else{
TcpThread.MAX_port = maxPort;
}
/**
* 判断线程数的有效范围
* 判断条件 大于1且小于200
*/
if( maxThread < 1 || maxThread > 200 ){
ThreadScan.DLGINFO.setText("线程数的有效范围是1~200");
ThreadScan.DLGError.setVisible(true);
return;
}
ThreadScan.Result.append("线程数" + ThreadScan.maxThread.getText() + "\n"); /**
* 启动线程
*/
for( int i = 0; i < maxThread; i++ ){
new TcpThread("T" + i, i).start();
}
}
}
}
/**
*
* @author Administrator
* 错误对话框
*/
class OkAction implements ActionListener{
public void actionPerformed( ActionEvent e){
ThreadScan.DLGError.dispose();
}
}
import javax.swing.*;
import java.awt.*; public class AboutDialog extends JDialog{
JPanel JMainPane = new JPanel();
JTabbedPane jTabbedPane = new JTabbedPane(); private JPanel JPanel1 = new JPanel();
private JPanel JPanel2 = new JPanel(); private JTextArea jt1 = new JTextArea(6, 6);
private JTextArea jt2 = new JTextArea(6, 6); /**
* 构造函数
*/
public AboutDialog(){
setTitle("Scaner");
setSize(300,200);
setResizable(false);
setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE); Container c = this.getContentPane(); jt1.setSize(260,200);
jt2.setSize(260,200);
jt1.setEditable(false);
jt2.setEditable(false);
jt1.setLineWrap(true);
jt2.setLineWrap(true); jt1.setText("");
jt1.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13));
jt2.setText("");
jt2.setFont(new Font("楷体_GB2312", java.awt.Font.BOLD, 13)); jt1.setForeground(Color.black);
jt2.setForeground(Color.black); JPanel1.add(jt1);
JPanel2.add(jt2); jTabbedPane.setSize(300,200);
jTabbedPane.addTab("扫描原理", null, JPanel1, null);
jTabbedPane.addTab("使用说明", null, JPanel2, null);
JMainPane.add(jTabbedPane);
c.add(JMainPane);
pack();
this.setVisible(true);
}
}

端口扫描器之java实现的更多相关文章

  1. 7.python实现高效端口扫描器之nmap模块

    对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块. 本片文章主要介绍nmap模块的两个常用类: PortScanner()类,实现一个nma ...

  2. Android NDK学习之第一个实例---端口扫描

    为什么要写一个端口扫描的程序,Java来写不是很方便吗?因为我也没有想到什么例子能够方便的来练习.于是想到以前找到的端口扫描的C代码,于是想用他们来练习.扫描服务端端口的方式有许多种,最简单的就是直接 ...

  3. ★Kali信息收集★8.Nmap :端口扫描

    ★Kali信息收集~ 0.Httrack 网站复制机 http://www.cnblogs.com/dunitian/p/5061954.html ★Kali信息收集~ 1.Google Hackin ...

  4. APP漏洞扫描器之本地拒绝服务检测详解

    APP漏洞扫描器之本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确全面.本文将讲一下应用漏洞 ...

  5. Python3实现TCP端口扫描

    在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞. TCP端 ...

  6. 端口扫描base

    #coding:utf8 import os import socket import sys def IsOpen(ip,port): s = socket.socket(socket.AF_INE ...

  7. 端口扫描之王——nmap入门精讲(一)

    端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...

  8. 使用Metasploit进行端口扫描

    Metasploit中不仅能够使用第三方扫描器Nmap等,在其辅助模块中也包含了几款内建的端口扫描器. 查看Metasploit框架提供的端口扫描工具: msf > search portsca ...

  9. 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描

    端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...

随机推荐

  1. ECSHOP用户评论

    可以不需要审核吗?现在的用户评论要审核才能显示 ,我需要不用审核就可以显示可以么? 在论坛上看见这个问题,顺便就记录下来吧. 这个是可以的,下面是操作步骤 后台->系统设置->商店设置-& ...

  2. gauge.js的应用

    最近项目要做个手机端的仪表盘,但是画风太给力,echarts.highcharts.D3等等都不能满足业务的需求,你懂的!开找,找到个gauge.js 下面简单介绍下这个插件官网http://bern ...

  3. sql server数据库区分大小写设置

    数据库表中字段alter Table TableName 区分大小写 ALTER Column ColumnName VARCHAR(50) COLLATE Chinese_PRC_CS_AS不区分大 ...

  4. 实现两个select list box间item的移动和过滤

    <head> <title> </title> <!--Standard jQuery --> <script type="text/j ...

  5. HNOI2004 宠物收养所 解题报告

    首先读完这题第一印象,是个裸题,很高兴.其次在打完代码之后,第二印象,很恶心,Treap的代码太长了,我今天下午敲了三遍,手都麻了. 废话不多说,正题.其实这个题不难,有几个点是很好的,首先,他的a值 ...

  6. SQL in Qt (一)

    Connecting to Databases To access a database with QSqlQuery or QSqlQueryModel, create and open one o ...

  7. 基于excel9.h的excel处理

    基于excel9.h的excel处理; #include "excel9.h" #include <iostream> using namespace std; cla ...

  8. directive和controller如何通信

    1.AngularJS是何方神圣 Angular JS (Angular.JS) 是一组用来开发Web页面的框架.模板以及数据绑定和丰富UI组件.它支持整个开发进程,提供web应用的架构,无需进行手工 ...

  9. 接口(三)——JAVA的多重继承

    一.接口的作用 ①.为了能够向上转型为多个基类型 ②.防止客户端程序员创建该类的对象——同抽象类 二.通过继承扩展接口 interface Monster{ void menace(); } inte ...

  10. 关于C#的一点小知识 以后自己用

    项目过程中遇到C#代码的编写 上网查之后的结果 @html.ActionLink的几种参数格式 一 Html.ActionLink("linkText","actionN ...