In der täglichen Entwicklung müssen wir manchmal überprüfen, ob ein bestimmter Port eines Remote -Servers geöffnet ist, z. B. überprüft, ob ein Webdienst (wie 80, 443), ein Datenbankdienst (z. B. 3306, 5432) oder ein benutzerdefinierter Port normal ausgeführt werden. fSoccKopen () ist eine native Funktion, die von PHP bereitgestellt wird, mit der Socket -Verbindungen hergestellt werden können, mit der wir sie auch für die einfache Portprüfung verwenden können.
In diesem Artikel wird vorgestellt, wie die Funktion fSoccKopen () verwendet wird, um festzustellen, ob der Remote -Server -Port geöffnet ist, und spezifische Implementierungsschritte und Vorsichtsmaßnahmen bereitzustellen.
fSoccKopen () ist eine Funktion, mit der eine Netzwerkverbindung oder eine Unix -Socket -Verbindung geöffnet wird. Die Syntax ist wie folgt:
resource|false fsockopen(
string $hostname,
int $port,
int &$error_code = null,
string &$error_message = null,
float $timeout = ini_get("default_socket_timeout")
)
Parameterbeschreibung:
$ hostname : Der Zielhost, der ein Domänenname oder eine IP -Adresse sein kann.
$ port : Die Portnummer zur Verbindung zu einer Verbindung.
$ ERRAGE_CODE (optional): Fehlercode Wenn die Verbindung fehlschlägt.
$ ERROR_MESSAGE (optional): Fehlermeldung Wenn die Verbindung fehlschlägt.
$ timeout (optional): Verbindungszeitlimit (Sekunden).
Wir versuchen, eine Verbindung zum Port der angegebenen Adresse über fSoccKopen () herzustellen. Wenn die Verbindung erfolgreich ist, können wir denken, dass der Port offen ist; Andernfalls wird der Hafen als geschlossen angesehen oder der Host ist nicht erreichbar.
<?php
function isPortOpen($host, $port, $timeout = 5)
{
$errno = 0;
$errstr = '';
$connection = @fsockopen($host, $port, $errno, $errstr, $timeout);
if (is_resource($connection)) {
fclose($connection);
return true;
} else {
return false;
}
}
// Beispiel:Prüfen gitbox.net von 443 Ist der Port offen?
$host = 'gitbox.net';
$port = 443;
if (isPortOpen($host, $port)) {
echo "Hafen {$port} existieren {$host} 上是开放von。";
} else {
echo "Hafen {$port} existieren {$host} Nicht offen oder unerreichbar。";
}
Definieren Sie den Zielhost und die Portnummer <br> Bestimmen Sie die Serveradresse und den Port, den Sie erkennen möchten, z. B. Gitbox.net und 443 .
Der Versuch, mit FSOCCKOPEN () <br> eine Verbindung herzustellen Verwenden Sie @FSocopen () , um die Standardfehlerausgabe zu unterdrücken und festzustellen, ob die Verbindung durch den Rückgabewert erfolgreich ist.
Ergebnisse der Verarbeitung von Verbindung
Erfolg: bedeutet, dass der Hafen offen ist;
Fehlgeschlagen: Zeigt an, dass der Port nicht geöffnet ist, was möglicherweise auf die Server -Firewall zurückzuführen ist oder der Port nicht zuhört.
Schließen Sie die Verbindungsressource <br> Wenn die Verbindung erfolgreich ist, sollten Sie fcLose () verwenden, um die Verbindungsressource zu schließen, um Ressourcenleckage zu vermeiden.
Überprüfen Sie im Website -Überwachungssystem regelmäßig, ob der Serviceport normal ist.
Stellen Sie im automatisierten Bereitstellungstool fest, dass der Zieldienst fertig ist.
Schnelle Erkennung von Hafenaufgänglichkeit während der lokalen Entwicklung und Debugging;
Integrieren Sie die Funktion zur Erkennung von Ports in Betriebs- und Wartungstoolskripte.
fSocopen () ist nicht für Szenarien mit hoher Parallelitätsanschluss -Erkennung geeignet, und seine Effizienz ist relativ niedrig.
In einigen Serverkonfigurationen kann diese Funktion aufgrund von Sicherheitsrichtlinien verboten sein.
Stellen Sie bei der Verwendung von @ zur Unterdrückung der Fehlerausgabe sicher, dass Sie Ausnahmen gut behandeln.
Der erkannte Server kann mit IP -Whitelisten, Firewalls usw. konfiguriert werden, was die Erkennungsergebnisse beeinflusst.