<?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[Broadcast Problem &#x2F; 2 IP Adressen eines Computers]]></title><description><![CDATA[<p>Ich versuch grad eine kleine Netzwerk Engine zu machen.<br />
Dabei soll ein UDP-Broadcast im lokalem Netzwerk mögliche Server finden.</p>
<p>Mein Hauptrechner hängt in einem WLAN Netz, was am Internet angebunden ist. Dann hab ich noch meinen Laptop, der ist über ein normales Netzwerkkabel mit meinem Hauptrechner verbunden.</p>
<p>IPs Netzwerk<br />
Laptop 192.168.0.3<br />
Hauptrechner 192.168.0.1</p>
<p>IPs WLAN Netzwerk<br />
Hauptrechner 192.168.178.30<br />
andere Rechner 192.168.178.x</p>
<p>Ich schick prinzipiell ein UDP Broadcast raus, und die &quot;betroffenen&quot; antworten mit einem UDP sendto an die IP Adresse von der der Broadcast kam.</p>
<p>Starte ich einen Broadcast vom Laptop aus, dann antwortet mein Hauptrecher wie gewünscht. (An die IP Adresse, die er vom Absender des Broadcastes kennt - 192.168.0.3)</p>
<p>Starte ich allerdings einen Broadcast von meinem Hauptrechner, dann kann der Laptop mit sendto nix schicken, weil angeblich der Absender des Broadcasts die IP Adresse 192.168.178.30 anstatt 192.168.0.1 ist...</p>
<p>Hat jemand eine Ahnung, was ich machen könnte, um die korrekte IP heraus zu finden?</p>
<p>Einziger Ausweg, den ich zur Zeit sehe ist jede Broadcast Anfrage mit einer Broadcast Antwort zu beantworten. (Oder wenigstens die, die nicht geschickt werden können.)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/187536/broadcast-problem-2-ip-adressen-eines-computers</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 15:00:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187536.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Jul 2007 14:29:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Broadcast Problem &#x2F; 2 IP Adressen eines Computers on Fri, 20 Jul 2007 14:31:31 GMT]]></title><description><![CDATA[<p>Ich versuch grad eine kleine Netzwerk Engine zu machen.<br />
Dabei soll ein UDP-Broadcast im lokalem Netzwerk mögliche Server finden.</p>
<p>Mein Hauptrechner hängt in einem WLAN Netz, was am Internet angebunden ist. Dann hab ich noch meinen Laptop, der ist über ein normales Netzwerkkabel mit meinem Hauptrechner verbunden.</p>
<p>IPs Netzwerk<br />
Laptop 192.168.0.3<br />
Hauptrechner 192.168.0.1</p>
<p>IPs WLAN Netzwerk<br />
Hauptrechner 192.168.178.30<br />
andere Rechner 192.168.178.x</p>
<p>Ich schick prinzipiell ein UDP Broadcast raus, und die &quot;betroffenen&quot; antworten mit einem UDP sendto an die IP Adresse von der der Broadcast kam.</p>
<p>Starte ich einen Broadcast vom Laptop aus, dann antwortet mein Hauptrecher wie gewünscht. (An die IP Adresse, die er vom Absender des Broadcastes kennt - 192.168.0.3)</p>
<p>Starte ich allerdings einen Broadcast von meinem Hauptrechner, dann kann der Laptop mit sendto nix schicken, weil angeblich der Absender des Broadcasts die IP Adresse 192.168.178.30 anstatt 192.168.0.1 ist...</p>
<p>Hat jemand eine Ahnung, was ich machen könnte, um die korrekte IP heraus zu finden?</p>
<p>Einziger Ausweg, den ich zur Zeit sehe ist jede Broadcast Anfrage mit einer Broadcast Antwort zu beantworten. (Oder wenigstens die, die nicht geschickt werden können.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329347</guid><dc:creator><![CDATA[Samuel Plentz]]></dc:creator><pubDate>Fri, 20 Jul 2007 14:31:31 GMT</pubDate></item><item><title><![CDATA[Reply to Broadcast Problem &#x2F; 2 IP Adressen eines Computers on Fri, 20 Jul 2007 17:31:23 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-403.html" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-8.html" rel="nofollow">Rund um die Programmierung</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329418</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 20 Jul 2007 17:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to Broadcast Problem &#x2F; 2 IP Adressen eines Computers on Fri, 20 Jul 2007 18:26:14 GMT]]></title><description><![CDATA[<p>der 192.168.178.30 scheint wohl sowas wie ein repeater für broadcasts zu sein? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
wie auch immer, häng' in die udp-pakete einfach die ip-adresse des absenders mit dran. die 4 bytes fallen nicht ins gewicht und sie sollten auch nicht verändert werden.<br />
andere möglichkeit: ARP anfragen abschicken...<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329441</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 20 Jul 2007 18:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to Broadcast Problem &#x2F; 2 IP Adressen eines Computers on Fri, 20 Jul 2007 21:59:21 GMT]]></title><description><![CDATA[<p>Undertaker schrieb:</p>
<blockquote>
<p>der 192.168.178.30 scheint wohl sowas wie ein repeater für broadcasts zu sein? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
wie auch immer, häng' in die udp-pakete einfach die ip-adresse des absenders mit dran. die 4 bytes fallen nicht ins gewicht und sie sollten auch nicht verändert werden.<br />
andere möglichkeit: ARP anfragen abschicken...<br />
<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="🙂"
    /></p>
</blockquote>
<p>Dann funktioniert das Ganze natürlich nichtmehr über ein NAT.<br />
Bei Broadcasts sollte es nicht weiter problematisch sein (da die sowieso normalerweise nicht durch das NAT gehen), aber man sollte generell das verschicken von IP Adressen und/oder Portnummern vermeiden.</p>
<p>Hätten sich z.B. die Designer von FTP daran gehalten wäre allen Firewall und Router Herstellern eine Menge Arbeit erspart geblieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/981">@Samuel</a> Plentz: die Absender Adresse (IP + Port) in einem UPD Packet darf eigentlich nicht verändert werden, auch von Repeatern nicht. Einzig ein NAT darf diese verändern, nur muss es dann Antworten auch auf der veränderten IP entgegennehmen und entsprechend weiterleiten, damit das ganze für die Anwendung transparent bleibt.<br />
Wieso du also auf dem Laptop eine IP siehst an die du nicht antworten kannst ist mir irgendwie schleierhaft. Oder antwortest du vielleicht mit einer fixen Portnummer? Das könnte ein Problem sein... in dem Fall versuch' mal an die Portnummer zu antworten von der das Paket gekommen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329524</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 20 Jul 2007 21:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to Broadcast Problem &#x2F; 2 IP Adressen eines Computers on Sun, 22 Jul 2007 19:51:22 GMT]]></title><description><![CDATA[<p>Also zuerst einmal vielen Dank für die schnellen Antworten <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="👍"
    /> , und Sorry fürs falsche Forum.</p>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16045">@Undertaker</a></strong><br />
An IP Adresse anhängen hatte ich gedacht, aber ich bekomme nur die 192.168.178.30 zurück, wenn ich die IP abfrage. Meine IP Abfrage:</p>
<pre><code class="language-cpp">HOSTENT* Host;
Host=gethostbyname(Hostname;
</code></pre>
<p>Wie mach ich eine ARP Abfrage in CPP?</p>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a></strong><br />
Ich schick eigentlich direkt an den Absender zurück, hier der betreffende Code:</p>
<p><em>Initialisierung:</em></p>
<pre><code class="language-cpp">SOCKADDR_IN addr;
a.s_UDP=socket(AF_INET,SOCK_DGRAM,0);
if(a.s_UDP==INVALID_SOCKET) Fehler...
addr.sin_family=AF_INET;
addr.sin_port=htons(a.Port+1);
addr.sin_addr.s_addr=ADDR_ANY;
long rc=bind(a.s_UDP,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR_IN));
if(rc==SOCKET_ERROR) Fehler...
</code></pre>
<p><em>Broadcast-Anfrage nach Servern im Netzwerk</em></p>
<pre><code class="language-cpp">long rc;
char buf[256];
SOCKADDR_IN addr;
a.s_UDP_Broadcast=socket(AF_INET,SOCK_DGRAM,0);
if(a.s_UDP_Broadcast==INVALID_SOCKET) Fehler...
addr.sin_family=AF_INET;
addr.sin_port=htons(a.Port+1);
addr.sin_addr.s_addr=inet_addr(&quot;255.255.255.255&quot;);
setsockopt(a.s_UDP_Broadcast,SOL_SOCKET,SO_BROADCAST,&quot;True&quot;,5);
strcpy_s(buf,&quot;1&quot;);
rc=sendto(a.s_UDP_Broadcast,buf,strlen(buf),0,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR_IN));
if(rc==SOCKET_ERROR) Fehler...
</code></pre>
<p><em>Nachrichtenhandling: (wird in einer Schleife ständig ausgeführt)</em></p>
<pre><code class="language-cpp">FD_SET fdSet;
FD_ZERO(&amp;fdSet);
FD_SET(a.s_UDP,&amp;fdSet);
FD_SET(a.s_UDP_Broadcast,&amp;fdSet);

timeval t;
t.tv_sec=0;
t.tv_usec=0;
long rc=select(0,&amp;fdSet,0,0,&amp;t);

if(rc==SOCKET_ERROR) Fehler...
if(rc==0) return;
if(FD_ISSET(a.s_UDP,&amp;fdSet)){ // UDP-Socket meldet sich
 char buf[256];
 char buf2[300];
 SOCKADDR_IN addr;
 SOCKADDR_IN remoteAddr;
 int remoteAddrLen=sizeof(SOCKADDR_IN);

 rc=recvfrom(a.s_UDP,buf,256,0,(SOCKADDR*)&amp;remoteAddr,&amp;remoteAddrLen);
 if(rc==SOCKET_ERROR) Fehler...
 buf[rc]='\0';

 GString Y=buf;
 if(Y==&quot;1&quot;){ // Server Anfrage
  sprintf_s(buf2,&quot;2%s&quot;,a.ServerString.c_str());
  rc=sendto(a.s_UDP,buf2,strlen(buf2),0,(SOCKADDR*)&amp;remoteAddr,remoteAddrLen);
  if(rc==SOCKET_ERROR) Fehler...
  // hier tritt der Fehler auf... (WSAGetLastError==#10065 - WSAEHOSTUNREACH)
  // WSAEHOSTUNREACH: No route to host. 
  //  A socket operation was attempted to an unreachable host.
  //  See WSAENETUNREACH. 
  // WSAENETUNREACH: Network is unreachable. 
  //  A socket operation was attempted to an unreachable network.
  //  This usually means the local software knows no route to reach
  //  the remote host.
  cout&lt;&lt;rc&lt;&lt;&quot; Bytes gesendet!\n&quot;;
 }
}

if(FD_ISSET(a.s_UDP_Broadcast,&amp;fdSet)){ // Server meldet sich für die Serverliste
 char buf[256];
 char buf2[300];
 SOCKADDR_IN addr;
 SOCKADDR_IN remoteAddr;
 int remoteAddrLen=sizeof(SOCKADDR_IN);

 rc=recvfrom(a.s_UDP_Broadcast,buf,256,0,(SOCKADDR*)&amp;remoteAddr,&amp;remoteAddrLen);
 if(rc==SOCKET_ERROR) Fehler...
 buf[rc]='\0';

 GString Y=buf;
 GString Z=Y.Left(1);
 if(Z==&quot;2&quot;){
  Y.Delete(0);
  cout&lt;&lt;&quot;Server gefunden:\n&quot;;
  cout&lt;&lt;&quot;IP:           &quot;&lt;&lt;getIP(remoteAddr)&lt;&lt;&quot;\n&quot;;
  cout&lt;&lt;&quot;Beschreibung: &quot;&lt;&lt;Y;
 }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1330384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330384</guid><dc:creator><![CDATA[Samuel Plentz]]></dc:creator><pubDate>Sun, 22 Jul 2007 19:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to Broadcast Problem &#x2F; 2 IP Adressen eines Computers on Sun, 22 Jul 2007 20:13:54 GMT]]></title><description><![CDATA[<p>Noch ein paar Tests haben ergeben:<br />
Im WLAN Netzwerk kommt es zu keinen Problemen. Dort finden sich die Server.<br />
Wenn ich das WLAN deaktiviere, gibt es auch keine Probleme mit dem Laptop.<br />
Wenn ich beide Netze habe finde ich auf dem Hauptrechner selbst 2 Server. Wenn ich das WLAN deaktiviere finde ich auf dem Hauptrechner nur einen Server.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330403</guid><dc:creator><![CDATA[Samuel Plentz]]></dc:creator><pubDate>Sun, 22 Jul 2007 20:13:54 GMT</pubDate></item></channel></rss>