Linux 에서 특정 네트워크 소켓이 열려 있는지 확인하는 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 에서 특정 네트워크 소켓이 열려 있는지 확인하는 방법을 배우게 됩니다. 활성 네트워크 소켓을 식별하고 검사하는 방법을 이해하는 것은 네트워크 문제 해결 및 모니터링을 위한 기본적인 기술입니다.

실습을 통해 ssnetstat과 같은 강력한 명령줄 도구를 사용하여 네트워크 연결을 나열하고 필터링합니다. 또한 /proc/net 파일 시스템을 탐색하여 소켓 세부 정보를 더 깊이 이해함으로써 시스템에서 네트워크 소켓의 상태를 확인하는 포괄적인 접근 방식을 제공합니다.

ss -tuln 으로 소켓 확인

이 단계에서는 ss 명령을 사용하여 Linux 시스템의 네트워크 소켓을 검사하는 방법을 배우게 됩니다. 소켓은 네트워크를 통해 데이터를 송수신하기 위한 엔드포인트입니다. 활성 소켓을 보는 방법을 이해하는 것은 네트워크 문제 해결 및 모니터링에 매우 중요합니다.

ss 명령은 소켓을 검사하기 위한 강력한 도구입니다. 다음 옵션과 함께 사용합니다.

  • -t: TCP 소켓을 표시합니다.
  • -u: UDP 소켓을 표시합니다.
  • -l: 리스닝 소켓 (연결을 기다리는 소켓) 을 표시합니다.
  • -n: 서비스 이름을 확인하지 않습니다 (대신 포트 번호를 표시합니다).

아직 열려 있지 않은 경우 터미널을 엽니다. 데스크탑 왼쪽에서 Xfce Terminal 아이콘을 찾을 수 있습니다.

이제 다음 명령을 입력하고 Enter 키를 누릅니다.

ss -tuln

다음과 유사한 출력이 표시됩니다.

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:631                    0.0.0.0:*
tcp   LISTEN     0      128    0.0.0.0:5900                     0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:25                     0.0.0.0:*
tcp   LISTEN     0      128    [::]:22                          [::]:*
tcp   LISTEN     0      128    [::1]:631                        [::]:*
tcp   LISTEN     0      128    [::]:5900                        [::]:*
tcp   LISTEN     0      128    [::1]:25                         [::]:*
udp   UNCONN     0      0      127.0.0.1:323                    0.0.0.0:*
udp   UNCONN     0      0      0.0.0.0:631                      0.0.0.0:*
udp   UNCONN     0      0      [::1]:323                        [::]:*
udp   UNCONN     0      0      [::]:631                         [::]:*

출력을 분석해 보겠습니다.

  • Netid: 소켓 유형 (예: tcp, udp).
  • State: 소켓의 상태 (예: LISTEN은 연결을 기다리고 있음을 의미).
  • Recv-Q: 큐에 있는 수신된 바이트 수.
  • Send-Q: 큐에 있는 전송된 바이트 수.
  • Local Address:Port: 소켓이 바인딩된 로컬 IP 주소 및 포트 번호. 0.0.0.0[::]는 소켓이 사용 가능한 모든 네트워크 인터페이스 (각각 IPv4 및 IPv6) 에서 리스닝하고 있음을 나타냅니다.
  • Peer Address:Port: 소켓이 연결된 원격 IP 주소 및 포트 번호. *는 소켓이 모든 원격 주소로부터의 연결을 리스닝하고 있음을 나타냅니다.

이 출력은 시스템에서 실행 중이며 연결을 리스닝하는 서비스를 보여줍니다. 예를 들어, SSH(포트 22), CUPS(포트 631), VNC(포트 5900) 및 메일 서버 (포트 25) 가 리스닝 중임을 확인할 수 있습니다.

이 출력을 이해하는 것은 네트워크 연결 문제를 진단하거나 시스템에서 실행 중인 잠재적으로 원치 않는 서비스를 식별하는 첫 번째 단계입니다.

다음 단계로 진행하려면 계속을 클릭하십시오.

netstat -tuln 으로 소켓 검증

이 단계에서는 또 다른 명령인 netstat을 사용하여 네트워크 소켓을 확인합니다. netstatss에 비해 오래된 명령이지만, 여전히 널리 사용되며 네트워크 연결, 라우팅 테이블 및 인터페이스 통계에 대한 유사한 정보를 제공합니다.

netstatss와 동일한 옵션으로 사용하여 서비스 이름을 확인하지 않고 리스닝 TCP 및 UDP 소켓을 확인합니다.

  • -t: TCP 소켓을 표시합니다.
  • -u: UDP 소켓을 표시합니다.
  • -l: 리스닝 소켓을 표시합니다.
  • -n: 서비스 이름을 확인하지 않습니다.

터미널에 다음 명령을 입력하고 Enter 키를 누릅니다.

netstat -tuln

다음과 유사한 출력이 표시됩니다.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::631                  :::*

netstat -tuln의 출력은 ss -tuln의 출력과 매우 유사합니다. 두 명령 모두 프로토콜 (Proto), 로컬 주소 및 포트 (Local Address), 외부 주소 및 포트 (Foreign Address), 연결 상태 (State) 에 대한 정보를 제공합니다.

ss가 일반적으로 복잡한 시나리오에서 더 빠르고 유익한 것으로 간주되지만, netstat은 여전히 Linux 명령 도구 상자에 포함할 가치가 있는 도구입니다. 두 가지 모두에 익숙해지는 것이 좋습니다.

이제 ssnetstat을 모두 사용하여 리스닝 소켓을 성공적으로 확인했습니다. 이는 시스템의 네트워크 활동을 이해하기 위한 기본적인 기술입니다.

다음 단계로 이동하려면 계속을 클릭하십시오.

/proc/net 에서 소켓 상세 정보 확인

이 단계에서는 Linux 커널의 네트워크 스택 및 네트워크 프로토콜에 대한 자세한 정보를 제공하는 /proc/net 디렉토리를 탐색합니다. ssnetstat과 같은 명령이 데이터를 가져오는 곳입니다.

/proc 파일 시스템은 프로세스 및 기타 시스템 정보에 대한 정보를 제공하는 가상 파일 시스템입니다. 커널의 내부 상태를 검사하는 강력한 방법입니다.

/proc/net 내부에서 네트워크 연결에 대한 원시 데이터를 포함하는 파일을 찾을 수 있습니다. 예를 들어, tcp, udp, tcp6udp6은 활성 TCP 및 UDP 소켓 (각각 IPv4 및 IPv6) 에 대한 정보를 포함합니다.

tcp 파일의 내용을 살펴보겠습니다. 터미널에 다음 명령을 입력하고 Enter 키를 누릅니다.

cat /proc/net/tcp

다음과 유사한 출력이 표시됩니다.

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
   0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12345 1 0000000000000000 0
   1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 67890 1 0000000000000000 0
   ... (more lines)

이 출력은 원시 커널 데이터이므로 ss 또는 netstat보다 사람이 읽기 어렵습니다. 각 줄은 TCP 소켓을 나타내며 다음을 포함한 다양한 필드를 포함합니다.

  • sl: 소켓 목록 인덱스.
  • local_address: 16 진수 형식의 로컬 IP 주소 및 포트. 0100007F127.0.0.1(루프백 주소) 의 16 진수 표현이며, 0019는 포트 25 의 16 진수 표현입니다.
  • rem_address: 16 진수 형식의 원격 IP 주소 및 포트.
  • st: 소켓의 상태 (예: 0ALISTEN을 나타냄).
  • tx_queue: 전송 큐 크기.
  • rx_queue: 수신 큐 크기.
  • uid: 소켓을 소유한 사용자 ID.
  • inode: 소켓의 inode 번호.

/proc/net/udp 파일을 보면 UDP 소켓도 볼 수 있습니다.

cat /proc/net/udp

IPv6 소켓의 경우 /proc/net/tcp6/proc/net/udp6을 확인할 수 있습니다.

일상적인 사용을 위해 이러한 파일을 직접 구문 분석하지는 않겠지만, 네트워크 정보가 여기서 시작된다는 것을 이해하면 Linux 가 네트워크 연결을 관리하는 방법에 대한 더 깊은 통찰력을 얻을 수 있습니다. ssnetstat과 같은 명령은 본질적으로 이러한 파일에서 데이터를 읽고 형식을 지정하여 더 쉽게 이해할 수 있도록 합니다.

이제 /proc/net 파일 시스템에서 사용할 수 있는 원시 소켓 정보를 탐색했습니다.

랩을 완료하려면 계속을 클릭하십시오.

요약

이 랩에서는 다양한 명령줄 도구를 사용하여 Linux 에서 특정 네트워크 소켓이 열려 있는지 확인하는 방법을 배웠습니다. 먼저 -tuln 옵션을 사용하여 ss 명령을 사용하여 리스닝 TCP 및 UDP 소켓을 표시하고, Netid, State, Local Address:Port, Peer Address:Port와 같은 출력 열을 이해했습니다.

ss를 사용한 후에는 일반적으로 유사한 네트워크 통계를 제공하는 netstat 명령을 사용하여 소켓 정보를 확인합니다. 마지막으로, 네트워크 스택에 대한 하위 수준 보기를 제공하는 /proc/net 파일 시스템에서 직접 자세한 소켓 정보를 검사하는 방법을 탐색했습니다. 이러한 단계는 Linux 시스템에서 열린 네트워크 소켓을 식별하고 검사하는 포괄적인 접근 방식을 제공합니다.