RawSocks brauchen afaik Adminrechte
Tsjuder hat recht: "foo" ist erstmal ein const char[] - Array. Bzw. ein Pointer darauf. "+zahl" wird auf den Pointer addiert. Gemeinerweise wirft nur der Clang Compiler eine Warnung, GCC aber, trotz "-Wall" Option erstmal nicht.
Hier sieht man die "Einfachkeit" des C++
So. In "purem" C++ sollte das in etwa so ausschauen:
Code:
[color=#007020]#include <iostream>
#include <stdlib.h>
[/color]
[color=#902000]int[/color] [color=#06287e]main[/color](){
[color=#007020][b]for[/b][/color] ([color=#902000]int[/color] i[color=#666666]=[/color][color=#40a070]0[/color];i[color=#666666]<[/color][color=#40a070]4[/color];i[color=#666666]++[/color]){
std[color=#666666]::[/color]string ping_addr [color=#666666]=[/color] [color=#4070a0]"127.0.0."[/color] [color=#666666]+[/color] std[color=#666666]::[/color]to_string(i);
[color=#007020][b]auto[/b][/color] ping_cmd [color=#666666]=[/color] [color=#4070a0]"ping -c 1 "[/color] [color=#666666]+[/color] ping_addr [color=#666666]+[/color] [color=#4070a0]"[/color][color=#4070a0][b]\n[/b][/color][color=#4070a0]"[/color] ;
[color=#902000]int[/color] ret [color=#666666]=[/color] system(ping_cmd.c_str()); [color=#60a0b0][i]// sytem möchte einen c string haben
[/i][/color] [color=#007020][b]if[/b][/color] (ret [color=#666666]!=[/color] [color=#40a070]0[/color]){
std[color=#666666]::[/color]cout [color=#666666]<<[/color] ping_addr [color=#666666]<<[/color] [color=#4070a0]" failed"[/color] [color=#666666]<<[/color] std[color=#666666]::[/color]endl;
} [color=#007020][b]else[/b][/color] {
std[color=#666666]::[/color]cout [color=#666666]<<[/color] ping_addr [color=#666666]<<[/color] [color=#4070a0]" ok"[/color] [color=#666666]<<[/color] std[color=#666666]::[/color]endl;
}
}
}
braucht allerdings C++11 unterstützenden Compiler.
Das:
Code:
[color=#007020]#include <iostream>
#include <stdlib.h>
#include <cstdio>
[/color]
[color=#902000]int[/color] [color=#06287e]main[/color](){
[color=#902000]char[/color] output_buf[[color=#40a070]256[/color]];
[color=#007020][b]for[/b][/color] ([color=#902000]int[/color] i[color=#666666]=[/color][color=#40a070]1[/color];i[color=#666666]<[/color][color=#40a070]4[/color];i[color=#666666]++[/color]){
snprintf(output_buf, [color=#40a070]256[/color], [color=#4070a0]"ping -c 1 192.168.56.%d"[/color], i);
[color=#902000]int[/color] ret [color=#666666]=[/color] system(output_buf);
[color=#007020][b]if[/b][/color] (ret [color=#666666]!=[/color] [color=#40a070]0[/color]){
printf([color=#4070a0]"%.256s failed[/color][color=#4070a0][b]\n[/b][/color][color=#4070a0]"[/color], output_buf); [color=#60a0b0][i]// wir wollen max. 256 Zeichen haben
[/i][/color] } [color=#007020][b]else[/b][/color] {
printf([color=#4070a0]"%.256s ok[/color][color=#4070a0][b]\n[/b][/color][color=#4070a0]"[/color], output_buf);
}
}
}
ist dann wiederum C. Für Winversion des Pingtools sollte "-c 1" durch "-n 1" ersetzt werden und ggf. möchte man noch "-w 3000" (Timeout in Millisekunden) setzen.
Allerdings hast Du noch mehr Probleme:
Normalerweise soll ein Programm beim Beenden einen sinnvolen Rückgabecode liefern. Sowas wie "0" bei Erfolg und !=0 im Fehlerfall. Damit soll man Programme aus anderen Programmen/Scripten aufrufen,
ohne die genaue Programmausgabe auseinandernehmen zu müssen (denn: 1) aufwändig und 2) wenn das Programm lokalisiert ist und dem Benutzer Meldungen in seiner Sprache liefert, wird es noch aufwändiger

)
Jedoch scheint Windows-"Ping" das in einingen Fällen nicht soo genau zu nehmen und auch mal 0 zurückzugeben, obwohl irgendetwas schief gelaufen ist (daher auch die zahlreichen "komplizierten" Lösungen bei Google - man muss die komplette Ausgabe parsen)
Und nicht zuletzt: wie willst Du die Daten verschicken? Ich habe hier die Netzlaufwerkfreigaben im Verdacht. Allerdings muss nicht jeder Rechner,
der auf Pings antwortet, so eine Freigabe haben und umgekehrt
Und zumindest früher war es bei vielen "Sicherheitstools" üblich, nicht auf PINGs zu antworten - das wurde dann von Marketingleuten "Stealthmode" genannt

(vgl. mit "ich bin nicht da" Antwort beim Klingeln an der Tür)
D.h Du könntest in dem Fall gleich probieren, die Dateien zu senden.
Edit: ihr seid gemein

@bit:
Code:
CDW@highlander-jr:~/projects/pinger % g++48 bit.cpp
bit.cpp: In function 'int main()':
bit.cpp:11:36: error: 'sprintf' was not declared in this scope
sprintf(cmd, "%s%d", basecmd, i);
^
CDW@highlander-jr:~/projects/pinger % clang++ -Wall bit.cpp
bit.cpp:11:13: warning: variable 'cmd' is uninitialized when used here
[-Wuninitialized]
sprintf(cmd, "%s%d", basecmd, i);
^~~
bit.cpp:7:12: note: initialize the variable 'cmd' to silence this warning
char *cmd;
^
= NULL
1 warning generated.
CDW@highlander-jr:~/projects/pinger % clang++ bit.cpp
CDW@highlander-jr:~/projects/pinger % ./a.out
zsh: segmentation fault ./a.out
... adding <cstdio>...
DW@highlander-jr:~/projects/pinger % g++48 bit.cpp -o bit && ./bit
zsh: segmentation fault ./bit
