SW/리눅스

Linux : 수신 포트 확인 방법, 예제, 명령어 (사용 중인 포트)

얇은생각 2021. 11. 29. 07:30
반응형

네트워크 연결 또는 응용 프로그램 관련 문제를 해결할 때 가장 먼저 확인해야 할 사항 중 하나는 시스템에서 실제로 사용 중인 포트와 특정 포트에서 수신 중인 응용 프로그램입니다.

이 문서에서는 netstat, ss 및 lsof 명령을 사용하여 어떤 서비스가 어떤 포트에서 수신 중인지 확인하는 방법에 대해 설명합니다. 이 지침은 macOS와 같은 모든 Linux 및 Unix 기반 운영 체제에 적용됩니다.

 

 

Linux : 수신 포트 확인 방법, 예제, 명령어 (사용 중인 포트)

 

 

수신 대기 포트란

네트워크 포트는 번호, 연결된 IP 주소 및 통신 프로토콜 유형(예: TCP 또는 UDP)으로 식별됩니다.

수신 포트는 응용 프로그램 또는 프로세스가 수신 대기하는 네트워크 포트로, 통신 끝점 역할을 합니다.

방화벽을 사용하여 각 수신 포트를 열거나 닫을 수 있습니다. 일반적으로 개방형 포트는 원격 위치에서 들어오는 패킷을 수신하는 네트워크 포트입니다. 

두 서비스가 동일한 IP 주소에서 동일한 포트를 수신하도록 할 수 없습니다. 

예를 들어 포트 80 및 443에서 수신 대기하는 Apache 웹 서버를 실행 중이고 Nginx를 설치하려고 하면 HTTP 및 HTTPS 포트가 이미 사용 중이므로 나중에 시작되지 않습니다.

 

 

 

netstat를 사용하여 수신 포트를 선택

netstat는 네트워크 연결에 대한 정보를 제공할 수 있는 명령줄 도구입니다.

포트 및 소켓 상태를 사용하는 서비스를 포함하여 수신 중인 모든 TCP 또는 UDP 포트를 나열하려면 다음 명령을 사용합니다.

sudo netstat -tunlp

 

 

이 명령에 사용되는 옵션에는 다음과 같은 뜻이 있습니다.

-t - TCP 포트를 표시합니다.

-u - UDP 포트를 표시합니다.

-n - 호스트를 확인하는 대신 숫자 주소를 표시합니다.

-l - 수신 포트만 표시합니다.

-p - 수신기 프로세스의 PID 및 이름을 표시합니다. 이 정보는 명령을 루트 또는 sudo 사용자로 실행하는 경우에만 표시됩니다.

 

출력은 다음과 같습니다.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd            
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      929/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      534/mysqld          
tcp6       0      0 :::80                   :::*                    LISTEN      515/apache2         
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd            
tcp6       0      0 :::25                   :::*                    LISTEN      929/master          
tcp6       0      0 :::33060                :::*                    LISTEN      534/mysqld          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           966/dhclient

 

 

이 경우 중요한 열은 다음과 같습니다.

Proto - 소켓에 사용되는 프로토콜입니다.

로컬 주소 - 프로세스가 수신하는 IP 주소 및 포트 번호입니다.

PID/프로그램 이름 - PID 및 프로세스 이름입니다.

 

결과를 필터링하려면 grep 명령을 사용하십시오. 예를 들어 TCP 포트 22에서 수신하는 프로세스를 찾으려면 다음을 입력합니다.

sudo netstat -tnlp | grep :22

 

 

출력에 이 컴퓨터의 포트 22가 SSH 서버에서 사용되는 것으로 나타납니다.

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd

 

 

출력이 비어 있으면 포트에서 수신 중인 항목이 없음을 의미합니다.

PID, 프로토콜, 상태 등과 같은 조건을 기준으로 목록을 필터링할 수도 있습니다.

netstat는 더 이상 사용되지 않으며 ss 및 ip로 대체되지만 네트워크 연결을 확인하는 데 가장 많이 사용되는 명령입니다.

 

 

 

ss를 사용하여 수신 포트를 확인

ss는 새로운 netstat입니다. 일부 netstat 기능이 없지만 TCP 상태를 더 많이 노출하고 속도가 약간 더 빠릅니다. 명령 옵션은 대부분 동일하므로 netstat에서 ss로 전환하는 것은 어렵지 않습니다.

ss와 함께 모든 수신 포트 목록을 가져오려면 다음을 입력합니다.

출력은 netstat에서 보고한 출력과 거의 동일합니다.

sudo ss -tunlp

# State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port                                                                                        
# LISTEN   0        128              0.0.0.0:22             0.0.0.0:*      users:(("sshd",pid=445,fd=3))                                                        
# LISTEN   0        100              0.0.0.0:25             0.0.0.0:*      users:(("master",pid=929,fd=13))                                                     
# LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=534,fd=30))                                                     
# LISTEN   0        128                    *:80                   *:*      users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))   
# LISTEN   0        128                 [::]:22                [::]:*      users:(("sshd",pid=445,fd=4))                                                        
# LISTEN   0        100                 [::]:25                [::]:*      users:(("master",pid=929,fd=14))                                                     
# LISTEN   0        70                     *:33060                *:*      users:(("m

 

 

 

수신 포트를 lsof로 확인

lsof는 프로세스에서 여는 파일에 대한 정보를 제공하는 강력한 명령줄 유틸리티입니다.

Linux에서는 모든 것이 파일입니다. 소켓은 네트워크에 쓰는 파일이라고 생각할 수 있습니다.

ls 유형의 모든 수신 TCP 포트 목록을 가져오려면 다음과 같이 하십시오.

sudo lsof -nP -iTCP -sTCP:LISTEN

 

 

사용되는 옵션은 다음과 같습니다.

-n - 포트 번호를 포트 이름으로 변환하지 않습니다.

-p - 호스트 이름을 확인하지 않고 숫자 주소를 표시합니다.

-iTCP -sTCP입니다.LISTEN - TCP 상태 LISTEN인 네트워크 파일만 표시합니다.

 

# COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
# sshd      445     root    3u  IPv4  16434      0t0  TCP *:22 (LISTEN)
# sshd      445     root    4u  IPv6  16445      0t0  TCP *:22 (LISTEN)
# apache2   515     root    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
# mysqld    534    mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)
# mysqld    534    mysql   33u  IPv6  19973      0t0  TCP *:33060 (LISTEN)
# apache2   764 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
# apache2   765 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
# master    929     root   13u  IPv4  19637      0t0  TCP *:25 (LISTEN)
# master    929     root   14u  IPv6  19638      0t0  TCP *:25 (LISTEN)

 

 

대부분의 출력 열 이름은 쉽게 설명할 수 있습니다.

- COMMAND, PID, USER - 포트와 연결된 프로그램을 실행하는 이름, pid 및 사용자입니다.

- NAME- 포트 번호입니다.

 

 

포트 3306과 같이 특정 포트에서 수신 중인 프로세스를 확인하려면 다음을 사용합니다.

출력에 MySQL 서버가 포트 3306을 사용하는 것으로 나타납니다.

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

# COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
# mysqld  534 mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)

 

 

자세한 내용은 ls of man 페이지를 방문하여 이 도구의 다른 모든 강력한 옵션에 대해 읽어보십시오.

시스템에서 사용 중인 포트를 확인하고 특정 포트에서 수신하는 프로세스를 찾는 데 사용할 수 있는 몇 가지 명령을 보여 드렸습니다.

반응형