Welchen Datentyp für eine IP Adresse?
-
Ne eigene Klasse mit 4 x unsigned chars (Byte).
-
Kannst du nicht die Standard-Struktur:
struct sockaddr
verwenden ??
mfg JJ
-
Es geht, Vielen Dank!
Warum muß ich denn [20] dahinter angeben? Lacht Euch nun bitte nicht krank....
Als ich es mit 'char ip_begin' versucht hab hat er nur die '1' gespeichert.Gruß Ivo
-
struct ip { unsigned char ipnum[4]; unsigned char subnetmask[4]; unsigned int port; }
-
IPv4-Adressen, also die üblichen im Bereich von 0.0.0.0 bis 255.255.255.255 werden normalerweise als 4-Byte-Ganzzahl, also int bzw. long gespeichert und bilden Byte für Byte ausgegeben die Adresse in der bekannten Form. Ausgabe sähre also beispielsweise so aus:
int ip = 0xC0A80001; //Steht für die IP-Adresse 192.168.0.1 cout << ((ip >> 24) & 0xFF) << "." << ((ip >> 16) & 0xFF) << "." << ((ip >> 8) & 0xFF) << "." << (ip & 0xFF);
-
Die IP will ich ja eingeben (was auch schon funktioniert) und eine Rückmeldung erhalten.
Das funktioniert schon nur hinterfrag ich gerne mal Sachen.... ich will ja lernen!
Ist es schwer in eine Consolenanwendung den Ping befehl einzubinden?Gruß Ivo
PS: Bitte nur auf den Weg weisen, keinen kompletten Code -> sonst = Lerneffekt gleich 0
-
hmm also ich glaube du willst ein program schreiben wo du eine
ip eingibst und diese dann angepingt wird?!ich denke das mit der ip eingeben wirst du schon schaffen,
hier ist ein beispielprogram für einen ping-befehl
http://www.c-worker.ch/winsock/ping.cppdu kannst aber auch einen systembefehl ausführen system("ping...");
-
Genau! Mein Chef hat sich in die Birne gesetzt, schreib mal schnell ein Programm womit ich die Domäne nach bestimmten Dateien durchsuchen kann. Unsere Domäne ist ca. 180 Rechner, das Adminkennwort hab ich ja, kein Wunder beim AdminPosten
Ich dachte mir das so:
Erst alle anpingen, ob alle da sind, deshalb ip_begin und ip_end, dann Netzlaufwerk verbinden und suchen....Und das ganze in C++, Chef meinte: Hast ja da ein dickes Buch, kann ja nicht so wild sein....
Gruß Ivo
-
mhhh naja wenners meint
#include <stdlib.h> #include <iostream.h>
so fängt dass prog schon an .. naja gibt ja vielleicht wichtigeres als auf den standart achten
naja ausserdem denke ich nicht dass es
du kannst aber auch einen systembefehl ausführen system("ping...");
geben sollte ...
ich meine klar gibts dass . aber leiderjoa mehr hab ich nicht zu meckern
-
Was spricht denn dagegen einen Systembefehl auszuführen? Das System ist doch eh Windows bei uns......
Das grobe Konzept für das Programm steht ja, nur die Umsetzung ist für einen Anfänger recht schwer....
Gruß Ivo
-
heulen könnts jeden tag system(bla);
nicht nehmen weil
system(); zu vermeiden ist -->link guxxen
-
truebool schrieb:
so fängt dass prog schon an .. naja gibt ja vielleicht wichtigeres als auf den stan**** achten
äh, ja. Zum Beispiel Dinge zu bewältigen die vom C++-Standard nicht abgedeckt sind.
naja ausserdem denke ich nicht dass es
du kannst aber auch einen systembefehl ausführen system("ping...");
geben sollte ...
ich meine klar gibts dass . aber leiderSo ein Blödsinn. Wieso sollte es den nicht geben?
Was spricht denn dagegen einen Systembefehl auszuführen? Das System ist doch eh Windows bei uns......
Grundsätzlich nichts. Man sollte sich nur im klaren sein, was die Funktion denn macht und das es viele Situationen gibt, wo man sie besser nicht einsetzen sollte. Das steht in dem Link zur FAQ.
Abgesehen davon, bringt dir ein system(ping) auch nicht viel, da du den Rückgabewert nicht ohne weiteres auswerten kannst.
-
Zitat:
naja ausserdem denke ich nicht dass es
Zitat:
du kannst aber auch einen systembefehl ausführen system("ping...");geben sollte ...
ich meine klar gibts dass . aber leiderSo ein Blödsinn. Wieso sollte es den nicht geben?
steht da es gibts nicht ?? denke ich nicht
zitat ich oben
ich meine klar gibts dass . aber leider
naja ich denke man sollte aber nicht die schlechtere variante nehmen wenns auch ohne geht .. natürlich treffen nicht immer alle nachteile zu
so fängt dass prog schon an .. naja gibt ja vielleicht wichtigeres als auf den stan**** achten
ich denke aber man kann <iostream> statt <iostream.h> nehmen und auch <cstdbib>
ist machbar und nicht <stdlib.h>
und von daher deckt der standart dies schon
auf was anderes war meine aussage auch nicht bezogen (@zitat hesder)Grundsätzlich nichts. Man sollte sich nur im klaren sein, was die Funktion denn macht und das es viele Situationen gibt, wo man sie besser nicht einsetzen sollte. Das steht in dem Link zur FAQ.
Abgesehen davon, bringt dir ein system(ping) auch nicht viel, da du den Rückgabewert nicht ohne weiteres auswerten kannst.
sachst also selbst er sollte es hier nicht nehmen ..
naja nächste mal nicht ganz so hart bitte ..
hab hier nichts böse gemeint ...
-
truebool schrieb:
So ein Blödsinn. Wieso sollte es den nicht geben?
steht da es gibts nicht ?? denke ich nicht
du hast doch geschrieben, "den Befehl sollte es nicht geben". Das meinte ich.
ich denke aber man kann <iostream> statt <iostream.h> nehmen und auch <cstdbib>
ist machbar und nicht <stdlib.h>
und von daher deckt der stan**** dies schon
auf was anderes war meine aussage auch nicht bezogen (@zitat hesder)Ah, ok. Ich hab nur das windows.h gesehen und ich dachte du beziehst dich darauf. Hab die alten Header gar nicht gesehen.
naja nächste mal nicht ganz so hart bitte ..
hab hier nichts böse gemeint ...ich auch nicht
Es ist hier im Forum so, dass sobald irgendwo system steht, jemand darüber schimpft wie scheisse die Funktion ist und das man sie ja niemals nie verwenden soll. Das nervt etwas.
-
ja kann ich ja verstehen ich meine grade in der letzten woche ist es mir echt oft aufgefallen ( die kritik aber auch wieviele die funktion benutzen )
ich meine ich hab mich umgeguggt und so viele tuts gesehen die die benutzen ohne auch nua die schwachstellen oder alternativen zu erwähnen ...
naja aba in diesem fall isse echt nicht so dolle
1 admin prog und root shell is ja nicht dolle
2 kann er nicht weiter damit arbeiten wie du schon gesagt hast ..
ja hätte nicht alles rauskopriren sollen ausm header aber naja is ja nun geklärt denke ich .. also friedenspfeife anbietz..
-
Nicht das das hier noch als Streitthema ausartet, ich wollte hier keine Grundsatzdiskussion starten.
Nun möchte ich den kompletten Inhalt zwischen 192.168.0.1 und 192.168.0.255 auflisten, gibt es dafür eine mathematische Funktion aus cmath() oder?
Wäre für ein Stichwort dankbar, damit ich Google und MSDN fragen kannGruß Ivo
-
du willst
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
...
192.168.0.254
192.168.0.255ausgeben?
int a=192; int b=168; int c=0; int d=0; while(d!=255) { printf("%i.%i.%i.%i\n",a,b,c,d); d=d+1; }
wenn du die jeweilige ip in einer char vai haben willst könntest
du ja sprintf benutzen, obwohl ich glaube das man sprintf nicht
benutzen soll, weis aber nciht warumchar ip[20];
sprintf(ip,"%i.%i.%i.%i",a,b,c,d);aber vieleicht gibt es auch noch eine andere/bessere lösung
-
Dies ist aber kein echtes Berechnen der IP Adressen im Bereich meiner eingegebenen Anfangs IP und End IP Adresse....
Dies ist ja nur ein vordefiniertes Ausgeben einer Zahlenreihe, wenn sich mal unser Adressbereich ändert also auf 182.176.0.1 usw.... muß ich ja das Programm wieder ändern, auch wenn neue Rechner hinzukommen....Da müß es ne Mathematische Lösung geben.....
Gruß Ivo
-
ich dachte du wolltest alle ips in einem bereich "berechen"
und dann anpingen?!wenn sich der bereich ändern kann, dann mach es doch so das man
am anfang den breich eingeben kann - oder ist das ein prob?!babel
-
template<class E, class T> void range(std::basic_ostream<E,T>& os, unsigned IP_first, unsigned IP_last) { for ( ; IP_first <= IP_last; ++IP_first) os << (IP_first & 0xff) << "." << (IP_first >> 8 & 0xff) << "." << (IP_first >> 16 & 0xff) << "." << (IP_first >> 24 & 0xff) << std::endl; } //... range(std::cout,0,~0); //alle Adressen von 0.0.0.0 bis 255.255.255.255 ausgeben