Deutsch
Forum

Ping-Tool über CMD

 
- Seite 1 -



Penguin
Tux
Hallo,

ich möchte mich ersteinmal vorstellen. Mein Name ist Tony, ich bin 15 Jahre alt und besuche eine Realschule in Chemnitz. Da ich jetzt Sommerferien habe und ich nichts weiter zu tun habe, habe ich mir vorgenommen ein kleines Netzwerkanalysetool zu schreiben. Auf der suche nach einer einfachen Programmiersprache bin ich auf XProfan gestoßen.

Ich habe alles nötige gedownloaded und installiert, anschließen habe ich nach einem Pingcode gesucht und habe diesen:
declare pingstring$,ping$,ping%
********************************************************************

Proc Ping

    Parameters nic$,pingdatei1$,pingdatei2$
    let pingstring$="PING.EXE",nic$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

********************************************************************
Beschreibung:
Es gibt zwar schon eine schnelle und schöne Onlineabfrage über API,
aber leider gibt die Funktion nur 1 für Online zurück, wenn
man über ein Standart DFÜ eingewählt ist.
Diese Prozedur ist halt nur etwas langsamer aber man kann sogar DSL
(also - keine DFÜ-Verbindung) oder das alte T-Online u.s.w abfragen!!
alles mit einem Stern umrandete ist wichtig für die Abfrage
Rolf Koch - Rokosoftware - Koblenz 2002
BEISPIEL
WINDOWSTYLE 31
Window 200,200-300,80
Windowtitle "Onlinstatus-Prüfung ohne Api"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
HIER JETZT DER AUFRUF DER PROZEDUR:********************
PING ADRESSE,ERGEBNISDATEI,BATCHDATEI
Parameter
1.) Webadresse - eine immer vorhandene wie www.nic.de
2.) Dateiname, in welche Pingergebnis geschrieben wird - wird wieder gelöscht!
3.) Dateiname, um Ping korrekt aufzurufen. - wird wieder gelöscht!
********************************************************
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10,"                                "
UseFont "TIMES NEW ROMAN",25,20,1,0,0
TextColor RGB(0,0,255),-1
Ping "192.168.0.7","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    DRAWTEXT 25,10,"Erreichbar"

else

    DRAWTEXT 25,10,"Nicht erreichbar"

endif

waitinput

Diesen Code habe ich mir nach meinen Bedürfnissen zurechtgeschnitten und er sieht wie folgt aus. Dazu müsste ich die von mir ausgedachte Funktionsweise erklären.

Es ist geplant, dass ich ein Tool schreibe, welches möglichst einfach eine erste Hilfe für Schüler und Lehrer bietet. Bemerkt ein User das er keinen Internetzugang hat, führt er das Tool aus, welches der Reihe nach erst den Server anpingt, dann einen anderen Client im Netzwerk und dann noch einen Rechner von außerhalb (z.B. Google). Wenn es bei einer der Schritte keine Rückmeldung gibt, soll eine Meldung mit Tips zur Behebung auf dem Bildschrim erscheinen.

Nun zum Code:
declare pingstring$,ping$,ping%

Proc Ping

    Parameters nic$,pingdatei1$,pingdatei2$
    let pingstring$="PING.EXE",nic$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

WINDOWSTYLE 31
Window 200,200-500,80
Windowtitle "Onlinstatus-Prüfung ohne Api"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10,"                                "
UseFont "CANDARA",25,20,1,0,0
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Server Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Server Nicht erreichbar"

endif

Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Client Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Client Nicht erreichbar"

endif

Ping "www.google.de","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,10,"Google Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,10,"Google Nicht erreichbar"

endif

waitinput

Ein Problem, welches sich zur Zeit auftut, ist die Tatsache das der Fensterinhalt nicht gelöcht wird. Das heißt das "Server Erreichbar", "Client Erreichbar" und "Google Erreichbar" übereinander geschrieben werden, also brauche ich eine Möglichkeit den Inhalt des Fensters nach jedem Schritt zu löschen. Dabei bin auf

gestoßen. Nutze ich diese Möglichkeit vor bzw. nach "Server Erreichbar" wird "Server Erreichbar" gar nicht angezeigt.

Für eine kleine Hilfestellung wäre ich sehr dankbar.

Danke
Tony
 


OS: Win XP/Debian
XProfan 10
20.07.2008  
 



 
- Seite 9 -



Stefan
Landsberg
Stefan Löwen
%hwnd brauchst du imho nicht deklarieren. bei mir geht jedenfalls auch ohne es vorher zu deklarieren. (zu spät. rolf war schneller)

Ich habe bei meinem programm nochmal ganz von vorn angefangen und habe jetz ein paar fragen.
vorweg erstmal der aktuelle zustand meines programms:
KompilierenMarkierenSeparieren
Declare-Teil:
declare ping%, btn%
Proc-Teil:

Proc Ping

    declare pingdatei1$, pingdatei2$, pingstring$, ping$
    Parameters ip$
    let pingdatei1$="PINGTEST.TXT"
    let pingdatei2$="PING.BAT"
    let pingstring$="PING.EXE",ip$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT @EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case equ$(ping$,"Antwort von"):Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

Def-Teil:
DEF GetSysColor(1) !"User32","GetSysColor"
Fenster erstellen:
WindowStyle 63
WindowTitle "IP Checker"
Window @SUB(@DIV(%maxX,2),300),@SUB(@DIV(%maxY,2),250) - 600,500
SetTrueColor 1
CLS GetSysColor(15)
@CreateMultiEdit(%HWnd,"",10,50,570,-200)
btn%=@CreateButton(%HWnd,"Überprüfen",250,260,100,30)
WaitInput

in der EditBox soll der User eine liste von IPs bzw deren Aliase durch absätze (zur not auch kommata oder semikola) getrennt eingeben.

mein ziel ist es für jede dieser IPs eine ping abfrage zu machen.

wie mache ich das am besten?

meine idee:
den inhalt der editbox mit @GETLINE$ in eine Bereichsvariable einlesen, und dann irgendwie jede ip in eine string variable schreiben. wo eine neue ip anfäng erkennt man ja an den absätzen (aber wie sage ich das dem programm).

danach einfach mit jeder variable folgende abfrage machen:

ping variable$

wenn die idee gut und umsetzbar ist wäre es nett wenn jemand mir bei der umsetzung helfen würde.
wenn die idee nicht so gut ist, wäre eine neu idee sehr hilfreich


ich habe das schlechte Gefühl, dass mein posting irgendwie übersehen wurde.
ich bitte einfach nocheinmal um hilfe
 
23.07.2008  
 




Rolf
Koch
Hab mal meine Idee grade umgesetzt. Einiges ginge kürzer, aber es soll ja übersichtlich und einfach erklärt sein.
Was Du noch machen musst: Passe den Code wieder zu Profanversion 6.6 an, da ich über den neusten Interpreter getestet habe und add, inc und co nicht mehr vorhanden sind und ich jetzt keine Zeit mehr habe.
Eingabe durch Leerzeichen getrennt! Ausgabe des Ergebnis erfolgt wiederum ins Eingabefenster (könnte auch gesammelt angezeigt werden und nicht einzeln - wie gesagt Zeit zu knapp). Kann auch durch Schnelltippen sein, dass ich ne Kleinigkeit übersehen oder vergessen habe - Aber Du musst ja auch was dazu beitragen ^^
Declare-Teil:
declare ping%, btn%,ende%,ipedit&,ipinhalt$,i%
declare zeichen$,zeichenalt$
Proc-Teil:

Proc Ping

    Ping%=0
    declare pingdatei1$, pingdatei2$, pingstring$, ping$
    Parameters ip$
    let pingdatei1$="PINGTEST.TXT"
    let pingdatei2$="PING.BAT"
    let pingstring$="PING.EXE",ip$,">",pingdatei1$
    Assign #6,pingdatei2$
    Rewrite #6
    Print #6,pingstring$
    Close #6
    WinExecwait(pingdatei2$,0)
    Assign #5,pingdatei2$
    Erase #5
    ASSIGN #3,pingdatei1$
    RESET #3
    Ping%=0

    WHILENOT @EOF(#3)

        input #3,ping$
        ping$=mid$(ping$,1,11)
        case ping$="Antwort von":Ping%=1

    WEND

    CLOSE #3
    Assign #1,pingdatei1$
    Erase #1

EndProc

Def-Teil:
DEF GetSysColor(1) !"User32","GetSysColor"
Fenster erstellen:
WindowStyle 63
WindowTitle "IP Checker"
Window @SUB(@DIV(%maxX,2),300),@SUB(@DIV(%maxY,2),250) - 600,500
Window 10,10-600,500
SetTrueColor 1
CLS GetSysColor(15)
ipedit&=@CreateMultiEdit(%HWnd,"",10,50,570,-200)
btn%=@CreateButton(%HWnd,"Überprüfen",250,260,100,30)

Whilenot ende%

    waitinput

    if clicked(btn%)

        zeichen$=""
        zeichenalt$=""
        ipinhalt$=GetText$(ipedit&)

        if mid$(ipinhalt$,len(ipinhalt$),1) <> " " sicherstellen Abschlusszeichen

            ipinhalt$=ipinhalt$+" "

        endif

        i%=1

        whilenot i% = len(ipinhalt$)+1

            zeichen$=mid$(ipinhalt$,i%,1)
            inc i%

            if zeichen$ <> " "

                zeichen$=zeichenalt$+zeichen$
                zeichenalt$=zeichen$

            else

                ping zeichenalt$		      Hier Ping Ergebnis

                if ping%=1

                    settext ipedit&,zeichenalt$+" ist verfügbar"

                else

                    settext ipedit&,zeichenalt$+" ist nicht verfügbar"

                endif

                zeichenalt$=""

            endif

        endwhile

    endif

Endwhile

 
23.07.2008  
 




Stefan
Landsberg
DANKE Rolf das einzige was Profan 6.6 bemängelt ist die funktion clicked. aber die hab ich einfach durch getfocus ersetzt.

hab mich jetz gründlich mit deinem Code befasst und hab ihn verstanden

jetz muss ich ihn nurnoch irgendwie umändern damit es meiner ist, und dann muss ich ihn in mein programm einarbeiten.
 
23.07.2008  
 




Rolf
Koch
Freut mich, dass Du es angenommen hast und diesen auch verstanden hast!
 
23.07.2008  
 




Stefan
Landsberg
Hallo,

ich habe jetz Rolfs code in mein programm eingebunden. als ich damit fertig war wollte ich nur noch das zeichen von leerzeichen auf absatz umändern.
da ist mir aufgefallen, dass man das bei absätzen besser mit @getlinecount und @getline$ realisieren kann.

bis jetz sieht das bei mir so aus: [...] 

aber irgendwie kommt das programm bei mir in ne endlosschleife und fäng, nachdem es den status der letzten ip ausgegeben hat, wieder von der ersten ip an.
ich weiß aber einfach nicht wo mein fehler ist.

PS: das design plane ich zu verbessern.

Edit: bin jetz schon etwas weiter. der fehler liegt in zeile 56. @getlinecount(ipinput%) liefert eine zahl im millionenbereich. es ist also keine endlosschleife. sie dauert nur sehr lange! spass bei seite:
warum gibts getlinecount so eine grosse zahl zurück?
ich dachte es gibt die zeilenanzahl an. und die liegt bei meinen tests bei 2 bis 4. und nicht im millionenbereich!
 
24.07.2008  
 



Stefan Löwen
bin jetz schon etwas weiter. der fehler liegt in zeile 56. @getlinecount(ipinput%) liefert eine zahl im millionenbereich. es ist also keine endlosschleife. sie dauert nur sehr lange! spass bei seite:
warum gibts getlinecount so eine grosse zahl zurück?
ich dachte es gibt die zeilenanzahl an. und die liegt bei meinen tests bei 2 bis 4. und nicht im millionenbereich!


Und genau das ist z.B. ein völlig neues Thema - mit einem eigenen Minimalbeispiel. ;)
 
24.07.2008  
 




Stefan
Landsberg
meinst du ich soll einen neuen thread eröffnen oder was wolltest du mir sagen?
 
24.07.2008  
 



Ja, bitte.
 
24.07.2008  
 




Stefan
Landsberg
profan hat was gegen mich.
jetz war ich schon dabei mein problem in einem neuen thread zu schildern und wollte den code posten. Da hab ich das programm noch einmal schnell durchlaufen lassen, und was passiert?!?

@GetLineCount gibt den richtigen Wert zurück

naja, ich freu mich lieber, dass es jetz geht und mache weiter. ich will am ende der 6 seiten noch mein erstes programm präsentieren
 
24.07.2008  
 



Exakt deshalb meine Bitte zum neuen Thread - dort wird man darauf hingewiesen ein  [...]  abzuliefern - ließ mal bis zum Ende und lach...
 
24.07.2008  
 




Stefan
Landsberg
die geschichte mit dem minimalbeispiel von Roland Hennrich kenn ich schon

Aber ich hatte das Programm vorhin mindestens 5 mal getestet und @getlinecount war kaputt

und ich wollte kein minimal beispiel posten, sondern den kompletten code (kann man aber auch minimal nennen ) hab also nichts verändert und auf einmal gings.

naja ich darf nicht so viel schreiben, sonst krieg ich mein programm nicht mehr auf seite 6
 
24.07.2008  
 



Ich fand "Roland Hennrich" passt...
 
24.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

24.146 Betrachtungen

Unbenanntvor 0 min.
Georg Teles01.08.2023
Thomas Freier06.10.2022
Langer30.01.2021
Walter29.01.2019
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie