Change Ping output C++

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Hallo,

ik ben net begonnen met C++, en vroeg mij wat af.

Ik heb dmv google en wat verschillende code het volgende in elkaar geflansed :)

C++:
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
 
#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

static string host;
static string ping_again;

void ping()
{
     system("cls");
     cout << "Let's enter a host to check if it's responding to our ping requests." << endl << endl;
     cout << "Host: ";
     cin >> host;
     system (("ping -n 2 " + host).c_str());
     cout << endl;
     cout << "Ping another host?" << endl;
     cout << "(Y)es or (N)o: ";
     cin >> ping_again;
     if (ping_again == "Y" || ping_again == "y" || ping_again == "yes" || ping_again == "Yes")
     {
     system("cls");
     ping();
     }
     else if (ping_again == "N" || ping_again == "n"  || ping_again == "No" || ping_again == "no")
     {
     system("exit");
     }
}

int main()
{
     HANDLE hConsole;
     hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleTextAttribute(hConsole, 11);

     SetConsoleTitle("Ping response checker v0.2");
     ping();

     return(0);
}


Nu zou ik graag willen dat in plaats van de ping response bijvoorbeeld wordt weergegeven:

"host" is responding! (kleur groen)
of
"host" is not responding! (kleur rood)

Kan iemand mij wat op weg helpen hoe ik dit eventueel voor elkaar kan krijgen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En wat had je zelf al gevonden?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Ik heb zelf nog niet veel gevonden mbt het vervangen van de output van ping. Zijn wel wat dingen te vinden over redirect output, maar niet specifiek icm ping.

Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 12:57
Je zal dan ook niet een specifiek voorbeeld vinden hoe dat te gebruiken in combinatie met "ping". Je zal de beschreven techniek(en) zelf moeten toepassen. Zorg er dus voor dat je die output redirect en dan mag je zelf even zoeken hoe je dan de rest gaat aanpakken.

Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Ik heb mijn C++ boek al uit de kast gehaald :), wist dat ik hem nog ergens had liggen, net dus gevonden... Ik vind C++ nu al leuker dan PHP of Perl leren :)

Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10

Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Ok, ik moet een manier vinden om: system (("ping -n 2 " + host).c_str()); waarna ik de if functie kan gebruiken om zo een melding te kunnen geven.

Als ik nu bijv:

int test == system (("ping -n 2 " + host).c_str());
if (test == 0);
cout << "reply was succesfull";


doe...


dan krijg ik 2 keer de ping opdracht + de reply was succesfull...

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
1) als je code post, gebruik dan code tags a.u.b.
2) Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig.
3) We zitten hier niet om handjes te houden. Wat heb je zelf al geprobeerd, gezocht, gevonden etc? Heb je überhaupt al gedebugged? (Debuggen: Hoe doe ik dat?)
hint: En heb je de puntkomma achter de if-statement zien staan die er niet hoort?

[ Voor 9% gewijzigd door RobIII op 19-08-2011 19:34 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22:28

Matis

Rubber Rocket

Dat is toch ook niet gek? -n geeft het aantal echo requests op.

Nu zal de ping twee keer proberen reactie te krijgen, alvorens te returnen.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:43
C++:
1
2
3
4
5
6
7
8
9
void ping()
{
...
     if ( ... )
     {
         ping();
     }
...
} 


Wikipedia: Stack overflow

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
farlane schreef op vrijdag 19 augustus 2011 @ 21:01:
C++:
1
2
3
4
5
6
7
8
9
void ping()
{
...
     if ( ... )
     {
         ping();
     }
...
} 


Wikipedia: Stack overflow
Leuk, maar in de praktijk zul je deze Stack Overflow niet héél snel tegen komen:
C++:
1
2
3
4
5
6
7
8
9
...
     cout << "Ping another host?" << endl;
     cout << "(Y)es or (N)o: ";
     cin >> ping_again;
     if (ping_again == "Y" || ping_again == "y" || ping_again == "yes" || ping_again == "Yes") {
         ...
         ping();
     } 
...

Neemt niet weg dat je opmerking terecht is (en de opzet van TS verkeerd), maar in dit geval vind ik 't een beetje mierencopulatie. Een kleine test in C# gaf een SO na 15.000 keer (give or take a few).

[ Voor 5% gewijzigd door RobIII op 19-08-2011 21:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22:28

Matis

Rubber Rocket

farlane schreef op vrijdag 19 augustus 2011 @ 21:01:
C++:
1
2
3
4
5
6
7
8
9
void ping()
{
...
     if ( ... )
     {
         ping();
     }
...
} 


Wikipedia: Stack overflow
Zoals RobIII al aangaf, heb je inderdaad een punt. Maar dat zou betekenen dat elke recursieve functie per definitie niet goed is.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Matis schreef op vrijdag 19 augustus 2011 @ 21:55:
[...]

Zoals RobIII al aangaf, heb je inderdaad een punt. Maar dat zou betekenen dat elke recursieve functie per definitie niet goed is.
Als je het eenvoudig kunt vermijden, zoals in dit geval, dan is dat een betere oplossing.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:43
RobIII schreef op vrijdag 19 augustus 2011 @ 21:43:
Neemt niet weg dat je opmerking terecht is (en de opzet van TS verkeerd), maar in dit geval vind ik 't een beetje mierencopulatie. Een kleine test in C# gaf een SO na 15.000 keer (give or take a few).
Confused : Je geeft aan dat de opzet verkeerd is, maar ook dat ik aan het zeiken ben. Welke telt zwaarder?
Matis schreef op vrijdag 19 augustus 2011 @ 21:55:
Zoals RobIII al aangaf, heb je inderdaad een punt. Maar dat zou betekenen dat elke recursieve functie per definitie niet goed is.
Nee, een recursieve functie die gegarandeerd een keer stopt is oke.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Verwijderd

farlane schreef op vrijdag 19 augustus 2011 @ 23:25:

Nee, een recursieve functie die gegarandeerd een keer stopt is oke.
Maar als je op relatief eenvoudige wijze recursie kunt vermijden, dan moet je dat vooral doen, om resources te sparen.

Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Maar om nog 1 keer terug te komen op mijn verhaal, ik heb het volgende gedaan:


C++:
1
2
3
4
5
6
7
8
9
 

 int result = system (("ping -n 2 " + host).c_str());
      cout << endl;
       if(result ==0)
       {
           cout << ( host + " replied\n\n");       }

     cout << endl;


Dit werkt voor mij.

Topic kan dicht.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.
farlane schreef op vrijdag 19 augustus 2011 @ 23:25:
[...]

Confused : Je geeft aan dat de opzet verkeerd is, maar ook dat ik aan het zeiken ben. Welke telt zwaarder?
Ik zeg niet dat je aan 't zeiken bent maar ingaat op details die helemaal niet relevant zijn in deze case. Ja, je punt is terecht en ja, een SO is mogelijk. Nee, in de praktijk zul je 'm nooit tegenkomen tenzij je zin hebt om 15.000+ hosts (en dat is gebaseerd op mijn C# testje, your results may vary) handmatig in te voeren en met "y" te beantwoorden. Daarmee bracht je inderdaad een interessant punt aan tafel maar ook het hele topic op een zijspoor ;) Er is wel meer aan te merken op TS' code (zoals: waarom staan er überhaupt nog voorwaarden in de else? En wat betekent 't dan als je "q" antwoordt? Waarom wordt wel Y, y, Yes en yes afgehandeld maar YES, YeS, YEs en yES bijvoorbeeld niet? Waarom system("ping") en niet gewoon zelf even met ICMP stoeien? Dat lijken me nog realistischer voorbeelden dan een SO die nooit iemand gaat zien) maar daar hoeven we ook niet op in te gaan ;)

Again: Neemt niet weg dat je punt terecht is en het is inderdaad slim daar op tijd bij stil te staan als beginner en te leren na te denken over (eventuele) consequenties van bepaalde constructies. Het was geen zeiken, het was wat far-fetched IMHO. That's all.

[ Voor 96% gewijzigd door RobIII op 20-08-2011 02:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:43
Verwijderd schreef op vrijdag 19 augustus 2011 @ 23:36:
Maar als je op relatief eenvoudige wijze recursie kunt vermijden, dan moet je dat vooral doen, om resources te sparen.
Mee eens.
De reden dat ik het aangaf was ook meer omdat ik vermoed dat de TS zich helemaal niet bewust is van het feit dat het een probleem is, of dat er ueberhaupt iets bestaat als een SO. Het kunnen details zijn, niet relevant voor de vraag, maar als ik kritiek kan geven op code waardoor iemand misschien weer iets erbij geleerd heeft dan zal ik dat niet nalaten (meestal).

NB Ik bedoelde 'zeiken' in de meest positieve zin die het maar kan hebben; het is niet zo dat ik me aangevallen voel oid.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
Toch nog wat meer aan het stoeien geweest....

Alles loopt opzich, alleen wanneer er voor nog een keer het zelfde programma gekozen wordt "if yes etc.." Dan wordt er alsnog geredirect naar het main menu.

Ik zie nu heel even door de tekentjes het geheel niet meer.... Wat gaat hier niet helemaal goed ?

C++:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
 

#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

void ping(){
    string host;
    string ping_again;
    system("cls");
    cout << endl;
    cout << "::Ping Checker::" << endl << endl;
    cout << "Enter a URL or IP to check if it will reply to our ping requests: " << endl << endl;
    cout << "URL/IP: ";
    cin >> host;
    int reply = system (("ping -n 2 " + host + " >nul").c_str());
    if(reply ==0)
    {
        system("cls");
        cout << endl;
        cout << (host + " = Online!") << endl << endl;
    }

    else {
        system ("cls");
        cout << endl;
        cout << host + " Didn't responce to our ping requests." << endl << endl;
    }

        cout << "Ping another host?" << endl;
        cout << "\n(Y)es or (N)o: ";
        cin >> ping_again;
}


void dnslookup()
{
    string host1;
    string lookup_again;
    system("cls");
    cout << endl;
    cout << "::DNS Lookup::" << endl << endl;
    cout << "Please enter a url or ip to lookup" << endl << endl;
    cout << "URL/IP: ";
    cin >> host1;
    int lookup = system(("nslookup " + host1).c_str());
    cout << endl;
    if(lookup !=0)
    {
        
        cout << endl;
        cout << "Please check your input: " + host1 << endl;
        system("PAUSE");
        dnslookup();
    }
    else {
        cout << "Done." << endl;
    }
        

    cout << "\nTry again?" << endl;
    cout << "\n(Y)es or (N)o: ";
    
    cin >> lookup_again;
}


void traceroute()
{
    string host2;
    string trace_again;
    system("cls");
    cout << endl;
    cout << "::Traceroute::" << endl << endl;
    cout << "Please enter a url or ip to trace" << endl << endl;
    cout << "URL/IP: ";
    cin >> host2;
    int trace = system(("tracert " + host2).c_str());
    cout << endl;
    if(trace !=0)
    {
        cout << endl;
        cout << ("Please check your input: " + host2) << endl << endl;
        system("PAUSE");
        traceroute();
    }
    else 
    {
        cout << "Done." << endl;
    }

    cout << "\nTry again?" << endl;
    cout << "\n(Y)es or (N)o: ";
    
    cin >> trace_again;
}


int main()
{
    SetConsoleTitle("Net tools v0.1");

    int loop=1;
    int choice;
        while(loop==1)
        {
                system("CLS");
                      cout << "::Choose your program::\n\n"
                           << "1: Ping Checker\n"
                           << "2: DNS Lookup\n"
                        << "3: Traceroute\n"
                        << "4: Exit\n"
                        << endl
                        << "Your choice: ";
                    cin >> choice;
                    switch(choice)
                    {
                        case 1:
                            ping();               
                            break;
                        case 2: 
                            dnslookup();
                            break;
                        case 3:
                            traceroute();
                            break;
                        case 4:
                            return(0);
                    }
    }

    string trace_again;
    string lookup_again;
    string ping_again;

    int again=1;
    int choice2;
    
        while(again==1);
        {               
                switch(choice2)
                {
                case 1:
                    if(ping_again=="Y" || ping_again=="Yes" || ping_again=="y" || ping_again=="yes") {
                    ping();
                    }
                case 2:
                    if(lookup_again=="Y" || lookup_again=="Yes" || lookup_again=="y" || lookup_again=="yes") {
                    dnslookup();
                    }
                case 3:
                    if(trace_again=="Y" || trace_again=="Yes" || trace_again=="y" || trace_again=="yes") {
                    traceroute();
                    }
                }
        }
}

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Begin eens met debuggen; daarna ga je vragen stellen ;)
offtopic:
Waarom je dit in C++ doet is me een raadsel; een batchfile zou nog beter volstaan. Tenzij voor educatieve doeleinden zou ik eens naar de andere wegen naar Rome gaan kijken.

En het is "didn't respond" of "no response" ;)

[ Voor 73% gewijzigd door RobIII op 22-08-2011 22:33 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Verwijderd schreef op vrijdag 19 augustus 2011 @ 23:36:
[...]

Maar als je op relatief eenvoudige wijze recursie kunt vermijden, dan moet je dat vooral doen, om resources te sparen.
Als je taal/compiler tail recursion ondersteund, wat AFAIK de gangbare C++ compilers doen, is het besparen van resources niet meer een issue. Aan dit technisch feitje heeft de topic starter niet zo veel, dus in plaats daarvan wil ik zeggen dat loop duidelijker benadrukt dat je bepaalde acties wilt herhalen en het daarom een betere keuze is voor de topic starter.

Wanneer kies je voor recursie in een imperatieve programmeertaal zoals C++? Waarschijnlijk wanneer de recursie zogenaamde "primitieve recursie" is.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

  • MarcHeijerman
  • Registratie: December 2007
  • Laatst online: 03-08 21:10
RobIII schreef op maandag 22 augustus 2011 @ 22:28:
Begin eens met debuggen; daarna ga je vragen stellen ;)
offtopic:
Waarom je dit in C++ doet is me een raadsel; een batchfile zou nog beter volstaan. Tenzij voor educatieve doeleinden zou ik eens naar de andere wegen naar Rome gaan kijken.

En het is "didn't respond" of "no response" ;)
ik kan dit ook in een shell scriptje on Linux doen, veel simpeler, maar aangezien ik net een weekje bezig ben met C, lukt het gek genoeg nog niet om dit soort dingen te "debuggen" aangezien het "debuggen" een werkend programmatje laat zien en alleen terugkeerd naar het main menu wanneer er yes wordt gekozen.

Maar goed ik lees het verder wel op het C++ forum aangezien er daar wat beter geholpen wordt ipv dit "gedoe",
thanks anyway.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MarcHeijerman schreef op maandag 22 augustus 2011 @ 22:58:
[...]


lukt het gek genoeg nog niet om dit soort dingen te "debuggen" aangezien het "debuggen" een werkend programmatje laat zien en alleen terugkeerd naar het main menu wanneer er yes wordt gekozen.
Dan heb je een vreemde, of verkeerde, manier van debuggen. Als je eens begint wat extra zaken te "dumpen" met cout of weet-ik-het dan moet je prima kunnen nagaan waarom bepaalde condities van statements niet voldoen aan je verwachtingen, of waarom bepaalde variabelen niet bevatten wat je denkt dat ze bevatten. En dat is dan nog behoorlijk rudimentair debuggen.
MarcHeijerman schreef op maandag 22 augustus 2011 @ 22:58:
Maar goed ik lees het verder wel op het C++ forum aangezien er daar wat beter geholpen wordt ipv dit "gedoe"
Dit "gedoe" is niet om je te stangen, het is voor je eigen bestwil so to speak.
Give a man a fish and feed him for a day, teach a man how to fish and feed him for a lifetime.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1