Welchen Datentyp für eine IP Adresse?
-
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
-
Das mit dem Eingeben der IP ist kein Prblem, ich werd es mal schnell änden.
Nur wie bekommen ich die Ping Anweisung und speicher die Rückmeldung der Rechner? Es recht ja das die IP gespeichert wird, von den Rechnern die geantwortet haben... Ich habe ja auf dotnetmal was von dem ping befehl gelesen, nur das war mit .net und ich mach mein Tool nur für die Konsole... ohne net.Gruß Ivo
-
wie gesagt wenn du es sehr venünftig machen willst würde ich mir
dieses ping-beispiel mal anschauen: http://www.c-worker.ch/winsock/ping.cppaber wenn es nur für den kleinen privaten gebrauch wäre könntest
du auch systembefehle benutzen, für den rückgabewert pipes... const int MAX = 10000; int main() { char c[256]=""; FILE *pipe; pipe = _popen("ping -n 1 192.168.0.1", "r"); while (fgets(c, MAX-1, pipe)) cout << c; } ...
der rückgabewert wäre dann in c gespeichert und den könntest du auswerten.
-
Ivo schrieb:
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.....
Sicher gibt es die und die wurde nun mittlerweile auch schon gepostet. Bevor du anfängst wild drauf los zuprogrammieren, solltest du evtl. erstmal klären ob du die nötigen Kenntnisse zur Lösung des Problems hast, und das bezieht sich jetzt nicht auf deine Programmierfähigkeiten. Also erstmal nen Anfängertutorial über Netzwerke lesen, was sind IP-Adressen,wie sind sie aufgebaut, was ist ne Netzmaske, wie ist sie aufgebaut, welche wichtigen Protokolle gibt es, welches könnte ich benutzen und vieles mehr. Wenn du das ertsmal weisst ist der Rest Kür.
Mein Tipp:
Google nach nem Netzwerktut und dann google nach nem Sockettut.
Alles schön durchlesen und verstehen.
Dein Program nochmal planen und bei erneuten Schwierigkeiten, die du nicht durch eigene Recherchen lösen kannst, nochmal hier posten.
-
babelduo schrieb:
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);Weil sich durch sprintf und Konsorten unter Umständen Formatstringschwachstellen ergeben können. In deinem Beispiel ist es aber eher unproblematisch.
-
Also was meine Kenntisse in Sachen Netzwerke betrifft, die sind relativ hoch anzusiedeln -> ich bin ausgebildeter Netzwerkadmin und mach grad meinen MCSE (falls es Dir was sagt).
Also wie ein Netzwerk funktioniert weiß ich schon ;), das Problem ist nur das ich in Sachen C++ ein Anfänger bin, aber mir es eben beibringen will.Aber ich werde mal Deinen Tipp mit dem Netzwerktutorial beherzigen und mal meinen Freund Google fragen.
Gruß Ivo
-
dann hab ich deine posts wohl einfach fehl interpretiert.
Da du dich mit der Materie auskennst kannst du ja Shlos Lösung bentutzen und brauchst dich nur mit Bitoperatoren in C++ auseinander zusetzen um die Kernfunktionalität zu verstehen.
Dann musst du dich trotzdem noch mit Sockets auseinander setzen. Wenn du keine ICMP-API zur Hand hast musst du dich insbesondere mit raw sockets beschäftigen.
Im Prinzip ist es einfach. Leg für jeden Host in der Range deines Netzes nen ICMP-echo-req aufs segment und warte auf nen reply.
Wenn du nicht alles von Hand machen willst kannst du ja z.B. mal nach libnet googlen auch wenn es eine C-API ist.
-
Vielleicht habe ich mich auch nur blöd ausgedrückt
Also wie gesagt mit Netzwerken, Domänen, Servern usw kenn ich mich gut aus, nur Programmierung noch nicht so, darum will ich es ja lernen.Ich denke mal ich werd mal suchen und wenn ich was gefunden hab, versuche ich es mal und wenn ich net klarkomme poste ich mal wieder.
Mein Grund für dieses Posting hat sich ja nun erledigt, Vielen Dank an alle
Gruß Ivo