Zum Inhalt springen

IP Liste laden -> IP´s anpingen


Empfohlene Beiträge

Geschrieben

Juhu würde mich riesig über deine Beispiele freuen!

Zu den Exceptions, ich dachte halt das man damit die Meldungen vom Pingtest irgendwie auslesen kann und dann sagen kann "okay ip ist erreichbar, geb ich mal so zurück" ... aber da war ich mal wieder aufm holz weg-.-

Geschrieben

Ok, fangen wir nochmal mit der normalen Überprüfung an ob eine IP erreichbar, ein Beispiel dafür wurde ja am Anfang des Threads schonmal gepostet. Funktionen dafür bietet die Klasse InetAddress, genauer die Methode isReachable(int). Eine InetAddress Klasse aus einer IP erzeugst du mit der Methode %29]getByAddress(byte[]).

Wenn du deine IPs einzeln als String vorliegen hast, kannst du folgendermaßen daraus eine InetAddress Klasse erzeugen:


	String[] ip = "127.0.0.1".split("\\.");

	InetAddress ia = null;


	try {

		ia = InetAddress.getByAddress(new byte[] {

				(byte)Integer.parseInt(ip[0]),

				(byte)Integer.parseInt(ip[1]),

				(byte)Integer.parseInt(ip[2]),

				(byte)Integer.parseInt(ip[3])

		});


	} catch (NumberFormatException e) {

		e.printStackTrace();

	} catch (UnknownHostException e) {

		e.printStackTrace();

	}

(Wenn jemand eine elegantere Methode kennt die IP in byte Werte umzurechnen wäre ich daran auch interessiert) Mit der Methode isReachable(int) auf diesem Objekt kannst du nun überprüfen ob die IP erreichbar ist. Der Methode übergibst du einen Timeout Wert in Millisekunden. Und als Rückgabewert bekommst du ein true wenn die IP erreichbar bzw ein false wenn sie nicht erreichbar ist. Siehe dazu die Java Doku. Mit der Klasse Socket kannst du nun die Erreichbarkeit der Ports kontrollieren. Aus dem eben erzeugtem InetAddress Objekt und einer Portnummer kannst du ein Socket erzeugen. Dabei gibt wirft er dir eine ConnectException wenn der Port auf der Gegenseite nicht geöffnet ist. Wenn das Objekt also ohne Exception erzeugt wird, dann ist der Port auch offen.

	try {

		if(ia != null && ia.isReachable(5000)) {

			Socket s = null;

			try {

				s = new Socket(ia, 80);

				System.out.println("Port offen!");

			} catch (ConnectException e) {

				System.out.println("Port nicht offen!");

			} finally {

				if(s != null)

					s.close();

			}


		} else {

			System.out.println("IP nicht erreichbar!");

		}

	} catch (IOException e) {

		e.printStackTrace();

	}

Soweit ich bisher gesehen habe, sind Sockets in Java nicht wiederverwendbar, dementsprechend musst du dir auch für jeden neuen Port ein neues Socket erzeugen.

Geschrieben

Generell würde ich auf den Ping direkt verzichten, wenn eh Sockets verwendet werden, denn ein Ping ist ein ICMP Paket und das kann in der Firewall blockiert sein, d.h. wenn der Ping fehl schlängt bedeutet das nicht, dass auch eine Socket Verbindung zu einem Port fehl schlägt. Man würde versuchen zu der entsprechenden Adresse auf den entsprechenden Port zu verbinden und eben auswerten, ob die Verbindung fehl schlägt.

Um ein InetAddress Objekt zu erzeugen verwendet man InetAddress (Java 2 Platform SE v1.4.2) (getByName), man kann direkt einen String mit Namen oder IP Adresse übergeben

Geschrieben

Mal wieder ein DICKES Dankeschön an euch.

Jetzt erschlage ich euch mal mit meinen Swing Code, da ich absolut keine Idee habe wie ich oberes da einsetzen soll?

Der Code is am Ende des Posts... ich will vorher nochmal kurz erklären was passieren muss...

Hier mal ein Bild von der Oberfläche:

post-59145-14430449018301_thumb.jpg

Drückt man den Button "Port Auswahl", so kann man den Standard deffinierten Port anwählen und neue Hinzufügen. Das geht schonmal - check ;D

Drückt man den Button IP Liste öffnen, so kann man die IP Liste einbinden... das öffnen klappt schonmal... - check

Drückt man nun auf Überprüfen...wirds abartig kompliziert....

Er soll nun die Auswahl aus beiden vorherigen Gebieten einholen, dann die IP´s überprüfen ob sie anpingbar sind ...dann das ganze wie da oben schon steht, aber erstmal würde mir reichen ihn einfach mal checken zu lassen ob die IP´s anpingbar sind....

Könnt Ihr mir da wieder helfen? :confused:

Hier nun der Programmcode:

import java.awt.Adjustable;

import java.awt.BorderLayout;

import java.awt.GridLayout;

import javax.swing.*;


import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;



import javax.swing.*;



public class gui extends JFrame {


	//Alle Buttons

	private JButton ports = new JButton ("Port Auswahl");

	private JButton ipListe = new JButton ("IP Daten öffnen..");

	private JButton pruefen = new JButton ("Überprüfen");


	//JMenu

	private JMenuBar menubar = new JMenuBar();

	private	JMenu datei = new JMenu("Datei");

	private JMenuItem exit = new JMenuItem("Beenden");

	private JMenuItem reset = new JMenuItem("Reset");

	//Textfelder

	private JTextArea ausgabe = new JTextArea("Ausgabe \n ------------------------", 20,60);

	private JTextField tf = new JTextField(20);


	//Auswahlboxen


	DefaultListModel listModel = new DefaultListModel();

	private JList auswahlports = new JList(listModel);


	//JFrame für die auswahl der Ports

	private JFrame portframe = new JFrame();



	//JPanels

	private JPanel anleitung = new JPanel ();

	private JPanel auswertung = new JPanel();

	private JPanel schaltfläche = new JPanel();

	private JPanel anleitungport = new JPanel();

	private JPanel portunten = new JPanel();

	//JLabels

	private JLabel anleitung1 = new JLabel("How-To");

	private JLabel erstens = new JLabel("1. Zuerst über den Button 'Port Auswahl' die Entsprechenden Ports wählen");

	private JLabel zweitens = new JLabel("2. Anschließend die IP Bereichs-Liste laden");

	private JLabel drittens = new JLabel("3. Überprüfen Klicken und es geht los!");

	private JLabel portanlegen = new JLabel ("Bitte einen Port auswählen!");

	private JLabel portanlegentf = new JLabel ("Neuer Eintrag: ");

	//öffnet eine Datei

	public void load() {

		JFileChooser fc = new JFileChooser();

		int returnVal = fc.showOpenDialog(ipListe);


	      if (returnVal == JFileChooser.APPROVE_OPTION) {

	          File file = fc.getSelectedFile();


	      }


	}




	public gui () {

		//Frame einstellungen

		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setSize(800,500);

		setResizable(false);

		setLocationRelativeTo(null);

		setLayout(new BorderLayout());



		//Menü

		datei.add(reset);

		datei.add(exit);		

		menubar.add(datei);

		setJMenuBar(menubar);


		//Anleitung auf JPanel platzieren und dies wiederum auf den JFrame setzen


		anleitung.setBorder(BorderFactory.createEtchedBorder()); 

		anleitung.setSize(800,200);

		anleitung.setLayout(new GridLayout (4,2));

		anleitung.add(anleitung1);

		anleitung.add(erstens);

		anleitung.add(zweitens);

		anleitung.add(drittens);


		add(anleitung, BorderLayout.PAGE_START);


		//Buttons auf Schaltfläche anordnen

		schaltfläche.setBorder(BorderFactory.createEtchedBorder()); 

		schaltfläche.setSize(800,200);

		schaltfläche.setLayout(new GridLayout (1,2));

		schaltfläche.add(ports);

		schaltfläche.add(ipListe);

		schaltfläche.add(pruefen);


		add(schaltfläche, BorderLayout.CENTER);



		//Auswertung

		auswertung.setBorder(BorderFactory.createEtchedBorder()); 

		auswertung.setSize(800,200);

		auswertung.setLayout(new GridLayout (0,1));

		ausgabe.setEditable(true);


		auswertung.add(ausgabe);


		add(auswertung, BorderLayout.PAGE_END);


		//Vorbereitung ComboBox

		auswahlports.setFixedCellHeight(27);

		auswahlports.setFixedCellWidth(150);

		listModel.addElement("47711");


		tf.addActionListener( new ActionListener()

		{

		   public void actionPerformed( ActionEvent e )

		  {

		    String text = ((JTextField)e.getSource()).getText();

		    listModel.addElement( text );

		    ((JTextField)e.getSource()).setText( "" );

		  }

		} );




		//JFrame für die Auswahl der ports

		portframe.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

		portframe.setSize(700,200);

		portframe.setLocationRelativeTo(anleitungport);

		portframe.setLayout(new BorderLayout());



		//Anleitung IM neuem Fenster

		anleitungport.setBorder(BorderFactory.createEtchedBorder()); 

		anleitungport.setLayout(new GridLayout (1,1));

		anleitungport.add(portanlegen);

		portframe.add(anleitungport, BorderLayout.PAGE_START);

		portframe.add(auswahlports, BorderLayout.CENTER);

		portunten.setBorder(BorderFactory.createEtchedBorder());

		portunten.add(portanlegentf);

		portunten.add(tf);

		portframe.add(portunten, BorderLayout.PAGE_END);

		//Port Button ruft portframe auf

		ports.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {	


				portframe.setVisible(true);	               

			}

		});

		//Üperprüfen Button...

		pruefen.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {	


	       }

		});

		//Exit Button ..

		exit.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {	

				System.exit(0);              

	       }

		});

		//Reset

		reset.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {	

				ausgabe.setText("Ausgabe \n ------------------------");             

	       }

		});


		//IP Liste

		ipListe.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {	

				load(); 	


	       }

		});


		setVisible(true);

	}







	public static void main(String[] args) {

		new gui();


	}


}

Geschrieben (bearbeitet)

Hi,

also mein Vorschlag wäre, dass du die Ports und IP-Adressen, die der User eingeben kann, in jeweils einer List abspeicherst:

(ich vermute mal, dass du jeden Port auf jeder IP-Adresse überprüfen willst)

List<Integer> ports = new ArrayList<Integer>();

List<String> ips = new ArrayList<String>();


// in den ActionListener vom Button Überprüfen

public void actionPerformed(ActionEvent e)

{

    for(int ipIndex = 0; ipIndex < ips.size(); ipIndex++) {

        for(int portIndex = 0; portIndex < ports.size(); portIndex++) {

             Socket s = null;

             try {

         	s = new Socket(InetAddress.getByName(ips.get(ipIndex), ports.get(portIndex));

         	System.out.println("Adresse["+ips.get(ipIndex)+"] & Port["+ports.get(portIndex)+"] ereichbar");

             } catch (ConnectException e) {

         	System.out.println("Adresse["+ips.get(ipIndex)+"] & Port["+ports.get(portIndex)+"] nicht ereichbar");

             } finally {

         	if(s != null)

         	    s.close();

             }

         }

    }

}

Viele Grüße

Bearbeitet von Sporticus
Geschrieben

Hey, danke dir, sieht schon richtig gut aus.

Er sagt mir nur das

List<Integer> ports = new ArrayList<Integer>();

				List<String> ips = new ArrayList<String>()

The Type List is not generic

Was bedeutet das wieder? <.<

Geschrieben
hast du drauf geachtet, dass es 'java.util.List' beim import ist?

... danke...

Nun kennt er nur noch nicht .getByName

(...)is not applicable for the arguments (string, integer)
Geschrieben

Da hast du natürlich recht. jedoch tu ich momentan nix anderes als Tutorials zu durchforsten...mir fehlt total die PRaxis in diesem Thema, weshalb ich eben auch über eure Hilfe dankbar bin... Die Anweisungen da oben sind schon recht komplex und ich habe keine Ahnung wieso getByName nicht funktionieren sollte?..

Geschrieben
Die Anweisungen da oben sind schon recht komplex und ich habe keine Ahnung wieso getByName nicht funktionieren sollte?..

Wie wäre es die Fehlermeldung zu lesen und Dir die Signatur der Methode in der Doku anzuschauen und mit Deinem Code zu vergleichen...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...