Socket Socket_Programming

Diskutiere Socket_Programming im Netzwerkprogrammierung Bereich.
C

chrism120

Java:
package com.company;
import java.io.IOException;
import java.net.*;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.logging.SocketHandler;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("**** Welche Operation durchführen ***");
        System.out.println(" ****1 = NetworkScan  , 2 = EigentportScan  und 3= für einen HostPortSan***");
        int c;
        try {
            c = s.nextInt();
            if (c == 1) {
                System.out.println("####Wählen sie bitte ein Subnetz aus#####");
                System.out.println("1=172.20.100.0 und 2 = 172.21.128.0");
                Scanner A = new Scanner(System.in);
                int A1 = A.nextInt();
                try {

                    if (A1 == 1) {
                        netscann();
                    } else if (A1 == 2) {
                        netscann1();
                    }
                } catch (InputMismatchException e) {
                    System.out.println("Sie Haben einen " + e + " erzeugt");
                }
            } else if (c == 2) {
               // Scan();
                sca();
            } else if (c == 3) {
                Scan();


            }
            //   System.out.println("Good bye Sir");
            s.close();
        } catch (InputMismatchException e) {
            System.out.println("Falsche Eingabe " + e);
        }
    }

    //Subnet 172.20.100.0
    public static void netscann() {
// defines the Adress
        String IP = "172.20.100";
        //Defines the Delay
        int timeout = 1000;
        for (int i = 1; i <= 254; i++) {
            try {
                String host = IP + "." + i;
                // Intance of IP Address
                InetAddress ad = InetAddress.getByName(host);
                // Erreichbarkeit der Hosts laut Timeout
                if (ad.isReachable(timeout))
                    System.out.println("The  Computer " + ad.getCanonicalHostName() + " with this address " + host + " ist reachable");
            } catch (Exception e) {
            }
        }
    }

    public static void netscann1() {
        String Ip = "172.21.128";
        int timeout = 1000;
        for (int i = 1; i < 255; i++) {
            try {
                String host = Ip + "." + i;
                InetAddress ad = InetAddress.getByName(host);
                if (ad.isReachable(timeout))
                    System.out.println("Der Computer " + ad.getHostAddress() + " mit IP Adressse " + host + " ist erreichbar");
            } catch (Exception e) {
            }

        }
    }

//Scan-Funktion und Ports
    public static void Scan() {
        System.out.println("*****Scan for a Host(Subnetz) : 172.20.100.0*****");
//Kleines Programm für Scann port auf seinem eigenen Computer
        String IP = "172.20.100";
        for (int i = 0; i <= 3000; i++) {
            try {
                ///String IP="172.21.128.140";
                // Scann this range
                for (int j = 1; j < 255; j++) {
                    try {
                        String host = IP + "." + j;
                        InetAddress ad = InetAddress.getByName(host);
                        //Creation of unconnect Socket
                        Socket so = new Socket();
      //Connect this Socket to a server with a Hostname und Timeout: And creation of a SocketAddress from a hostname an a port

                        so.connect(new InetSocketAddress(ad.getHostAddress(), i), 1000);
                        // Close Socket after Scanning
                        so.close();
                        System.out.println("Port " + i + " ist open");
                    } catch (Exception e) {

                    }
                }
            }catch (Exception z) {

            }
        }
    }

    }
 
K

kneitzel

Also gut, wo fängt man jetzt an?

a) Dir ist bekannt, dass Methoden auch Parameter haben können? netscann und netscann1 sind ja eigentlich gleich - nur die Variable IP/Ip ist unterschiedlich und die Kommentare natürlich ... Warum also nicht diese lokale Variable zu einem Parameter machen und dann die Funktion mit Parameter aufrufen?

b) Die scan() Methode hat immer noch als äußere Schleife die Ports und als innere die IP. Dachte, das wolltest Du umdrehen (So hatte ich Dich zumindest verstanden, weil Du dann pro Rechner die offenen Ports ausgeben würdest....)

Und dazu war doch die Idee, die ich Dir gegeben hatte, dass Du das weiter in Methoden unterteilst.

Dann finde ich es schon heftig, wenn ich catch (Exception e) sehe. Es mag ja ok sein, eine bestimmte Exception zu fangen weil die Connection nicht erfolgreich ist, aber so alle Exceptions fangen und da dann nichts zu machen, ist schon hart. Und das innere catch dürfte alles fangen - da ist das äußere catch doch unnötig. Oder wo erwartest Du eine Exception, die da gefangen werden soll?
 
C

chrism120

Also gut, wo fängt man jetzt an?

a) Dir ist bekannt, dass Methoden auch Parameter haben können? netscann und netscann1 sind ja eigentlich gleich - nur die Variable IP/Ip ist unterschiedlich und die Kommentare natürlich ... Warum also nicht diese lokale Variable zu einem Parameter machen und dann die Funktion mit Parameter aufrufen?

b) Die scan() Methode hat immer noch als äußere Schleife die Ports und als innere die IP. Dachte, das wolltest Du umdrehen (So hatte ich Dich zumindest verstanden, weil Du dann pro Rechner die offenen Ports ausgeben würdest....)

Und dazu war doch die Idee, die ich Dir gegeben hatte, dass Du das weiter in Methoden unterteilst.

Dann finde ich es schon heftig, wenn ich catch (Exception e) sehe. Es mag ja ok sein, eine bestimmte Exception zu fangen weil die Connection nicht erfolgreich ist, aber so alle Exceptions fangen und da dann nichts zu machen, ist schon hart. Und das innere catch dürfte alles fangen - da ist das äußere catch doch unnötig. Oder wo erwartest Du eine Exception, die da gefangen werden soll?
hallo , ja die Methode netsacnn1 und netscann sind für zwei verschiedene Subnetze. Ich nehme deine Empfehlung und mache so. Sorry ich bin noch Lehring.
b) ich habe die beiden Schleifen umgedreht aber habe keine Information bekommen.
 
K

kneitzel

zu a) Das war nicht als Vorwurf gemeint. Ich versuche wirklich nur freundlich nach zu haken, um dann ggf. etwas auszuführen oder zu entsprechender Dokumentation zu verlinken. Das soll nur dazu dienen, dass Du weiter kommst. Daher toll, dass Du es einmal versuchst entsprechend umzustellen.

zu b) Da würde mich dann der Code interessieren, der eben nichts mehr ausgeben hat. Dann können wir einmal schauen, wo man etwas verändern müsste, damit Du wieder eine Sinnvolle Ausgabe bekommst.
 
C

chrism120

zu a) Das war nicht als Vorwurf gemeint. Ich versuche wirklich nur freundlich nach zu haken, um dann ggf. etwas auszuführen oder zu entsprechender Dokumentation zu verlinken. Das soll nur dazu dienen, dass Du weiter kommst. Daher toll, dass Du es einmal versuchst entsprechend umzustellen.

zu b) Da würde mich dann der Code interessieren, der eben nichts mehr ausgeben hat. Dann können wir einmal schauen, wo man etwas verändern müsste, damit Du wieder eine Sinnvolle Ausgabe bekommst.
ok Alles Gut. Danke
 
C

chrism120

wie gesagt oben wenn ich die Schleifen umtausche, läuft einfach das Programm unendlich und an die Konsole kommt nicht raus
 
K

kneitzel

Wäre halt schön gewesen, wenn Du Deinen Code einmal gezeigt hättest... ungetestet wäre eine umgestellte Version:
Java:
    public static void Scan() {
        System.out.println("*****Scan for a Host(Subnetz) : 172.20.100.0*****");
        String IP = "172.20.100";
        for (int j = 1; j < 255; j++) {
            String host = IP + "." + j;
            System.out.println("Scanne: " + host);
            for (int i = 0; i <= 3000; i++) {
                try {
                    InetAddress ad = InetAddress.getByName(host);
                    Socket so = new Socket();
                    so.connect(new InetSocketAddress(ad.getHostAddress(), i), 1000);
                    so.close();
                    System.out.println("Port " + i + " ist open");
                } catch (Exception e) {
                    // Ports seems to be closed, expected exception so no output!
                }
            }
        }
    }
Wie Du erkennen kannst habe ich:
a) die beiden for schleifen 1:1 getauscht.
b) die Variable host gehörte zu der Schleife, daher habe ich das auch mi hochgenommen und eine Ausgabe gemacht.
c) ein unnötiges try / catch habe ich entfernt
d) leerer catch Block geht nicht, daher wenigstens ein Kommentar. Statt Exception sollte man da aber die spezifischen Exceptions nehmen meine ich, aber die habe ich mir jetzt nicht rausgesucht.

Nun kannst Du das testen und dann auch vergleichen mit dem, was Du hattest oder mit dem, was Du anders gemacht hast.
 
C

chrism120

Wäre halt schön gewesen, wenn Du Deinen Code einmal gezeigt hättest... ungetestet wäre eine umgestellte Version:
Java:
    public static void Scan() {
        System.out.println("*****Scan for a Host(Subnetz) : 172.20.100.0*****");
        String IP = "172.20.100";
        for (int j = 1; j < 255; j++) {
            String host = IP + "." + j;
            System.out.println("Scanne: " + host);
            for (int i = 0; i <= 3000; i++) {
                try {
                    InetAddress ad = InetAddress.getByName(host);
                    Socket so = new Socket();
                    so.connect(new InetSocketAddress(ad.getHostAddress(), i), 1000);
                    so.close();
                    System.out.println("Port " + i + " ist open");
                } catch (Exception e) {
                    // Ports seems to be closed, expected exception so no output!
                }
            }
        }
    }
Wie Du erkennen kannst habe ich:
a) die beiden for schleifen 1:1 getauscht.
b) die Variable host gehörte zu der Schleife, daher habe ich das auch mi hochgenommen und eine Ausgabe gemacht.
c) ein unnötiges try / catch habe ich entfernt
d) leerer catch Block geht nicht, daher wenigstens ein Kommentar. Statt Exception sollte man da aber die spezifischen Exceptions nehmen meine ich, aber die habe ich mir jetzt nicht rausgesucht.

Nun kannst Du das testen und dann auch vergleichen mit dem, was Du hattest oder mit dem, was Du anders gemacht hast.
ok ich teste und sage Dir Bescheid
 
F

fhoffmann

Bei jedem Verbindungsversuch zu einem Port wartet das Programm 1 Sekunde.
Und du versuchst es mit 3.000 Ports - das ergibt 50 Minuten pro IP-Adresse.
Und das willst du für 255 IP-Adressen durchführen ...
 
C

chrism120

ich hab gerade ein kleines Programm für ports geschrieben und this funktioniert eher gut. Hierunten ist das resultat. 12252
 
C

chrism120

Java:
public static void Hostportscan() {
        System.out.println("++opened Ports on my computer++");
        for (int i = 1; i<3000; i++)
        //Creation of unconnected Socket
        {
            Socket s = new Socket();
            try{
             s.connect(new InetSocketAddress("172.21.128.140",i),10);
             s.close();
             System.out.println("The Opened port ist " + i);
            }
            catch (IOException p) {}
            }
        }
Beispielsweise ,wenn ich im Code eine IP-Adresse ("172.21.128.140") eingebe , kriege ich alle Informationnen in Bezug auf die opened Ports. Jetzt will ich die Adressen nicht mehr im Code schreiben sondern in der Konsole. wenn ich zB "3" in der Konsole aussuche und die IP Adressse eingebe , soll ich in der Lage sein diese Informationen wie oben erhalten. Wie kann ich tun ?
 
Zuletzt bearbeitet:
K

kneitzel

Du nutzt ja schon den Scanner. (Den solltest Du aber nur einmal erzeugen und dann überall nutzen - das nur als Randbemerkung).

Du kannst mit dem Scanner auch generell Eingaben entgegen nehmen - Du könntest also darum bitten, dass jemand das Netz eingibt (IP ohne 4. Teil) und das dann nutzen.
Prüfen kannst Du die Eingabe über reguläre Ausdrücke, also z.B. "\d*\.\d*\.\d*" sollt auf zahl.zahl.zahl prüfen. Noch nicht perfekt, aber ein erster Anfang (Online findest Du bestimmt auch noch deutlich besseres, so dass jede Zahl <= 255 sein muss und so ... Könnte man hier auch noch bauen, aber das sollte als erster Ansatz schon reichen!)
 
C

chrism120

Hey Danke für Ihre Hilfe. hab' endlich geschaft alles funktioniert einwandfrei. ich habe eine methode "split" verwendet:):)
 
Thema: 

Socket_Programming

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben