Standard/sichere Weg, um zu überprüfen, ob IP-Adresse im range/Subnetz

Habe ich ein kleines Stück code, konvertiert ein 32-bit unsigned integer (ie: uint32_t) in eine Reihe von vier 8-bit-Felder, behandelt Sie wie eine IP-Adresse und die Berichte dann an den client, wenn es fällt, innerhalb eines vorbestimmten Bereichs von IP-Adressen.

Habe ich schon gefunden ein paar verschiedene Beispiele von code in C, die mir zeigt, wie man die IP-Adresse eines Clients aus der struct sockaddr_in, die es enthält, zusammen mit einem C# - Antwort. Allerdings würde ich gerne brechen die Adresse ein bisschen weiter, halten Sie es in reinem C, und wollte ein paar schnelle Dinge:

  1. Ist die interne Darstellung konsistent von system zu system, oder muss ich Sie jemals brauchen werden, zu tun Endian-ness überprüft/Korrektur auf die s_addr Feld?
  2. Gibt es standard-Makros entlang der Linien von CLASS_C_NETMASK, CLASS_B_NETMASK usw, das wäre besser geeignet als die Verwendung von manuell erzeugten Masken (ie: 0xFF000000, 0x00FF0000 etc).
  3. Gibt es bereits Funktionen in der sockets-Bibliothek, die nicht prüft, ob eine IP-Adresse ist in einen Bereich von IP-Adressen oder passt die Subnetz-Maske?

Dank.

  • s_addr ist immer in "network byte order", das ist big-endian.
  • Sie können nicht schief gehen auf der Suche auf Beej ' s Guide to Network Programming. Fügen Sie, dass Ihre Liste von Referenzen/Beispiele zu überprüfen. (seine anderen guides sind auch gut)
InformationsquelleAutor Cloud | 2015-06-25
Schreibe einen Kommentar