sockaddr - drucken Sie alle Informationen, die sa_data enthält - c++
in meiner c++ Anwendung, die ich' mit sockaddr. Ich möchte sehen, alle die infarmation die sockaddr.sa_data[14] gilt. für die ich jetzt drucken Sie einfach die ip von sa_data[2].sa_data[3].sa_data[4].sa_data[5].
Ich ausdrucken wollen, in einer Weise, die ich verstehen kann (und bitte erläutern Sie) alle Informationen, die in der sa_data 14 bytes.
Hilfe?
Dank!
InformationsquelleAutor gln | 2010-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit wäre die Verwendung
inet_ntop
, die sollten in der Lage sein zu handhaben IPv4-und IPv6-Adressen. Es produziert einen für Menschen lesbaren string mit der Adresse.InformationsquelleAutor Mark Wilkins
In der sa_data Mitglied, für IPv4 unter Windows habe ich festgestellt, dass die ersten zwei bytes halten Sie die port-Nummer, und die nächsten vier halten Sie die IP-Adresse.
Wenn ich zum Beispiel lösen Sie die Adresse
228.0.0.1:9995
, die sa_data Mitglied ist...Hier
270b
ist der Hex-Wert-Darstellung von 9995 in den ersten zwei bytes. Die nächsten vier bytes der IP-Adresse, wo0xe4
228, dann zwei Nullen, dann0x01
oder 228 0 0 1.Die letzten acht bytes sind unbenutzt, deckt sich mit dem Kommentar oben nur die ersten sechs bytes werden verwendet.
Beachten Sie, dass sa_data variieren in format mit dem Protokoll verwendet wird.
InformationsquelleAutor Steve Hibbert
den Wert der sa_data ist die 14 bytes geändert wird(sind verschiedene) basierend auf der Adresse der Familie : sa_family.
wenn das die Adresse ist Familie AF_INET die ersten beiden bytes, port-Nummer und die nächsten 4 bytes wird die Quell-ip-Adresse.
wenn die die Adresse der Familie ist PF_PACKET die ersten zwei Byte teilt dem Ethernet-Typ(welken 0800--> IP, 0806 --> ARP etc..) und die nächsten 4 bytes (der erste ist genug) es erzählt die source-Schnittstelle. wenn der Wert ist:
die letzten 8 Byte sind unbenutzt in der AF_INET-Familie, aber in der PF_PACKET ich nicht herausfinden.
InformationsquelleAutor hailelil
gedruckt wird jedes element als int mit einem Leerzeichen getrennt. Sie können auch verwenden, unsigned int, wenn Sie nicht möchten, dass negative Werte und man kann iomanip Ihren stream zu print hex wenn Sie es vorziehen, dass.
InformationsquelleAutor CashCow
Die Informationen in
sockaddr
hängt davon ab, was socket-Familie und das Protokoll, das Sie verwenden.Wenn Sie IPv4 verwenden, das richtige ist das wirken des
sockaddr
Zeiger aufsockaddr_in *
. Nur die ersten 6 bytes der Adresse sind sinnvoll, wenn Sie IPv4 verwenden. Der rest sollte einfach ignoriert werden.InformationsquelleAutor Jason Orendorff
Zu bekommen und drucken Sie die
sa_data member
desstruct sockaddr
bitte beziehen Sie sich auf John ' s Antwort auf Erste IPV4-Adresse, eine sockaddr-StrukturInformationsquelleAutor user3731622