현재 위치: > 최신 기사 목록> Socket_accept () 서비스에서 IP 화이트리스트 필터링 메커니즘을 구현하십시오

Socket_accept () 서비스에서 IP 화이트리스트 필터링 메커니즘을 구현하십시오

M66 2025-05-28

PHP를 사용하여 소켓 기반 서버 프로그램을 작성할 때 Socket_accept ()는 클라이언트 연결을 수락하는 핵심 기능입니다. 이 기능은 매우 실용적이지만 액세스 제어 기능은 없습니다. 서비스가 특정 IP 주소 만 연결하도록 허용하려면 IP 화이트리스트 필터링 메커니즘을 직접 구현해야합니다.

이 기사는 Socket_accept ()를 사용하여 서비스에 IP 화이트리스트 기능을 추가하는 방법을 자세히 소개하여 서비스 보안 및 제어 기능을 향상시킵니다.

기본 소켓 서비스 구조

먼저 socket_accept ()를 사용하여 일반적인 기본 소켓 서비스 구조를 살펴 보겠습니다.

 $host = '0.0.0.0';
$port = 12345;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

echo "서버가 시작되었습니다,포트를 들어보세요 $port...\n";

while (true) {
    $clientSocket = socket_accept($socket);
    // 여기에 추가합니다 IP 화이트리스트 필터링 로직
}

기본적으로 위의 코드는 모든 클라이언트의 연결 요청이 무제한으로 수락됩니다. IP 화이트리스트 컨트롤에 가입하려면 socket_getpeername ()을 사용하여 socket_accept () 이후 클라이언트 IP를 얻은 다음 IP가 화이트리스트에 있는지 여부를 결정해야합니다.

IP 화이트리스트 필터링 로직을 추가하십시오

다음은 간단한 화이트리스트 메커니즘을 추가하는 수정 된 코드입니다.

 $host = '0.0.0.0';
$port = 12345;

// IP 화이트리스트
$whitelist = [
    '192.168.1.100',
    '203.0.113.45',
    '198.51.100.23'
];

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

echo "서버가 시작되었습니다,포트를 들어보세요 $port...\n";

while (true) {
    $clientSocket = socket_accept($socket);
    
    if ($clientSocket === false) {
        continue;
    }

    socket_getpeername($clientSocket, $clientIp);

    if (!in_array($clientIp, $whitelist)) {
        echo "거부 $clientIp 연결。\n";
        socket_close($clientSocket);
        continue;
    }

    echo "수락 $clientIp 연결。\n";

    // 클라이언트 요청 로직은 여기에서 처리됩니다
    $welcomeMsg = "방문에 오신 것을 환영합니다 m66.net 서비스。\n";
    socket_write($clientSocket, $welcomeMsg, strlen($welcomeMsg));

    socket_close($clientSocket);
}

키 노트

  1. socket_getPeername () :이 함수는 연결된 클라이언트의 IP 주소를 얻는 데 사용됩니다.

  2. 화이트리스트 배열 : 액세스 할 수있는 IP 주소를 $ Whitelist 배열에 넣을 수 있습니다.

  3. 연결 제어 : 화이트리스트에없는 IP의 경우 Socket_close ()를 직접 사용하여 연결을 끊습니다.

안전 팁

  • 코드의 하드 코드를 하드 코드하는 것은 권장되지 않으며 실제 배포 중에 데이터베이스 또는 구성 파일에서 동적으로로드 할 수 있습니다.

  • 불법 연결 시도를 추적하기 위해 로깅 기능을 추가하는 것을 고려할 수 있습니다.

요약

Socket_accept () 후 IP 화이트리스트 검증 로직을 추가하면 무단 액세스를 효과적으로 제한하고 PHP 소켓 서비스의 보안을 개선 할 수 있습니다. 위의 예는 CIDR 범위 추가, IPv6 주소 지원 등과 같은 실제 요구에 따라 개발자가 확장 할 수있는 가장 기본적인 구현 방법을 보여줍니다.

외부 세계에 서비스를 제공하는 PHP 소켓 프로그램을 구축 할 때는 "첫 번째 방어선"을 유지하고 신뢰할 수없는 클라이언트가 시스템에 쉽게 액세스 할 수 없습니다. 이 기사가 도움이되기를 바랍니다!