私はビットシフトが好きではないので、一度作成したエクスプロイト スキャナー用に独自の IP 反復構成を作成しました。そのまま、コードはアドレスと余分なドットを出力するだけです。ping ユーティリティまたはポート スキャナーのコメントを外すと、それに対しても正常に機能します。
いくつかの最適ではない変数名と広範な例外について申し訳ありません。これは、以前書いたよりきちんとしたクラスのメモリからその場で書きました。Java を使用すると、ビットシフトを使用せずに 1 つのサブネットだけでなく、より広い範囲の IP を反復処理できることを示すだけです。
package com.cybergrinder.core;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ScanClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
// get input from somewhere, in this case we use the scanner for convenience and testing
// try for example with 192.0.0.0 and 192.255.255.255 to scan the entire 192-B ranges
Scanner scanner = new Scanner(System.in);
System.out.println("start part of the address");
String rangeStart = scanner.nextLine();
System.out.println("end part of the address");
String rangeEnd = scanner.nextLine();
int[] startAdrElements = new int[4];
int[] endAdrElements = new int[4];
// System.out.println(rangeStart.split("\\.")[0]);
int startA1 = (Integer.parseInt(rangeStart.split("\\.")[0]));
int startB1 = (Integer.parseInt(rangeStart.split("\\.")[1]));
int startC1 = (Integer.parseInt(rangeStart.split("\\.")[2]));
int startD1 = (Integer.parseInt(rangeStart.split("\\.")[3]));
int endA = (Integer.parseInt(rangeEnd.split("\\.")[0]));
int endB = (Integer.parseInt(rangeEnd.split("\\.")[1]));
int endC = (Integer.parseInt(rangeEnd.split("\\.")[2]));
int endD = (Integer.parseInt(rangeEnd.split("\\.")[3]));
int a = 0, b = 0, c = 0, d = 0; // args to work with after itteration proces
for (int startA = startA1; startA <= endA; startA++) {// max 255.255.255.255, could implement sanitisation later..
a = startA;
for (int startB = startB1; startB <= endB; startB++) {
b = startB;
for (int startC = startC1; startC <= endC; startC++) {
c = startC;
for (int startD = startD1; startD <= endD; startD++) {
d = startD;
// convert intArray to byteArray
int[] intArray = new int[] { a, b, c, d };
String address = "";
for (int e : intArray) {
address += e + ".";
}
try {
System.out.println(address);
// enable pinging
/*
address = address.substring(0, (address.length() - 1));
InetAddress ipBytes = InetAddress.getByName(address);
boolean up = false;
up = ipBytes.isReachable(500);
if (up == true) {
System.out.println("host at " + ipBytes + " is up");
}
*/
// enable portscanning
/*
* int port = 80; Socket sock = new Socket();
* sock.connect(new InetSocketAddress(ipBytes,
* port), 2000); //if it does not connect flow
* goes to catch System.out.println(port +"/tcp"
* + " is open ");
*/
} catch (Exception e) {
// e.printStackTrace(); System.out.println("host
// is down");
}
}
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
}