현재 위치: > 최신 기사 목록> FSOCCKOPEN 기능을 통해 원격 서버 포트가 열려 있는지 여부를 감지하는 방법은 무엇입니까? 특정 작업 단계는 무엇입니까?

FSOCCKOPEN 기능을 통해 원격 서버 포트가 열려 있는지 여부를 감지하는 방법은 무엇입니까? 특정 작업 단계는 무엇입니까?

gitbox 2025-05-29

일일 개발에서는 웹 서비스 (예 : 80, 443), 데이터베이스 서비스 (예 : 3306, 5432) 또는 사용자 정의 포트가 정상적으로 실행되는지 확인하는 것과 같은 원격 서버의 특정 포트가 열려 있는지 확인해야합니다. FSOCCKOPEN () 은 소켓 연결을 설정하는 데 사용할 수있는 PHP가 제공하는 기본 기능으로 간단한 포트 프로브에 사용할 수 있습니다.

이 기사는 FSOCCKOPEN () 함수를 사용하여 원격 서버 포트가 열려 있는지 여부를 감지하고 특정 구현 단계 및 예방 조치를 제공하는 방법을 소개합니다.


1. fsocckopen () 란 무엇입니까?

fsocckopen () 은 네트워크 연결 또는 UNIX 소켓 연결을 열는 데 사용되는 기능입니다. 구문은 다음과 같습니다.

 resource|false fsockopen(
    string $hostname,
    int $port,
    int &$error_code = null,
    string &$error_message = null,
    float $timeout = ini_get("default_socket_timeout")
)

매개 변수 설명 :

  • $ hostname : 도메인 이름 또는 IP 주소가 될 수있는 대상 호스트.

  • $ 포트 : 연결할 포트 번호.

  • $ error_code (선택 사항) : 연결이 실패하면 오류 코드입니다.

  • $ ERROR_MESSAGE (선택 사항) : 연결 실패시 오류 메시지.

  • $ 타임 아웃 (선택 사항) : 연결 시간 초과 (초).


2. 포트가 열려 있는지 감지하는 핵심 논리

우리는 fsocckopen () 을 통해 지정된 주소의 포트에 연결하려고합니다. 연결이 성공하면 포트가 열려 있다고 생각할 수 있습니다. 그렇지 않으면 포트가 닫히는 것으로 간주되거나 호스트는 도달 할 수 없습니다.

샘플 코드 :

 <?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;
    }
}

// 예:시험 gitbox.net ~의 443 포트가 열려 있습니까?
$host = 'gitbox.net';
$port = 443;

if (isPortOpen($host, $port)) {
    echo "포트 {$port} 존재하다 {$host} 上是开放~의。";
} else {
    echo "포트 {$port} 존재하다 {$host} 개방적이거나 도달 할 수 없습니다。";
}

3. 작동 단계에 대한 자세한 설명

  1. 대상 호스트와 포트 번호를 정의하십시오 gitbox.net443 과 같이 감지하려는 서버 주소와 포트를 결정하십시오.

  2. fsocckopen () <br>를 사용하여 연결하려고합니다 @fsocopen ()을 사용하여 기본 오류 출력을 억제하고 반환 값으로 연결이 성공했는지 확인하십시오.

  3. 연결 연결 결과

    • 성공 : 포트가 열려 있음을 의미합니다.

    • 실패 : 포트가 열려 있지 않음을 나타냅니다. 이는 서버 방화벽으로 인한 것일 수 있거나 포트가 듣지 않을 수 있습니다.

  4. 연결 자원을 닫습니다 <br> 연결이 성공하면 fclose ()를 사용하여 연결 리소스를 닫으려면 리소스 누출을 피해야합니다.


4. 해당 시나리오

  • 웹 사이트 모니터링 시스템에서 서비스 포트가 정상인지 정기적으로 확인하십시오.

  • 자동화 된 배포 도구에서 대상 서비스가 준비되었는지 확인하십시오.

  • 지역 개발 및 디버깅 중에 포트 접근성을 신속하게 감지합니다.

  • 작동 및 유지 보수 도구 스크립트에서 포트 감지 기능을 통합합니다.


5. 주목할만한 것들

  • fsocopen ()은 높은 동시 동반 포트 감지 시나리오에 적합하지 않으며 그 효율은 상대적으로 낮습니다.

  • 일부 서버 구성에서는 보안 정책으로 인해이 기능이 금지 될 수 있습니다.

  • @를 사용하여 오류 출력을 억제 할 때 예외를 잘 처리해야합니다.

  • 감지 된 서버는 IP 화이트리스트, 방화벽 등으로 구성되어 감지 결과에 영향을 미칩니다.