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 2 -



Stefan
Landsberg
Super danke,
aber die zweite warnung kommt immer noch.

soll die variable status$ denn unbedingt eine zahl enthalten oder was will mir die warnung sagen?

weitere pläne:
das ganze so erweitern dass mehrere ips angegeben werden können
(eventuell auch ip listen)
das design verschönern!!!
 
20.07.2008  
 




Penguin
Tux
Nachdem das Grundgerüst meines Tools steht, möchte ich nun eine Art Tipbox nach einem fehlgeschlagenen Schritt einfügen. Soll also heißen, dass ein Febster mit Tips zur Behebung des Fehlers erscheint. Das bekomme ich bestimmt am besten mit dem "Dialog gestalten"-Punkt hin. Der Dialog soll aber nur erscheinen wenn "X Nicht Erreichbar" ist, also eine if- oder if/not-Funktion. Damit komme ich allerdings nicht ganz klar.

Der Code bis jetzt:
KompilierenMarkierenSeparieren
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,180
Windowtitle "PiRePro by penguin"
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

Hier Code für Fehlermeldung/Tipbox
Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

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

else

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

endif

Hier Code für Fehlermeldung/Tipbox
Ping "www.google.de","PINGTEST.TXT","PING.BAT"

if equ(ping%,1)

    TextColor RGB(0,255,0),-1
    DRAWTEXT 25,70,"Extern Erreichbar"

else

    TextColor RGB(255,0,0),-1
    DRAWTEXT 25,70,"Extern Nicht erreichbar"

endif

Hier Code für Fehlermeldung/Tipbox
Hier Code für Meldung des Erfolgs
TextColor RGB(0,0,0),-1
UseFont "CANDARA",10,10,1,0,0
DRAWTEXT 25,120,"Zum Beenden drücken Sie bitte eine beliebige Taste"
waitinput

Ein weiteres Poblem besteht in der Ausgabe des Dialogs zur Bestätigung der fehlerlosen Suche, dieser soll vor "Zum Beenden drücken Sie bitte eine beliebige Taste" erscheinen und durch eine Art "OK" Button weg zu klicken sein.

Danke
Tony
 


OS: Win XP/Debian
XProfan 10
20.07.2008  
 




Jörg
Sellmeyer

KompilierenMarkierenSeparieren
MessageBox(ip$"   -   "status$,Status,0640262144)

Hier müssen Pluszeichen rein, wie Paul schon geschrieben hat, und Status mus in Anführungszeichen geschrieben werden.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
20.07.2008  
 




Stefan
Landsberg
@jörg
dass mit den pluszeichen hatte ich gemacht und hat auch super geklappt aber ich hab vergessen bei dem zweiten parameter von messagebox das Status in anführungszeichen zu setzen.

Die Zeile verursacht jetzt keine warnung mehr und sieht so aus:
KompilierenMarkierenSeparieren
MessageBox(ip$ + "   -   " + status$,"Status",0640262144)

@tony
ich würde nach jedem ping befehl erstmal eine zeile wie
KompilierenMarkierenSeparieren
let ping_1%=ping%

schreiben. dann kannst du nachher für jede abfrage einzeln abfragen ob sie erfolgreich war oder nicht.

und am ende kannst du dann einmal einen infotext machen:
KompilierenMarkierenSeparieren
das print ist jetz die schnellste methode. kannst natürlich auch ein fenster gestalten.
wie das geht weiß ich aber noch nicht
 
20.07.2008  
 



Stefan Löwen
fenster gestalten.
wie das geht weiß ich aber noch nicht


Schaue Dir mal CreateText  an.
 
20.07.2008  
 




Penguin
Tux
Danke Stefan, ich werd das mal probieren. Vorab noch eine Frage.

Was bewirkt
KompilierenMarkierenSeparieren
let ping_1%=ping%

?
 


OS: Win XP/Debian
XProfan 10
20.07.2008  
 




Stefan
Landsberg
ich dachte mir das so, dass du erst die ganzen ping abfragen machst, und am ende einmal überprüfst, ob eine der abfragen negativ war. Dafür brauchst du aber die ergebnisse aller 3 abfragen.
nach der ersten ping abfrage ist die variable ping% je nach ergebnis 1 oder 0

wenn du jetz aber die nächste ping abfrage machst wird ping% durch das ergebnis diese abfrage überschrieben. und mit "let ping_1%=ping%" sicherst du den wert von ping% nach ping_1%.

nach der zweiten abfrage muss das dann natürlich
"let ping_2%=ping%"
heißen, und nach der dritten
"let ping_3%=ping%"

dann kannst du am ende die drei variablen ping_1%, ping_2% und ping_3% abfragen und weißt welche abfrage negativ und welche positiv war.
dadurch kannst du dann einen entsprechenden hilfetext präsentieren

die drei variablen musst du natürlich noch ganz oben in den declare teil schreiben.
 
20.07.2008  
 




Penguin
Tux
Also im Endeffekt so:
KompilierenMarkierenSeparieren
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"
    let ping_1%=ping%

endif


Nur mit dem Unterschied, dass sich bei jedem Ping die die Zahl bei "let ping_1%=ping%" ändert.

Declareteil:
KompilierenMarkierenSeparieren
declare pingstring$,ping$,ping%,ping_1%=ping%,ping_2%=ping%,ping_3%=ping%
 


OS: Win XP/Debian
XProfan 10
20.07.2008  
 




Rolf
Koch
Und denkt daran, dass mein Code sehr alt ist und verbessert werden kann.
Zum Beispiel kann überall das LET weg. Oder die Abfragen
anstatt
KompilierenMarkierenSeparieren
if equ$(blabla$="irgendwas")

lieber dann
KompilierenMarkierenSeparieren
if blabla$="irgendwas"


Zum vorhergehenden Posting von Stefan:
Noch besser ist es natürlich ein Array zu nehmen:
KompilierenMarkierenSeparieren
declare ping%[3]

und dann die Zuweisung:
KompilierenMarkierenSeparieren
ping%[1]=......

KompilierenMarkierenSeparieren
ping%[2]=......

KompilierenMarkierenSeparieren
ping%[3]=......
 
20.07.2008  
 




Stefan
Landsberg
fast.
so wie du das gemacht hast würde der
let ping_1%=ping%
befehl nur ausgeführt werden wenn der server nicht erreichbar ist.

ich meine das so:
KompilierenMarkierenSeparieren
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"
let ping_1%=ping%

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


und die erste zeile muss dann so aussehen damit du keine fehler kriegst:
KompilierenMarkierenSeparieren
declare pingstring$, ping$, ping%, ping_1%, ping_2%, ping_3%

@rolf
es kann sein dass der code sehr alt ist. aber er funktioniert und das zählt bei mir.
 
20.07.2008  
 




Penguin
Tux
Stefan Löwen
fast.
so wie du das gemacht hast würde der
let ping_1%=ping%
befehl nur ausgeführt werden wenn der server nicht erreichbar ist.

ich meine das so:
KompilierenMarkierenSeparieren
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"
let ping_1%=ping%

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


und die erste zeile muss dann so aussehen damit du keine fehler kriegst:
KompilierenMarkierenSeparieren
declare pingstring$, ping$, ping%, ping_1%, ping_2%, ping_3%


Na klar, da hätte ich selbst drauf komemn können, kann ja nichts werden, wenn ich es nach "else" schreibe.

Und die Fehler in der Declarezeile hätte ich nie gefunden, danke!
KompilierenMarkierenSeparieren
Und das schreibe ich dann am Ende vor "waitinout"?
 


OS: Win XP/Debian
XProfan 10
20.07.2008  
 




Stefan
Landsberg
@iF
ich habe mir createtext angeguckt. aber ich weiß nicht so richtig was ich damit anfangen soll.

verstehe ich das richtig, dass ich das als ersatz für meine messagebox verwenden soll?

das mit dem handle des übergeordneten fensters ferstehe ich nicht ganz. was muss ich da als handle hinschreiben?

ich hab es mal mit dieser zeile probiert:
KompilierenMarkierenSeparieren
Createtext(%hWnd,ip$ + "   -   " + status$,0,0,200,200)

aber die zeile verursacht gar nichts.

@tony
hm,
ne ich glaub hinter dem waitinPut wäre das besser aufgehoben.
dann wird nämlich erst dein bildschirm mit den ergebnissen angezeigt.
und wenn man dann eine taste drückt erscheint der infotext.

als anregung für dein programm:
- die schrift im ergebnisfenster ist ziemlich langgezogen.kann man vielleicht ändern.
- super wäre es auch noch wenn die schrift rot wäre wenn die IP nicht erreichbar ist.
 
20.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

23.674 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