Im Allgemeinen können Sie es nicht tun.
Im Prinzip sollte ein Host mit einem geschlossenen Port einen ICMP-Port zurückschicken, der nicht erreichbar ist. Aber sie tun es oft nicht; Ebenso sendet ein ausgefallener oder unzugänglicher Host keine solche Nachricht. Auch einige Firewalls blockieren die Nachricht.
Das Abrufen des Fehlers ist ebenfalls problematisch. Linux hat eine wohldefinierte, aber verwirrende Semantik zum Abrufen von Fehlern in Sockets (für einige Informationen siehe die verschiedenen man-Seiten, socket (7), ip (7) und udp (7)). Manchmal wird ein früherer Fehler angezeigt, wenn Sie beispielsweise eine nicht verwandte sendto() -Funktion ausführen. Andere Betriebssysteme haben leicht unterschiedliche Mechanismen zum Abrufen bestimmter Socket-Fehler.
Wenn es garantiert ist, ein bestimmtes Protokoll auf dem anderen Port zu sein, können Sie ein Paket senden, das eine bestimmte Antwort auslösen sollte (wenn es Ihr eigenes Protokoll ist, können Sie einen Nachrichtentyp "bist du da" hinzufügen), dann kannst du das benutzen. Aber im Allgemeinen hängt es von der Anwendung ab, ob eine Antwort generiert wird, und Sie können nicht unterscheiden zwischen einem Port, auf dem nichts zuhören kann, und einem Port mit etwas, der nicht auf Sie reagiert.
Sorry für das fragen aber wie kann ich sehen, ob es mir den ICMP-Port-unerreichbar gesendet hat? Vielen Dank. – Marian
@Marian: Kannst du noch eine Frage dazu stellen? Ich würde es auch gerne wissen. –
Ich glaube eigentlich nicht, dass es sich lohnt, den ICMP-Port zu erkennen - unerreichbar, weil er nicht ankommen könnte. Dies trifft insbesondere auf Computer zu, auf denen "Personal Firewall" -Produkte installiert sind, die dazu neigen, solche nützlichen Dinge für (meist) fehlgeleitete Sicherheitsgründe zu blockieren. – MarkR