현재 위치: > 최신 기사 목록> fsocopen을 사용하여 원격 서버 포트가 열려 있는지 여부를 감지하십시오.

fsocopen을 사용하여 원격 서버 포트가 열려 있는지 여부를 감지하십시오.

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 화이트리스트, 방화벽 등으로 구성되어 감지 결과에 영향을 미칩니다.