IP Subnetz prüfen

OP #5731583
Lesenswert?

Guten Tag,

ich bin mit der Subnetz-Berechnung auf Kriegsfuß, muss das jetzt aber 
umsetzen.

Ich möchte prüfen, ob Netzwerkadapter und Gerät im gleichen Subnetz 
sind. An die Adressdaten des Gerätes komme ich per UDP Broadcast, der 
dann antwortet. Zwar weiß ich dann, dass da ein Gerät im Netzwerk hängt, 
aber bei falschem Subnetz kann nicht darauf zugegriffen werden.

https://blogs.msdn.microsoft.com/knom/2008/12/31/ip-address-calculations-with-c-subnetmasks-networks/

Dem Beitrag folgend möchte ich die Adressen prüfen.

Netzwerkadapter hat 192.168.0.2, Subnetz 255.255.0.0
Gerät hat 192.168.0.100, Subnetz ist 255.255.255.0

Die Funktion "IsInSameSubnet" akzeptiert aber nur eine Subnetzmaske. 
Aber müssen nicht beide berücksichtigt werden?

Irgendwie blicke ich da nicht ganz durch.

Danke und Grüße M.S.
Gast #5731589
Lesenswert?

Martin S. schrieb:
> Netzwerkadapter hat 192.168.0.2, Subnetz 255.255.0.0
> Gerät hat 192.168.0.100, Subnetz ist 255.255.255.0

Wie passiert denn sowas? Das ist m.W. gar nicht erlaubt 
(Fehlkonfiguration). Da muss mindestens ein Router zwischen sein. Kein 
Wunder dass das nicht funktioniert.
Gast #5731600
Lesenswert?

Guten Morgen Martin,

TL;DR: Die Subnetz-Maske für für alle Teilnehmer in einem Sub-Netz 
identisch sein.

Für den Host mit 192.168.0.2/255.255.0.0 geht das Netz von 192.168.0.0 
bis 192.168.255.255, für das Gerät mit 192.168.0.100/255.255.255.0 
jedoch von 192.168.0.0 bis 192.168.0.255. Jetzt ist es jedoch so, dass 
die letzte Adresse des Netzes die sog. Broascast-Adresse ist. Damit 
haben die beiden Teilnehmer unterschiedliche Auffassung von dieser und 
allgemein von der Netz-Struktur.

Das kann zwar teilweise funktionieren, jedoch sollte man das unbedingt 
vermeiden, da dann erstens keiner mehr durchblickt und zweitens man sich 
schwer findbare Fehler einfangen kann.

Ein Gateway/Router hingegen braucht man nur, wenn die Teilnehmer sich 
nicht im selben Sub-Netz befinden.

Greets
  Sebastian.
Gast #5731607
Lesenswert?

Moin,

zwei unterschiedliche Subnetzmasken bedeuten immer, daß die Geräte in 
unterschiedlichen Subnetzen sind.

Programmieren läßt sich so eine Abfrage über bitweises AND, quasi so

(IP1 AND Subnetz) = (IP2 AND Subnetz) ?

Und mit dem Broadcast kommst man ohnehin nicht über das Subnetz hinaus, 
da die Vermittlung zwischen Subnetzen Sache des Routers (=Gateway) ist.
Gast #5731619
Lesenswert?

Oliver S. schrieb:
> 192.168.x.y. ist per Definition ein privates Klasse C Netz mit Maske
> 255.255.255.0.

Die Maske ist doch 255.255.0.0 ;-)

Allerdings kann dieser Bereich bei Bedarf weiter aufgeteilt werden, z.B. 
mit der Maske 255.255.255.0 in 254 Netze mit jeweils 254 IPs.

Wem das nicht reicht, der kann auch noch den Bereich 10.0.0.0/255.0.0.0 
nehmen.

Allerdings werden diese "privaten" Bereiche nicht gerouted, wenn der 
Router seinen Namen verdient.
#5731624
Lesenswert?

Oliver S. schrieb:
> 192.168.x.y. ist per Definition ein privates Klasse C Netz mit Maske
> 255.255.255.0.
>
> Insofern glaube ich das hier nicht:
>> Netzwerkadapter hat 192.168.0.2, Subnetz 255.255.0.0

Feste Klassen gibts schon sehr lange nicht mehr, weshalb 192.168. nicht 
auf /24 beschränkt ist. Insofern kann es auch sein, dass das Interface 
falsch definiert wurde.
Gast #5731631
Lesenswert?

Ein Diagramm des Netzwerks mit allen Routern, IP-Adressen und 
Subnetzmasken wäre wohl angebracht. Es klingt jedenfalls nach einer 
falschen Netz-Konfiguration; da kann man auf Anwendungsebene wenig 
machen. Die Anforderung "die Anwendung soll auch bei kaputtem Netzwerk 
kommunizieren können" ist nicht erfüllbar...
OP #5731641
Lesenswert?

Dr. Sommer schrieb:
> Es klingt jedenfalls nach einer
> falschen Netz-Konfiguration; da kann man auf Anwendungsebene wenig
> machen.

Die Geräte, die am Netzadapter angeschlossen werden können, können 
entweder den IP-Adressbereich 10.6.3.x, 10.6.2.x oder 192.168.0.x sowie 
192.168.1.x haben. Die in den geräten konfigurierte Subnetzmaske ist 
entweder 255.255.255.0 oder 255.255.0.0.

Das hat nichts mit falsch konfiguriert zu tun, denn jenachdem, wie der 
Adapter konfiguriert ist, kann auf die Geräte entweder zugegriffen 
werden, oder eben nicht. Antworten auf den UDP Broad/Multicast tun sie 
alle, nur ist - je nach Adaptereinstellungen - eben gar keine Verbindung 
möglich.

> Die Anforderung "die Anwendung soll auch bei kaputtem Netzwerk
> kommunizieren können" ist nicht erfüllbar...

Soll ja auch gar nicht. Ich möchte nur eine Vorabprüfung implementieren, 
die es erlaubt, vorweg zu sagen, ob es gehen kann, oder nicht. Um mehr 
geht es mir nicht.

Im Zuge dessen hat mich verwirrt, welche Subnetzmaske für die Prüfung 
herangezogen wird. Die des Netzwerkadapters oder die des Gerätes. 
Limitierende Komponente ist hier der Netzwerkadapter.
Gast #5731649
Lesenswert?

Martin S. schrieb:
> Soll ja auch gar nicht. Ich möchte nur eine Vorabprüfung implementieren,
> die es erlaubt, vorweg zu sagen, ob es gehen kann, oder nicht. Um mehr
> geht es mir nicht.

Das kann man den Adressen nicht ansehen. Du weißt ja nicht was für 
Router dazwischen hängen und welche Routing-Tabellen diese haben.
Gast #5731670
Lesenswert?

Martin S. schrieb:
> Kein Router. Direktverbindung. Höchstens ein Switch. Oder ein Hub. Kein
> Internet, kein DHCP, kein DNS, kein ...

In diesem Spezialfall vergleiche einfach ob die Subnetzmasken gleich 
sind und "IP-Adresse-Gerät & maske" == "IP-Adresse-Adapter & maske" 
ist. Außerdem musst du prüfen ob in der Routing-Tabelle ein Eintrag für 
das Zielnetz vorhanden ist, ebenso in der Routing-Tabelle vom Gerät. 
Zusätzlich musst du schauen ob nicht ein anderer 
Routing-Tabellen-Eintrag diesen überschreibt. Dann noch ob keine 
Firewall das heraus filtert usw.

Alternativ ein Ping-Paket senden und schauen ob die Antwort kommt.

Morgen ruft ein Kunde an dass er einen Router dazwischen hat und er das 
Gerät nicht erreichen kann, weil die Vorab-Prüfung ihn daran hindert :)
OP #5731672
Lesenswert?

A. K. schrieb:
> dabei seinen Sturkopf
> durchsetzt

Welchen Sturkopf? Was hättest Du gerne noch als Informationen?

Ich habe eine einfache Frage gestellt, bei der es vollkommen egal ist, 
welche Geräte, wie konfiguriert sind, denn die Frage war vielleicht mit 
praktischen Bezug, aber ganz allgemein zu verstehen.

Es ist nunmal leider in Foren oft so, dass der Kern des Gespräches 
irgendwohin abwandert und Details diskutiert werden, die gar nichts zur 
Sache tun. Was interessiert es für das Problem, welcher Kategorie 
welcher Adressbereich angehört?
#5731674
Lesenswert?

Dr. Sommer schrieb:
> Wie passiert denn sowas? Das ist m.W. gar nicht erlaubt
> (Fehlkonfiguration). Da muss mindestens ein Router zwischen sein. Kein
> Wunder dass das nicht funktioniert.

svensson schrieb:
> zwei unterschiedliche Subnetzmasken bedeuten immer, daß die Geräte in
> unterschiedlichen Subnetzen sind.

Martin S. schrieb:
> Es gibt keinen Router dazwischen. Es sind Direktverbindungen.


Du solltest dein Konzept nochmals überdenken...

Oliver
OP #5731686
Lesenswert?

Dr. Sommer schrieb:
> In diesem Spezialfall vergleiche einfach ob die Subnetzmasken gleich
> sind und "IP-Adresse-Gerät & maske" == "IP-Adresse-Adapter & maske"
> ist.

Obwohl die Verbindung (siehe Bilder) funktioniert, würde bei der Prüfung 
eine Verbindung als nicht möglich deklariert.

A. K. schrieb:
> Martin S. schrieb:
>> bei der es vollkommen egal ist, welche Geräte, wie konfiguriert sind,
>
> Nö.

Doch. Für eine Softwareprüfung ist das vollkommen egal.
Gast #5731693
Lesenswert?

Das sieht ja nach einer richtig fruchtbaren Diskussion aus...

Kleiner Crashkurs Subnetze:
Die Maske definiert, welche Geräte direkt miteinander sprechen können 
und welche über das (Default) Gateway gehen.

Beispiel:
Maske 255.255.255.0
IP    192.168.0.9

An den Stellen an denen die Maske 255 ist beschreibt der entsprechende 
Teil der IP das Netz, da wo die Maske 0 ist beschreibt der Teil der IP 
den individuellen Host. Andere Fälle berücksichtige ich hier mal nicht.

Für das o.g. Beispiel bedeutet das, dass alle Geräte mit Adressen von 
192.168.0.* direkt miteinender sprechen; alle anderen werden über ein 
Gateway erreicht.
Damit das sauber funktioniert müssen alle beteiligten Subnetzmasken 
gleich sein; ansonsten kommt es zu "Effekten"
OP #5731720
Lesenswert?

JJ schrieb:
> alle anderen werden über ein
> Gateway erreicht.

Ja aber welchen? Ich hab hier ja keinen und trotzdem geht die 
Kommunikation trotz der unterschiedlichen Subnetzmaske.

Also kommen da irgendwoher Routing informationen?!

Die Frage mit dem IP Check ist ja soweit beantwortet. Aber neugierig, 
warum es trotzdem geht, bin ich jetzt auch.
Gast #5731724
Lesenswert?

Martin S. schrieb:
> Ich hab hier ja keinen und trotzdem geht die
> Kommunikation trotz der unterschiedlichen Subnetzmaske.

Vermutlich pures Glück. Der PC sendet die Pakete wahrscheinlich ab in 
Erwartung dass ein Router sie weiterleitet. Es gibt aber keinen und sie 
kommen direkt an. Korrekt ist das aber so nicht.
OP #5731748
Lesenswert?

A. K. schrieb:
> Als Anfänger hatte ich einem Gerät mal die Adresse 255.255.255.255
> gegeben. Auch da hatte die Verbindung funktioniert. ;-)

Und das hat funktioniert?! Lustig :-)

Ich verstehe nun tatsächlich nicht, warum es bei mir funktioniert, 
obwohl das Subnetz ein anderes ist. Also entweder wird irgendwo die 
Anfrage ins andere Subnetz umgebogen, oder es gibt Ausnahmen von der 
Regel.
Gast #5731762
Lesenswert?

Beide IP-Adressen sind für beide Geräte im (jeweils) lokalen Subnetz, 
deswegen wird das Paket nicht an den default gateway geschickt, sondern 
ein arp request ausgelöst und direkt an die MAC des Zielgerätes 
gesendet. Ein 24-bit Subnetz schliesst logischerweise ein 16-bit 
supernet mit ein.
#5731765
Lesenswert?

Martin S. schrieb:
> Es gibt keinen Router dazwischen. Es sind Direktverbindungen. Der
> Zugriff von meinem Adapter mit größerem Adressbereich auf das Gerät mit
> eingeschränkterem läuft einwandfrei.

Da wird nichts heimlich „umgebogen“. In der Richtung sieht der Adapter 
ja nur ein Subnetz mit Maske 255.255.0.0, und in dem liegt auch die 
Adresse 192.168.0.100. Ergo ist für den alles in Ordnung, ganz ohne 
Router.

Die andere Richtung tuts halt nicht.

Oliver
Gast #5732413
Lesenswert?

Martin S. schrieb:

> Kein Router. Direktverbindung. Höchstens ein Switch. Oder ein Hub.

Dann ist die IP-Kommunikation genau dann möglich, wenn beide Enden den 
Peer in ihrem jeweiligen Subnetz sehen. Dazu muss man das Subnetz des 
Peers natürlich kennen. Kennt man nur dessen Adresse, kann man nur 
ermitteln, ob die eigenen Pakete dort ankommen würden, aber nicht, ob 
dessen Antwortpakete auch den Weg zurück finden könnten.
Gast #5732869
Lesenswert?

Martin S. schrieb:
> Es gibt keinen Router dazwischen. Es sind Direktverbindungen. Der
> Zugriff von meinem Adapter mit größerem Adressbereich auf das Gerät mit
> eingeschränkterem läuft einwandfrei.

Wie schon mehrfach gesagt, das es Funktioniert ist purer Zufall und, 
wahrscheinlich auch nur wenn Kommunikation im 24 Subnetz begonnen wird. 
Vielleicht "hilft" hier der arp cache des OS das es zu gehen scheint. 
Sauber ist es nicht und früher oder später bekommst du paar komische 
Netzwerk Probleme von daher empfehle ich dir die Subnetmask unbedingt im 
kompletten Netz identisch zu setzen.
OP #5733064
Lesenswert?

imonbln schrieb:
> Wie schon mehrfach gesagt, das es Funktioniert ist purer Zufall und,
> wahrscheinlich auch nur wenn Kommunikation im 24 Subnetz begonnen wird.

Ich glaube Dir das sehr gerne, würde es aber verstehen wollen.

Hier mal ein Auszug aus der Kommunikation. Diese beginnt von 10.6.3.10 
bzw. 192.168.1.10 und schickt eine definierte Anfrage an alle Geräte. 
Auf diese antworten diese dann, mit einer Identifikation (im UDP Paket). 
Man sieht auch einen Zugriff via ARP Protkoll - den habe ich bisher auch 
nicht wirklich verstanden.

Bin für Erklärungen offen :-)
Angehängte Dateien:
#5733314
Lesenswert?

Martin S. schrieb:
> vn n. schrieb:
>> Welche Adressen haben die Teilnehmer?
>
> Ich hab die Bilder weiter oben mit den Geräteadressen gepostet.

Warum auch immer man sowas als Bild postet...

BTT:
An der Subnetzmaske erkennt der Teilnehmer, ob das Gegenüber im eigenen 
Netz ist (und er direkt mit ihm reden kann), oder ob die Kommunikation 
über ein Gateway geleitet werden muss.
10.6.3.10/16 nach 10.6.3.39: funktioniert, das gemeinsame Netz ist 
10.6/16
10.6.3.39/24 nach 10.6.3.10: funktioniert, das gemeinsame Netz ist 
10.6.3/24

Stricken wir das ganze etwas weiter, und lassen wir die Subnetzmaske so 
wie bei dir, ändern aber die Adresse des Gerätes:
10.6.3.10/16 nach 10.6.4.39: funktioniert, das gemeinsame Netz ist 
10.6/16
10.6.4.39/24 nach 10.6.3.10: funktioniert nicht, das gemeinsame Netz aus 
Sicht des Senders ist 10.6.4/24, 10.6.3.10 liegt da nicht drinnen

Ändern wir jetzt auch die Subnetzmaske des Gerätes so, wie sie 
eigentlich gehört:
10.6.3.10/16 nach 10.6.4.39: funktioniert, das gemeinsame Netz ist 
10.6/16
10.6.4.39/16 nach 10.6.3.10: funktioniert, das gemeinsame Netz ist 
10.6/16

Man sieht, die Kommunikation ist nicht darauf angewiesen, dass beide 
Teilnehmer die gleiche Netzmaske haben. Es reicht, wenn die beiden 
Adressen aus Sicht des Teilnehmers mit dem kleinsten konfigurierten Netz 
(kleinste Anzahl an Nullen in der Netzmaske) im gleichen Netz liegen.
Unterschiedliche Netzmasken sind allerdings sehr unschön, und können zu 
langwieriger Fehlersuche führen, weshalb sie im Idealfall zu unterlassen 
sind.
1
// check if the destination address is on the local network
2
if (packet.destination_ip & host.mask == host.ip & host.mask){
3
    // destination in local network
4
}
5
else {
6
    // destination ni other network, use gateway
7
}

imonbln schrieb:
> Wie schon mehrfach gesagt, das es Funktioniert ist purer Zufall und,
> wahrscheinlich auch nur wenn Kommunikation im 24 Subnetz begonnen wird.
> Vielleicht "hilft" hier der arp cache des OS das es zu gehen scheint.

Bullshit.
Ja, es ist unschön und fehleranfällig, aber mit den konkret gewählten 
Adressen kein Zufall! In vielen anderen Szenarien funktioniert es 
natürlich nicht, oder (implementierungsabhängig) zufällig, aber dieses 
ist kein solches!

Würde jeder bei den Themen bleiben, wo er sich auskennt...

Martin S. schrieb:
> Ich glaube Dir das sehr gerne, würde es aber verstehen wollen.

Er liegt falsch, musst du also nicht verstehen.

Martin S. schrieb:
> Man sieht auch einen Zugriff via ARP Protkoll - den habe ich bisher auch
> nicht wirklich verstanden.

ARP löst die IP-Adresse in eine MAC-Adresse auf.
OP #5733337
Lesenswert?

Hi,

vielen Dank für Deine ausführliche Erklärung.

Was mich jetzt an dem Log vom Wireshark interessiert: Dort steht "Who 
has 192.168.1.154? Tell 10.6.3.39" (das ist die erste IP des Adapters) - 
biegt da jetzt Windows den Datenstrom um? Denn eigentlich kann ja 
192.168.1.154 den Empfänger 10.6.3.39 gar nicht erreichen, da komplett 
falsches Subnetz, oder?

Dass die unterschiedlichen Subnetzmasken sch**** sind, ist mir auch 
klar. Allerdings lässt sich das nicht so ohne weiteres lösen. Dafür 
wären Firmwareupdates der Geräte notwendig, die auf Grund von 
Kundenzertifizierungen aber sehr langwierig sind (> 1 Jahr). Daher muss 
ich damit leben und verstehen, was genau passiert, und wie ich meinen 
Teil so gestalten muss, dass es geht, auch wenn mir die Lösung nicht 
gefällt.

Interssanterweise antworten beide Geräte auf den UPD-Broadcast egal von 
welcher Adapter IP er gesendet wird. Ist das jetzt nur bei mir so, weil 
ich nur eine physikalische Netzwerkhardware habe oder ist das eine 
Windows-Eigenheit? Es wäre ja furchtbar, wenn alle Geräte der Welt auf 
einen Broadcast antworten würde, wenn ich einen auf die Netzwerkkarte am 
Internet schicken würde :-)
Gast #5733372
Lesenswert?

Martin S. schrieb:
> Hi,
>
> vielen Dank für Deine ausführliche Erklärung.
>
> Was mich jetzt an dem Log vom Wireshark interessiert: Dort steht "Who
> has 192.168.1.154? Tell 10.6.3.39" (das ist die erste IP des Adapters) -
> biegt da jetzt Windows den Datenstrom um? Denn eigentlich kann ja
> 192.168.1.154 den Empfänger 10.6.3.39 gar nicht erreichen, da komplett
> falsches Subnetz, oder?

Ja, das ergibt eigentlich keinen Sinn. Vielleicht ein Bug in wireshark 
oder Windows, der die erste IP-Adresse der Netzwerkkarte angibt? Denn 
wenn ich dich richtig verstehe, hast du einer Netzwerkkarte zwei 
IP-Adressen gegeben?

> Dass die unterschiedlichen Subnetzmasken sch**** sind, ist mir auch
> klar. Allerdings lässt sich das nicht so ohne weiteres lösen.

Kannst du die Subnetzmaske für das 10.6-er Netzwerk am PC nicht auf 
255.255.255.0 (bzw. /24) umstellen? Das würde dann doch zu dem 
10.6.3er-Netzwerk auf dem Gerät passen?

MfG, Arno
Gast #5733382
Lesenswert?

Martin S. schrieb:
> Die Geräte, die am Netzadapter angeschlossen werden können, können
> entweder den IP-Adressbereich 10.6.3.x, 10.6.2.x oder 192.168.0.x sowie
> 192.168.1.x haben. Die in den geräten konfigurierte Subnetzmaske ist
> entweder 255.255.255.0 oder 255.255.0.0.

Langsam dämmert da was: Du möchtest einen Netzwerkadapter für 
verschiedene Netze benutzen? Dabei wird aber immer nur ein Netzwerk 
gleichzeitig verwendet.

Das geht auch unter Windows:

https://www.heise.de/ct/hotline/Eine-Netzwerkkarte-zwei-Adressen-320866.html

Die dort genannte Möglichkeit, einfach einen Switch zu verwenden, 
scheint nur in abgeschlossenen Umgebungen praktikabel.
Gast #5733412
Lesenswert?

Mit vier Netzadressen müßtest Du eigentlich hinkommen:

10.6.3.x, 255.255.255.0
10.6.2.x, 255.255.255.0
192.168.0.x, 255.255.255.0
192.168.1.x, 255.255.255.0

Schön ist das zwar nicht, dürfte aber für diesen speziellen Fall 
funktionieren.
Allerdings sollte diese Konfiguration der Netzwerkkarte vom "normalen" 
Netzwerk ferngehalten werden.
#5734139
Lesenswert?

Martin S. schrieb:
> Dort steht "Who has 192.168.1.154? Tell 10.6.3.39"
> (das ist die erste IP des Adapters) - biegt da jetzt Windows
> den Datenstrom um?

Windows sucht nach 192.168.1.154 und falls den jemand kennt, soll er es 
dir (10.6.3.39) sagen. Falls da tatsächlich jemand drauf antwortet, 
kannst du lokal kommunizieren. Da kein Gateway vorhanden ist, ist das 
eine möglicherweise sinnvolle Fallback-Lösung.

> Denn eigentlich kann ja 192.168.1.154 den Empfänger
> 10.6.3.39 gar nicht erreichen, da komplett falsches Subnetz, oder?

Wenn kein Gateway vorhanden ist, die Adressen aber eigentlich über ein 
Gateway gehen müssten, kann man ja trotzdem versuchsweise in der 
Umgebung fragen. Würde mich nicht wundern, wenn Windows das tut.

Es gibt auch einige Netzwerkgeräte (ATAs und so), die mit einer 
statischen Konfiguration hochkommen und mit so einem Fallback kann man 
die dann konfigurieren, ohne seine eigene Netzwerkkonfiguration komplett 
über den Haufen schmeißen zu müssen.
(Firma: Papier & Knalltüten Manufaktur) #5734146
Lesenswert?

Martin S. schrieb:
> Dem Beitrag folgend möchte ich die Adressen prüfen.
>
> Netzwerkadapter hat 192.168.0.2, Subnetz 255.255.0.0
> Gerät hat 192.168.0.100, Subnetz ist 255.255.255.0
>
> Die Funktion "IsInSameSubnet" akzeptiert aber nur eine Subnetzmaske.
> Aber müssen nicht beide berücksichtigt werden?
>
> Irgendwie blicke ich da nicht ganz durch.

https://www.heise.de/netze/tools/netzwerkrechner/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren