Ich schreibe ein Client/Server-Programm mit C-Sockets. Ich gebe an, dass der Server auf jedem Netzwerk-Interface mit INADDR_ANY in sockaddr_in.sin_addr.s_addr abhören kann. Dies entspricht einer IP von 0.0.0.0. Ist es mir möglich, die tatsächliche IP-Adresse zu erhalten, die der Server überwacht? (z. B. 192.168.1.100)C Hole IP für den Abhörserver
Antwort
Ich konnte endlich eine solution that works finden.
Bearbeiten: Verbindung ist tot, so siehe: Internet Archive link.
Hoffentlich kann es für andere hilfreich sein, wie es für mich war.
Ich hoffe, dass Sie keine IPv6-Unterstützung benötigen, weil dies nicht für IPv6 funktioniert. –
Nein, das tue ich nicht. Aber es könnte denen helfen, die es tun, wenn Sie erklären, warum es nicht geeignet ist. Ich denke, die verwendeten Funktionsaufrufe haben IPv6-Äquivalente. – Gigi
Die 'getaddrinfo'-Funktion ([linux docs] (http://linux.about.com/library/cmd/blcmdl3_getaddrinfo.htm), [Windows-Dokumentation] (http://msdn.microsoft.com/en-us/) Bibliothek/Windows/Desktop/ms738520 (v = vs.85) .aspx)) ist IPv6-aware und führt die gleiche Funktion aus. –
Wenn Sie einen abhörenden Socket an INADDR_ANY
binden, überwacht der Socket alle verfügbaren lokalen IP-Adressen. Es gibt keine Möglichkeit, aus dem Socket zu ermitteln, welche IP (s) es abgehört hat. Wenn Sie diese Informationen benötigen, müssen Sie die lokalen IP-Adressen separat aufzählen (in diesem Fall können Sie einfach jede IP einzeln an ihren eigenen Socket senden, wenn Sie die Pre-Accept-Bindungsdetails erneut abrufen müssen). Sobald jedoch accept()
eine bestehende Clientverbindung zurückgegeben hat, können Sie getsockname()
auf dem akzeptierten Socket verwenden, um zu erfahren, welche bestimmte IP die Verbindung akzeptiert hat.
- 1. Hole System-IP und Port für DB2 ODBC DSN
- 2. C# HtmlAgilityPack Hole Tabelle
- 3. Hole Lua Tischgröße in C
- 4. Hole Tabellenalias von Zend_Db_Table_Select
- 5. libvirt: hole ipv4-Adresse von Gast
- 6. Java TCP Hole Punching
- 7. Hole Icons von meinem System
- 8. Client-IP mit C#
- 9. Einfache Client/Server, TCP/IP, um den Nachrichtenstrom, SSL (C++)
- 10. C++ IP-Adresse lesbares Formular
- 11. Hole Domain von IFrame?
- 12. Hole UUID ohne iTunes
- 13. OS X Hole markierten Text
- 14. Wie hole ich den Eintragstext in einem anderen Fenster?
- 15. Wie hole ich den Wert der Adressleiste mit einem '+' Zeichen?
- 16. Positionserkennungstechniken für IP-Adressen
- 17. Wie hole ich MIDI-Input-Daten in C++?
- 18. Ganzzahl an IP-Adresse - C
- 19. Objective-c TCP/IP-Client
- 20. C# Get-Computername von IP
- 21. Gibt es Open Source für den Ip Tunnel?
- 22. C++ Linux getpeername IP Familie
- 23. Wie hole ich die beiden besten Produkte für jeden Produkttyp?
- 24. Was bedeutet ## für den C (C++) Präprozessor?
- 25. BASH-Label für IP-Adressen
- 26. Proxy-IP für Scrapy-Framework
- 27. Maskiertes Textfeld für IP-Adresse
- 28. IP-Adresse Suchalgorithmus oder Bibliothek in C
- 29. C-Bibliotheken für den Verzeichniszugriff
- 30. Hole Checkbox-Werte ohne ID JQuery
Bevor oder nachdem eine Verbindung hergestellt wurde? Der Server könnte mehrere Adressen abhören. – blueshift
Vorher. In meinem Fall werde ich nur eine IP haben. Nur dass ich das System entscheiden lasse. Aber ich will immer noch wissen, was es entscheidet. – Gigi
Der Server wird * alle * Schnittstellen abhören, die verfügbar sind. Auch eine einzelne Schnittstelle kann mehrere IP-Adressen haben. –