Hi,
ich bin gerade dabei ein tool zu programmieren das alle IP Adressen im Netzwerk Anzeigen kann. Dabei verwende ich eine Schleife die alle möglichen IP Adressen durchgeht. Der Ping wird mir der klasse InetAdress durchgeführt:
count = Integer Variable die mit 0 Initialisiert wurde
results = ist eine TextArea aus JavaFX
ip = String Variable in der die IP Adresse steht (siehe fortfolgender Code)
Das Problem ist jetzt aber das die Klasse sagt das z.B. 192.168.178.3 erreichbar ist sie existiert in meinem Netz aber nicht. Nur bei ganz wenigen Adressen sagt er das sie nicht erreichbar sind.
Meine Frage daher: Woran liegt das und was kann ich dagegen machen?
Hier noch der ganze Code:
PS Ein weiteres Problem ist das sobald man den Button startPing aufruft öffnet sich ein Zweites Fenster und es werden die ersten 2 IP Adressen als erreichbar angezeigt dann muss das Programm erst zu ende laufen bis alles angezeigt wird.
ich bin gerade dabei ein tool zu programmieren das alle IP Adressen im Netzwerk Anzeigen kann. Dabei verwende ich eine Schleife die alle möglichen IP Adressen durchgeht. Der Ping wird mir der klasse InetAdress durchgeführt:
Code:
do{
boolean address = false;
count ++;
try {
address = InetAddress.getByName(ip).isReachable(5000);
} catch (IOException e) {
}
if(address){
String text = results.getText();
results.setText(text + "\n" + ip + " erreichbar");
count = 4;
}
results = ist eine TextArea aus JavaFX
ip = String Variable in der die IP Adresse steht (siehe fortfolgender Code)
Das Problem ist jetzt aber das die Klasse sagt das z.B. 192.168.178.3 erreichbar ist sie existiert in meinem Netz aber nicht. Nur bei ganz wenigen Adressen sagt er das sie nicht erreichbar sind.
Meine Frage daher: Woran liegt das und was kann ich dagegen machen?
Hier noch der ganze Code:
Code:
package Tools;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
import javafx.application.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class NetworkPing extends Application {
BorderPane content;
StackPane center;
HBox menu;
HBox buttons;
Label setNetwork;
Label setSubnet;
TextField firstOktett;
TextField secondOktett;
TextField thirredOktett;
TextField fourthOktett;
TextField subnettMask;
TextArea results;
ProgressBar progress;
Button startPing;
Button cancel;
int numberof;
int lenght = 0;
int discount = 0;
public void start(Stage stage) {
content = new BorderPane();
content.setPadding(new Insets(20, 20, 20, 10));
menu = new HBox();
menu.setSpacing(5);
buttons = new HBox();
buttons.setSpacing(5);
buttons.setAlignment(Pos.BASELINE_RIGHT);
center = new StackPane();
center.setPadding(new Insets(5, 5, 5, 5));
setNetwork = new Label("Netz indem gesucht werden soll: ");
setSubnet = new Label("Subnet des Netz: ");
firstOktett = new TextField();
secondOktett = new TextField();
thirredOktett = new TextField();
fourthOktett = new TextField();
subnettMask = new TextField();
results = new TextArea();
results.setEditable(false);
results.setPadding(new Insets(3, 3, 3, 3));
startPing = new Button("Ping");
cancel = new Button("Abbrechen");
progress = new ProgressBar();
menu.getChildren().setAll(setNetwork, firstOktett, secondOktett, thirredOktett, fourthOktett, setSubnet,
subnettMask);
buttons.getChildren().addAll(cancel, startPing);
center.getChildren().add(results);
content.setTop(menu);
content.setBottom(buttons);
content.setCenter(center);
Scene scene = new Scene(content);
stage.setScene(scene);
stage.setMaximized(true);
stage.show();
listener();
}
private void listener() {
startPing.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
// TODO Auto-generated method stub
buttons.getChildren().removeAll(cancel,startPing);
buttons.getChildren().addAll(progress,cancel,startPing);
try {
startPing();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
private void startPing() throws UnknownHostException {
int oktett1 = 0;
int oktett2 = 0;
int oktett3 = 0;
int oktett4 = 0;
try {
if(firstOktett.equals(null)){
oktett1 = 0;
numberof = 255 * 255 * 255 * 255;
}else{
oktett1 = Integer.parseInt(firstOktett.getText());
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Bitte Oktett 1 korekkt angeben!");
}
try {
if(secondOktett.equals(null)){
oktett2 = 0;
numberof = 255 * 255 * 255;
}else{
oktett2 = Integer.parseInt(secondOktett.getText());
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Bitte Oktett 2 korekkt angeben!");
}
try {
if(thirredOktett.equals(null)){
oktett3 = 0;
}else{
oktett3 = Integer.parseInt(thirredOktett.getText());
numberof = 255 * 255;
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Bitte Oktett 3 korekkt angeben!");
}
try {
if(fourthOktett.equals(null)){
oktett4 = 0;
numberof = 255;
}else{
oktett4 = Integer.parseInt(fourthOktett.getText());
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Bitte Oktett 4 korekkt angeben!");
}
if (oktett4 == 0) {
oktett4 ++;
oktett4(oktett1,oktett2,oktett3,oktett4);
}
if (oktett3 == 0) {
oktett4 ++;
oktett3(oktett1,oktett2,oktett3,oktett4);
}
if (oktett2 == 0) {
oktett4 ++;
oktett2(oktett1,oktett2,oktett3,oktett4);
}
if (oktett1 == 0) {
oktett4 ++;
oktett1(oktett1,oktett2,oktett3,oktett4);
}
}
private void oktett1(int oktett1, int oktett2, int oktett3, int oktett4) {
for(int count = oktett1; count < 255;count++){
oktett1 = count;
oktett2(oktett1,oktett2,oktett3,oktett4);
}
}
private void oktett2(int oktett1, int oktett2, int oktett3, int oktett4) {
for(int count = oktett2; count < 255;count++){
oktett2 = count;
oktett3(oktett1,oktett2,oktett3,oktett4);
}
}
private void oktett3(int oktett1, int oktett2, int oktett3, int oktett4) {
for(int count = oktett3; count < 255;count++){
oktett3 = count;
try {
oktett4(oktett1,oktett2,oktett3,oktett4);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void oktett4(int oktett1, int oktett2, int oktett3, int oktett4) throws UnknownHostException {
for (int count = oktett4; count < 255; count++) {
oktett4 = count;
String ipAddress = String.valueOf(oktett1) + "." + String.valueOf(oktett2) + "." + String.valueOf(oktett3) + "."
+ String.valueOf(oktett4);
loop(ipAddress);
}
}
private void loop(String ip) throws UnknownHostException {
int count = 0;
int currentlenght = ip.length();
if(currentlenght> lenght){
lenght = currentlenght;
discount ++;
}
int current = Integer.parseInt(ip.substring(ip.length() - discount));
do{
boolean address = false;
count ++;
try {
address = InetAddress.getByName(ip).isReachable(5000);
} catch (IOException e) {
}
if(address){
String text = results.getText();
results.setText(text + "\n" + ip + " erreichbar");
count = 4;
}
System.out.println((address) ? ip + " Hoast erreichbar" : ip + " Host nicht erreichbar");
}while(count < 4);
progress.setProgress(current/numberof);
buttons.requestLayout();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
launch();
}
}
PS Ein weiteres Problem ist das sobald man den Button startPing aufruft öffnet sich ein Zweites Fenster und es werden die ersten 2 IP Adressen als erreichbar angezeigt dann muss das Programm erst zu ende laufen bis alles angezeigt wird.