/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package marulvupper; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @author main */ public class Main { private static String cardNum; private static String server; private static String bbs; private static String key; private static HashMap mapHap = new HashMap(); private static String Pon; private static String makeNum; private static HashMap mapSid = new HashMap(); private static final Pattern patternSid = Pattern.compile("SESSION-ID=(.*)"); private static final Pattern patternPon = Pattern.compile("PON=(.*?);"); private static final Pattern patternHap = Pattern.compile("HAP=(.*?);"); /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length != 5) { System.out.println("引数の数がおかしいです。"); System.exit(0); } cardNum = args[0]; { Matcher matcher = Pattern.compile("http://(.+?)/test/read.cgi/(.+?)/(\\d+)").matcher(args[1]); if (matcher.find() == false) { System.out.println("スレッドのURLがおかしいです。"); System.exit(0); } server = matcher.group(1); bbs = matcher.group(2); key = matcher.group(3); } makeNum = args[2]; for (int i = 1; i <= Integer.parseInt(makeNum); i++) { String maruId = makeRandomString(new Random().nextInt(25) + 5) + "@" + makeRandomString(new Random().nextInt(25) + 5) + ".jp"; String maruPass = makeRandomString(new Random().nextInt(5) + 5); System.out.println(maruId); System.out.println(maruPass); setMaru(i, maruId, maruPass); setSid(i, maruId, maruPass); } try { for (int j = 0; j <= Integer.parseInt(args[4]); j++) { for (int i = 1; i <= Integer.parseInt(makeNum); i++) { write2ch(i); Thread.sleep(1000 * 30); } Thread.sleep(1000 * Integer.parseInt(args[3])); } } catch (InterruptedException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } private static void setSid(int num, String maruId, String maruPass) { try { URL url = new URL("https://2chv.tora3.net/futen.cgi"); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8118))); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("User-Agent", "Mozilla"); httpURLConnection.setDoOutput(true); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream()); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); String body = "ID=" + URLEncoder.encode(maruId, "Shift-JIS") + "&PW=" + URLEncoder.encode(maruPass, "Shift-JIS"); bufferedWriter.write(body); bufferedWriter.close(); outputStreamWriter.close(); InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream(), "Shift-JIS"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line = null; while ((line = bufferedReader.readLine()) != null) { Matcher matcher = patternSid.matcher(line); if (matcher.find()) { mapSid.put(num, matcher.group(1)); break; } } bufferedReader.close(); inputStreamReader.close(); } catch (Exception e) { System.out.println(e.toString()); } } private static void write2ch(int num) { boolean flagRetry = false; try { URL url = new URL("http://" + server + "/test/bbs.cgi"); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("User-Agent", "Mozilla"); httpURLConnection.setRequestProperty("Referer", url.toString()); httpURLConnection.setRequestProperty("Cookie", "PON=" + Pon + ";" + "HAP=" + mapHap.get(num) + ";"); httpURLConnection.setDoOutput(true); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream()); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); String body = "kuno=ichi" + "&bbs=" + URLEncoder.encode(bbs, "Shift-JIS") + "&FROM=" + URLEncoder.encode("!ninja", "Shift-JIS") + "&mail=" + URLEncoder.encode("sage", "Shift-JIS") + "&MESSAGE=" + URLEncoder.encode("test", "Shift-JIS") + "&time=" + URLEncoder.encode("1111111111", "Shift-JIS") + "&key=" + URLEncoder.encode(String.valueOf(key), "Shift-JIS") + "&sid=" + URLEncoder.encode(String.valueOf(mapSid.get(num)), "Shift-JIS"); bufferedWriter.write(body); bufferedWriter.close(); outputStreamWriter.close(); InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream(), "Shift-JIS"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); Map headerFields = httpURLConnection.getHeaderFields(); String setCookie = ""; if (headerFields != null && headerFields.get("Set-Cookie") != null) { setCookie = headerFields.get("Set-Cookie").toString(); } String line = null; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); if (line.indexOf("■ 書き込み確認 ■") != -1) { Matcher matcher = patternPon.matcher(setCookie); if (matcher.find()) { Pon = matcher.group(1); } flagRetry = true; break; } } bufferedReader.close(); inputStreamReader.close(); Matcher matcher = patternHap.matcher(setCookie); if (matcher.find()) { mapHap.put(num, matcher.group(1)); saveHap(num, matcher.group(1)); } if (flagRetry) { write2ch(num); } } catch (Exception e) { System.out.println(e.toString()); } } private static void saveHap(int num, String hap) { try { String fileName = "tmp/" + String.valueOf(num) + ".txt"; OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(fileName, false), "Shift-JIS"); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); bufferedWriter.write(hap); bufferedWriter.flush(); bufferedWriter.close(); outputStreamWriter.close(); } catch (Exception e) { System.out.println(e.toString()); } } private static void setMaru(int num, String maruId, String maruPass) { try { URL url = new URL("https://2chv.tora3.net/_bam-bin/bam-regist3.cgi"); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8118))); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("User-Agent", "Mozilla"); httpURLConnection.setRequestProperty("Referer", "https://www.nttcredit.com/tora3-2ch/bam-order-jp.cgi"); httpURLConnection.setDoOutput(true); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream()); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); String body = "site=Z9999" + "&secure=off" + "&product=T3001" + "&username=" + URLEncoder.encode(maruId, "Shift-JIS") + "&userpass=" + maruPass + "&cardtype=visa" + "&firstname=" + makeRandomString(new Random().nextInt(5) + 5) + "&lastname=" + makeRandomString(new Random().nextInt(5) + 5) + "&ccnum=" + cardNum + "&expmo=09" + "&expyr=2016" + "&country=Japan" + "&city=" + makeRandomString(new Random().nextInt(10) + 5) + "&state=" + "&zip=" + URLEncoder.encode(String.valueOf(new Random().nextInt(900) + 100) + "-" + String.valueOf(new Random().nextInt(9000) + 1000), "Shift-JIS") + "&fax=" + "&address1=" + makeRandomString(new Random().nextInt(15) + 5) + "&address12" + makeRandomString(new Random().nextInt(15) + 5) + "&phone=" + "080" + String.valueOf(new Random().nextInt(900000000) + 100000000) + "&payplan=" + URLEncoder.encode("33.00", "Shift-JIS"); bufferedWriter.write(body); bufferedWriter.close(); outputStreamWriter.close(); InputStreamReader inputStreamReader = new InputStreamReader(httpURLConnection.getInputStream(), "Shift-JIS"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String line = null; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } bufferedReader.close(); inputStreamReader.close(); } catch (Exception e) { System.out.println(e.toString()); } } private static String makeRandomString(int cnt) { final String chars = "abcdefghijklmnopqrstuvwxyz0123456789"; Random rnd = new Random(); StringBuilder buf = new StringBuilder(); for (int i = 0; i < cnt; i++) { int val = rnd.nextInt(chars.length()); buf.append(chars.charAt(val)); } return buf.toString(); } }