il programma sarà più o meno così(naturalmente dopo andrà fatto con i thread se no addio)

import java.io.*;
import java.net.*;
import java.lang.*;

public class connessione{
public static void main(String[] args)throws Exception{

InetAddress indirizzo=null;
byte[] mioip=new byte[4];
int[] mioip2=new int[4];

mioip=indirizzo.getLocalAddress().getAddress() //controlla questa istruzione. su alcuni tool va inj eccezzione


//fai un cast da mioip a mioip2 in quanto con i cicli for darà problemi sui byte

//controlli mioip2[0] che valore ha. in questo modo capisci a che classe appartiene il tuo ip.
//in base al valore di mioip2[0] fai vari cicli for annidati in modo da assegnare a mioip[1],mioip[2],mioip[3] il valore dei contatori dei cicli(devi rifare il cast!)

una volta creato l'indirizzo "successivo a mano" guardi il metodo che ti crea un inetaddress in base all' array di byte------->indirizzo.setAddress(mioip) (p.s. non mi ricordo il noime del metodo)

poi fai X=indirizzo.isreachable(5000); //x è un boolean

if(x){
System.pout.println("l'ip tal dei tali esiste");
}

il corpo è questop
poi c'è da migliorarlo con dei thread altrimenti ci mette una vita se è un indirizzo di class eb o a.