<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[IP Range durchlaufen und speichern]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie kann ich möglichst geschickt einen IP Bereich anhand einer Start- und Endadresse (im Stringformat) durchlaufen und die dazwischen liegenden Adressen in einer Liste abspeichern.</p>
<p>Gibts da Vorlagen, oder hat jemand eine Idee?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201514/ip-range-durchlaufen-und-speichern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 00:43:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201514.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Dec 2007 03:08:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 03:09:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie kann ich möglichst geschickt einen IP Bereich anhand einer Start- und Endadresse (im Stringformat) durchlaufen und die dazwischen liegenden Adressen in einer Liste abspeichern.</p>
<p>Gibts da Vorlagen, oder hat jemand eine Idee?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428396</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Mon, 31 Dec 2007 03:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 03:34:11 GMT]]></title><description><![CDATA[<p>Vorschlag:</p>
<p>-String mit strtok (trennzeichen = .) trennen<br />
-die 4 strings (oder 8 mit anfangs/end-ip) in int umwandeln (mit stringstreams)<br />
-mit Schleifen durchlaufen<br />
-mit Stringstream in jedem durchlauf abspeichern (Punkt dazwischen setzen)</p>
<p>(ich weiß jetzt nicht genau was du mit liste meinst, entweder:)<br />
-in einen vector&lt;string&gt; schreiben<br />
oder wenn du's vielleicht so meinst<br />
-in eine textdatei schreiben mit fstreams...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428397</guid><dc:creator><![CDATA[XaTrIxX]]></dc:creator><pubDate>Mon, 31 Dec 2007 03:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 10:39:38 GMT]]></title><description><![CDATA[<p>Anstatt die Eingabestrings mit strtok() aufzusplitten, sollte man hier auch besser stringstream verwenden.</p>
<p>smooth_op: schau mal in die FAQ unter &quot;Einmal Zahl nach String und zurück&quot; mit Hilfe von stringstream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428449</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 31 Dec 2007 10:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 13:38:46 GMT]]></title><description><![CDATA[<p>Danke für den Tipp mit Stringstreams.<br />
Aber zum Hauptproblem: gibt es noch eine andere Möglichkeit, als danach jedes Oktett mit einer for-Schleife zu durchlaufen?<br />
Mit Liste meiner ich std::list, Vektor ist mir auch recht. Wie das Funktioniert weiss ich eigentlich.<br />
Nur die Umsetzung des durchlaufens macht Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428552</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Mon, 31 Dec 2007 13:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 14:29:08 GMT]]></title><description><![CDATA[<p>Was macht dabei Probleme?</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; list;

//befüllen

for(std::vector&lt;int&gt;::iterator it = list.begin(); it != list.end(); it++)
{
    //per *it auf den Wer zugreifen
}
</code></pre>
<p>Eine alternative ist std::for_each bzw. boost::foreach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428591</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Mon, 31 Dec 2007 14:29:08 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 14:50:02 GMT]]></title><description><![CDATA[<p>Das eigentliche Problem ist nicht das durchlaufen der fertigen Liste, sondern die einzelnen IPs zu ermitteln, die dann jeweils abgespeichert werden sollen.<br />
Also die geschachtelten for-Schleifen...<br />
Wenn ich meinen string in int gewandelt habe, muss ich dann für jedes Oktett eine Variable anlegen und diese von hinten beginnend hochzählen?</p>
<p>Sorry, aber da fehlt mir gerade ein bisschen Abstraktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428597</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Mon, 31 Dec 2007 14:50:02 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Mon, 31 Dec 2007 15:29:34 GMT]]></title><description><![CDATA[<p>Du mußt einfach 4 (verschachtelte) Schleifen verwenden:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; v;
std::ostringstream s;
for(int a=0; a&lt;=255; a++)
  for(int b=0; b&lt;=255; b++)
    for(int c=0; c&lt;=255; c++)
      for(int d=0; d&lt;=255; d++)
      {
         s.str(&quot;&quot;); // erst löschen
         s &lt;&lt; a &lt;&lt; '.' &lt;&lt; b &lt;&lt; '.' &lt;&lt; c &lt;&lt; '.' &lt;&lt; d;
         v.push_back(s.str());
      }
}
</code></pre>
<p>Nun noch die Schleifenanfänge bzw. -enden anpassen und fertig ist's...</p>
<p>Vorsicht: obiges nicht unangepaßt laufenlassen: ~4,2 Milliarden Werte !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428623</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 31 Dec 2007 15:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 02:33:55 GMT]]></title><description><![CDATA[<p>Ein frohes neues Jahr euch allen!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9348">@Th</a><br />
Super, das hilft mir weiter.<br />
Aber nochmal zu den sstreams. Wie genau kann ich denn die IP-String mittels ostringstream in 4 int-Variablen abspeichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428742</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Tue, 01 Jan 2008 02:33:55 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 13:32:25 GMT]]></title><description><![CDATA[<p>smooth_op schrieb:</p>
<blockquote>
<p>Ein frohes neues Jahr euch allen!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9348">@Th</a><br />
Super, das hilft mir weiter.<br />
Aber nochmal zu den sstreams. Wie genau kann ich denn die IP-String mittels ostringstream in 4 int-Variablen abspeichern?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Hi,</p>
<p>also irgendwie habe ich den Eindruck, dass Du nicht weißt, was Du willst.<br />
Willst Du die IPs nun als Zeichenketten oder als Wert-Tupel ablegen ?<br />
Ich würde Dir ja Letzteres empfehlen, weil Du die Werte so gleich verfügbar hast, aber der Weg (4 unsigned char) -&gt; string -&gt; (4 int) ist jedenfalls höchstwahrscheinlich unsinnig.</p>
<p>Wenn Du natürlich ein Liste abspeichern willst, kannst Du das über ofstream oder cout machen ... und die Werte für die Bearbeitung in einem Vektor speichern.</p>
<p>Vermutlich ist aber sogar diese Abspeicherung überflüssig, weil diese 4-fachschleife jederzeit wiederholbar ist ... ich weiß nicht, wozu man sich diese Werte überhaupt merken soll. Das ist ebenso sinnvol, wie eine Liste aller ganzen Zahlen von 1 bis 1000000 abzuspeichern.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428807</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 01 Jan 2008 13:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 13:40:03 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Du mußt einfach 4 (verschachtelte) Schleifen verwenden:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; v;
std::ostringstream s;
for(int a=0; a&lt;=255; a++)
  for(int b=0; b&lt;=255; b++)
    for(int c=0; c&lt;=255; c++)
      for(int d=0; d&lt;=255; d++)
      {
         s.str(&quot;&quot;); // erst löschen
         s &lt;&lt; a &lt;&lt; '.' &lt;&lt; b &lt;&lt; '.' &lt;&lt; c &lt;&lt; '.' &lt;&lt; d;
         v.push_back(s.str());
      }
}
</code></pre>
<p>Nun noch die Schleifenanfänge bzw. -enden anpassen und fertig ist's...</p>
<p>Vorsicht: obiges nicht unangepaßt laufenlassen: ~4,2 Milliarden Werte !!!</p>
</blockquote>
<p>das wird so nicht klappen...</p>
<p>beispielsweise, wenn du alle IPs von 127.0.0.1 bis 192.168.24.5 durchlaufen willst... deine Schleife würde dann so aussehen:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; v;
std::ostringstream s;
for(int a=127; a&lt;=192; a++)
  for(int b=0; b&lt;=168; b++)
    for(int c=0; c&lt;=24; c++)
      for(int d=1; d&lt;=5; d++)
      {
         s.str(&quot;&quot;); // erst löschen
         s &lt;&lt; a &lt;&lt; '.' &lt;&lt; b &lt;&lt; '.' &lt;&lt; c &lt;&lt; '.' &lt;&lt; d;
         v.push_back(s.str());
      }
}
</code></pre>
<p>ich denke, du wirst selber merken, dass bereits 127.0.0.6 nicht mehr erfasst wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428811</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Tue, 01 Jan 2008 13:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 14:24:31 GMT]]></title><description><![CDATA[<p>Moin Simon,</p>
<p>ich glaub schon zu wissen was ich will, vielleicht kann ich es nur nicht gut vermitteln <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Der Benutzer gibt also einen Range in Form &quot;von - bis&quot; an. Dies geschieht im stringFormat.<br />
Jetzt wandle ich diese 2 strings in 8 ints um(4 für die Start- und 4 für die Endadresse). -&gt; momentanes Problem!<br />
Danach laufe ich von der Start- bis zu der Endadresse durch und speichere jede einzelne Adresse im Vektor. Das hat mir Th ja schon gezeigt.<br />
Das ganze müsste doch in etwa so aussehen:</p>
<pre><code class="language-cpp">// Start und End Oktets
		  int startaddr_okt1(0);
		  int startaddr_okt2(0);
		  int startaddr_okt3(0);
		  int startaddr_okt4(0);
		  int endaddr_okt1(0);
		  int endaddr_okt2(0);, 
		  int endaddr_okt3(0);
		  int endaddr_okt4(0);

 // start und endadresse mit stringstream wandeln
 // ???

		  //IP Adressen durchlaufen und in Vector speichern
		  for( ; startaddr_okt1 &lt;= endaddr_okt1; ++startaddr_okt1)
		  {
			for( ; startaddr_okt2 &lt;= endaddr_okt2; ++startaddr_okt2)
				for( ; startaddr_okt3 &lt;= endaddr_okt3; ++startaddr_okt3)
					for( ; startaddr_okt4 &lt;= endaddr_okt4; ++startaddr_okt4)

						// akutelle Adresse in String wandeln und speichern 
						stream_itos.str(&quot;&quot;); // erst loeschen
						stream_itos &lt;&lt; startaddr_okt1 &lt;&lt; '.' &lt;&lt; startaddr_okt2 
									&lt;&lt; '.' &lt;&lt; startaddr_okt3 &lt;&lt; '.' &lt;&lt; startaddr_okt4;

						iprange.push_back(stream_itos.str());
		  }
</code></pre>
<p>Moin zwutz,</p>
<p>meinst du wegen der Klammerung?<br />
Wie siehts mit meiner Version davon aus, das sollte doch komplett durchlaufen. Bin nur unsicher, ob ich für die Ausdrücke der letzten for-Schleife noch klammern brauche.</p>
<p>//Edit<br />
jetzt weiss ich was du meinst. Aber wie kann man tatsächlich alles durlaufen?<br />
Bin ich eigentlich der erste, der vor dieser Problematik steht? Kommt mir fast so vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428830</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Tue, 01 Jan 2008 14:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 15:11:01 GMT]]></title><description><![CDATA[<p>smooth_op schrieb:</p>
<blockquote>
<p>...<br />
Der Benutzer gibt also einen Range in Form &quot;von - bis&quot; an. Dies geschieht im stringFormat...</p>
</blockquote>
<p>Ach so !!!<br />
OK, jetzt habe auch ich es geschnallt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Also so wie das klingt, würde ich einen eigenen Datentyp für die IPs nehmen. Entweder hast Du einen &quot;sicheren&quot; 4-Byte-Datentyp zur Hand (ist aber plattformabhängig) oder Du baust Dir eine Klasse</p>
<pre><code class="language-cpp">struct IP {
   unsigned char data[4];
   bool next();
};
</code></pre>
<p>Da kannst Du dann Deine &quot;+1-Mimik mit Überlauf&quot; implementieren (würde aber auch mit einer freien Funktion gehen).</p>
<p>Das Einlesen würde ich mit dem operator&gt;&gt;(istream&amp;, int&amp;) machen.</p>
<pre><code class="language-cpp">istream&amp; operator(istream&amp; in, IP&amp; ip) {
   char trenner;
   return in &gt;&gt; ip.data[3] &gt;&gt; trenner &gt;&gt; ip.data[2] &gt;&gt; trenner 
      &gt;&gt; ip.data[1] &gt;&gt; trenner &gt;&gt; ip.data[0];
}
</code></pre>
<p>(ungetestet)</p>
<p>Damit kannst Du direkt aus cin einlesen</p>
<pre><code class="language-cpp">IP ip;
cin &gt;&gt; ip;
</code></pre>
<p>... oder via einen String (was aber IMHO überflüssig ist)</p>
<pre><code class="language-cpp">IP ip;
string s;
cin &gt;&gt; s;
istringstream istr(s);
istr &gt;&gt; ip;
</code></pre>
<p>Außerdem natürlich auf ifstreams und allen möglichen selbstgebastelten istreams.<br />
Und das Alles mit der &quot;Standardfehlerbehandlung von operator&gt;&gt;()&quot;. (also Abfragen des Stream-Status nach dem Einlesen nicht vergessen)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428852</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 01 Jan 2008 15:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 15:45:55 GMT]]></title><description><![CDATA[<p>Danke Simon, damit werde ichs versuchen. Aud jeden Fall besser, als mit 8 ints rumzumachen.<br />
Auf was genau muss man den Stream-Status denn checken?</p>
<p>Ach und den String brauche ich deshalb, weil ich damit später die Client-Adressstruktur für eine Verbindung fülle.</p>
<p>Wenn jetzt vielleicht noch jemand was zum Durchlaufen des Ranges sagen könnte?</p>
<p>Grüße,<br />
smooth</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428868</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Tue, 01 Jan 2008 15:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 15:54:57 GMT]]></title><description><![CDATA[<p>smooth_op schrieb:</p>
<blockquote>
<p>...<br />
Ach und den String brauche ich deshalb, weil ich damit später die Client-Adressstruktur für eine Verbindung fülle....</p>
</blockquote>
<p>Dafür hast Du doch den operator&lt;&lt;(ostream&amp;, IP const&amp;); <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ...</p>
<p>Das Iterieren sollte nicht das Problem sein:<br />
- Einfach data[0] erhöhen, wenn da nicht schon 255 drinsteht.<br />
- Wenn doch, dann data[0]=0 und data[1] erhöhen, wenn da nicht schon 255 drinsteht.<br />
- Wenn doch, dann data[1]=0 und data[2] ....<br />
...<br />
und wenn IP schon 255.255.255.255 ist, dann liefert next() eben false zurück.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428872</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 01 Jan 2008 15:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to IP Range durchlaufen und speichern on Tue, 01 Jan 2008 16:02:28 GMT]]></title><description><![CDATA[<p>Alles klar, ich werde mein Glück dann mal versuchen.<br />
Falls es noch Schwierigkeiten gibt, liest man sich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Danke nochmals für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1428875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1428875</guid><dc:creator><![CDATA[smooth_op]]></dc:creator><pubDate>Tue, 01 Jan 2008 16:02:28 GMT</pubDate></item></channel></rss>