Entwickler-Ecke

IO, XML und Registry - Schrittweises suchen nach IPs in einem Netzwerk.


DevInet - Fr 25.06.10 10:21
Titel: Schrittweises suchen nach IPs in einem Netzwerk.
Hallo miteinander.

Ich soll für die Schule ein Programm schreiben, mit dem ich ein Netzwerk durchsuche, indem ich das Subnetz von 1 bis 255 durchpinge.
Ih bekomme allerdings keine Antworten zurück. Kann sich jemand mal meinen Source-Code ansehen und mir weiterhelfen?




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Zusätzliche
using System.Net.NetworkInformation;
using System.IO;

namespace Network_Sniffer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn1_Click(object sender, EventArgs e)
        {

            Ping myPing = new Ping();                   // Ping instanzieren
            int timeout = 1000;                         // TimeOut-Zeit festlegen
            byte[] buffer = new byte[4096];             // Sende/EmpfangsBuffer, hier alles Nullen
            // Größe willkürlich auf 4k festgelegt
            PingOptions pOptions = new PingOptions();   // Optionen für Ping instanzieren
            PingReply reply;                            // Antwort des Pings deklarieren

            for (int i = 1; i >= 255; i++)  //Schleife wird durchlaufen bis bereich von 1 bis 255 gepingt wurde
            {
                // Ping an die Adresse aus der Textbox schicken
                reply = myPing.Send(iprBox.Text + "." + i, timeout, buffer, pOptions);
                // mögliche Antworten auswerten
                if (reply.Status == IPStatus.Success)
                    MessageBox.Show("Anwort in " + reply.RoundtripTime.ToString() + "ms erhalten");
            }
        }
    }
}




Vielen Dank im vorraus.

Mfg
DevInet

Moderiert von user profile iconKha: C#-Tags hinzugefügt


danielf - Fr 25.06.10 10:37

Hallo,

bitte verwende für C#-Code den Tag [cs ] oder geh über Bereiche, C# + um markierten Bereich als Code zu kennzeichnen.

Zu deinem Problem: Es kann durchaus sein, dass ein Rechner eine IP-Addresse hat aber nicht auf ein Ping-Request antwort. Die Antwort kann von einer Firewall geblockt werden. Du hast allerdings ein anderes Problem und zwar ist deine Schleife falsch programmiert. Hier [http://lmgtfy.com/?q=for+Schleife+C%23] findest du wie du es richtig machst.

Gruß


jaenicke - Fr 25.06.10 14:21

user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:
Ih bekomme allerdings keine Antworten zurück.
Du solltest dich einmal mit dem Debugger auseinandersetzen. Denn wenn du einen Haltepunkt in die Schleife gesetzt hättest oder gleich schrittweise alles durchgegangen wärst, dann hättest du gesehen, dass die Schleife nie aufgerufen wird.

Mehr dazu findest du bei Microsoft:
http://msdn.microsoft.com/de-de/library/aa290881.aspx
http://msdn.microsoft.com/de-de/library/4607yxb0.aspx


DevInet - Fr 25.06.10 19:38

Aber wieso wird die Schleife nie durchlaufen? WO steckt der Syntax-Fehler, oder was auch immer?

Mfg DevInet


danielf - Fr 25.06.10 19:59

Mit so einer Einstellung wirst du beim Programmier nie weit kommen.


jaenicke - Fr 25.06.10 21:11

Ist es so schwer sich den Aufbau einer for-Schleife noch einmal anzuschauen? :roll: :autsch:
user profile iconDevInet hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
2:
            for (int i = 1; i >= 255; i++)  //Schleife wird durchlaufen bis bereich von 1 bis 255 gepingt wurde
            {
Also halten wir mal fest. Die Schleife soll mit i = 1 anfangen und so lange laufen wie i größer oder gleich 255 ist. Nun, jetzt die Preisfrage: Da du mit 1 anfängst, wie lange wird i wohl größer als 255 sein... :roll:


huuuuuh - Sa 26.06.10 15:16

ehrlich gesagt, is mir das auch schon passiert. als ich mit c# angefangen hab. erscheint einem jetzt zwar dumm, aber damals hab ich mich stundenlang gefragt, wo der fehler liegt. meist während ich die hilfe über for-schleifen offen hatte :oops: :autsch:


DevInet - Di 29.06.10 17:18

So, danke erstmal für die bisherige Hilfe. Leider habe ich immernoch ein Problem. Unter umständen 2
Das Programm stürzt ab, sobald es anfangen soll zu suchen. Soll heissen, die erste IP findet er noch(habs mit ner msg-Box getestet), danach hängt es sich auf.
Wenn ich nun den Task beende schmiert der komplette PC ab. Schreibt visual studio irgendwo nen fehlerberict hin? aus dem vom System werd ich in diesem Fall nicht ganz schlau.

Mfg
DevInet


DevInet - Di 29.06.10 19:39

So, Fehler gefunden aber noch keinen Plan wie ich den beheben kann.

Mfg

DevInet


Christian S. - Di 29.06.10 19:50

Du könntest uns ja verraten, was Du gefunden hast ...


DevInet - Mi 30.06.10 22:24

Also ich hab den Bluescreen wegbekommen indem ich ne zweite Variable namens J hinzugefügt habe.
Was jetzt immernoch nicht funzt ist das hochzählen von J, damit er weiterpingt bis er bei 255 ist. Momentan durchläuft er die Schleife 255 mal, pingt aber immer nur zum Beispiel "192.168.2.J", wobei J immer gleich 1 bleibt.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Zusätzliche
using System.Net.NetworkInformation;
using System.IO;

namespace Network_Sniffer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn1_Click(object sender, EventArgs e)
        {
            int j = 1;

            Ping myPing = new Ping();                   // Ping instanzieren
            int timeout = 1000;                         // TimeOut-Zeit festlegen
            byte[] buffer = new byte[32];             // Sende/EmpfangsBuffer, hier alles Nullen
            // Größe willkürlich auf 32 festgelegt
            PingOptions pOptions = new PingOptions();   // Optionen für Ping instanzieren
            PingReply reply;                            // Antwort des Pings deklarieren

            for (int i = 1; i <= 255; i++)
            {
              
//                lbl3.Text = "Gesuchte IP: " + iprBox.Text + "." + j;
                // Ping an die Adresse aus der Textbox schicken
                reply = myPing.Send(iprBox.Text + "." + j++, timeout, buffer, pOptions);
                // mögliche Antworten auswerten
                if (reply.Status == IPStatus.Success)
                    ipfBox.Items.Add(reply.Address.ToString());             
            }
        }
    }
}


DevInet - Do 01.07.10 00:07

So, Prog ist fertig *freu* :D :D :D

Programm-Code mit Kommentaren liefer ich nach.

Danke nochmal für die Hilfe.

Mfg DevInet