Linux에서 ss 명령을 사용하는 방법
게시 됨: 2022-01-29 ss
명령은 고전적인 netstat
를 현대적으로 대체합니다. Linux에서 이를 사용하여 네트워크 연결에 대한 통계를 얻을 수 있습니다. 이 편리한 도구를 사용하는 방법은 다음과 같습니다.
ss 명령 대 netstat
더 이상 사용되지 않는 netstat
명령을 대체하는 ss
는 컴퓨터가 다른 컴퓨터, 네트워크 및 서비스와 통신하는 방법에 대한 자세한 정보를 제공합니다.
ss
는 TCP(전송 제어 프로토콜), UDP(사용자 데이터그램 프로토콜), Unix(프로세스 간) 및 원시 소켓에 대한 통계를 표시합니다. 원시 소켓 은 네트워크 OSI 수준에서 작동하므로 TCP 및 UDP 헤더는 전송 계층이 아니라 응용 프로그램 소프트웨어에서 처리해야 합니다. ICMP(Internet Control Message Protocol) 메시지와 ping 유틸리티는 모두 원시 소켓을 사용합니다.
SS를 사용하여
ss
는 이미 최신 Linux 배포판의 일부이므로 설치할 필요가 없습니다. 그러나 그 출력은 매우 길 수 있습니다. 우리는 630줄 이상의 결과를 얻었습니다. 결과도 매우 광범위합니다.
이 때문에 우리는 스크린샷에 맞지 않기 때문에 얻은 결과의 텍스트 표현을 포함했습니다. 더 쉽게 관리할 수 있도록 트리밍했습니다.
네트워크 연결 나열
명령줄 옵션 없이 ss
를 사용하면 수신하지 않는 소켓이 나열됩니다. 즉, 수신 대기 상태가 아닌 소켓을 나열합니다.
이를 보려면 다음을 입력하십시오.
봄 여름 시즌
Netid 상태 Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688 u_str ESTAB 0 0 * 35550 * 35551 ... u_str ESTAB 0 0 * 38127 * 38128 u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242 u_str ESTAB 0 0 * 19039 * 19040 u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306 icmp6 연결 해제 0 0 *:ipv6-icmp *:* udp ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps
열은 다음과 같습니다.
- Netid : 소켓 유형입니다. 이 예에는 Unix 스트림인 "u_str", "udp" 및 IP 버전 6 ICMP 소켓인 "icmp6"이 있습니다. Linux 매뉴얼 페이지에서 Linux 소켓 유형에 대한 자세한 설명을 찾을 수 있습니다.
- State : 소켓이 있는 상태입니다.
- Recv-Q : 수신된 패킷의 수입니다.
- Send-Q : 보낸 패킷의 수입니다.
- Local Address:Port : 로컬 주소와 포트(또는 Unix 소켓에 대한 동등한 값).
- Peer Address:Port : 원격 주소 및 포트(또는 Unix 소켓에 대한 동등한 값).
UDP 소켓의 경우 "상태" 열은 일반적으로 비어 있습니다. TCP 소켓의 경우 다음 중 하나일 수 있습니다.
- LISTEN: 서버 측 전용. 소켓이 연결 요청을 기다리고 있습니다.
- SYN-SENT: 클라이언트 측 전용. 이 소켓은 연결 요청을 했고 수락 여부를 확인하기 위해 기다리고 있습니다.
- SYN-RECEIVED: 서버 측 전용. 이 소켓은 연결 요청을 수락한 후 연결 승인을 기다리고 있습니다.
- 구축됨: 서버 및 클라이언트. 서버와 클라이언트 사이에 작업 연결이 설정되어 둘 사이에 데이터를 전송할 수 있습니다.
- FIN-WAIT-1: 서버와 클라이언트. 이 소켓은 원격 소켓의 연결 종료 요청 또는 이 소켓에서 이전에 전송된 연결 종료 요청의 승인을 기다리고 있습니다.
- FIN-WAIT-2: 서버와 클라이언트. 이 소켓은 원격 소켓의 연결 종료 요청을 기다리고 있습니다.
- CLOSE-WAIT: 서버와 클라이언트. 이 소켓은 로컬 사용자의 연결 종료 요청을 기다리고 있습니다.
- 종료: 서버 및 클라이언트. 이 소켓은 원격 소켓의 연결 종료 요청 승인을 기다리고 있습니다.
- LAST-ACK: 서버와 클라이언트. 이 소켓은 원격 소켓으로 보낸 연결 종료 요청의 승인을 기다리고 있습니다.
- TIME-WAIT: 서버와 클라이언트. 이 소켓은 원격 소켓의 종료 요청을 수신했음을 알리기 위해 원격 소켓에 승인을 보냈습니다. 이제 승인이 수신되었는지 확인하기 위해 기다리고 있습니다.
- CLOSED: 연결이 없으므로 소켓이 종료되었습니다.
청취 소켓 나열
청취 소켓을 보기 위해 다음과 같이 -l
(청취) 옵션을 추가합니다.
ss -l
Netid 상태 Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:진화 주소/2987 * ... u_str LISTEN 0 4096 /run/systemd/private 13349 * 0 u_seq LISTEN 0 4096 /run/udev/control 13376 * 0 u_str LISTEN 0 4096 /tmp/.X11-unix/X0 33071 * 0 u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 u_str LISTEN 0 4096 /run/systemd/fsck.progress 13362 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 32303 * 0
이 소켓은 모두 연결되지 않고 수신 대기 중입니다. "rtnl"은 커널과 사용자 공간 프로세스 간에 정보를 전송하는 데 사용되는 라우팅 넷링크를 의미합니다.
모든 소켓 나열
모든 소켓을 나열하려면 -a
(all) 옵션을 사용할 수 있습니다.
ㅅ-a
Netid 상태 Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:진화 주소/2987 * ... u_str LISTEN 0 100 public/showq 23222 * 0 u_str LISTEN 0 100 개인/오류 23225 * 0 u_str LISTEN 0 100 개인/재시도 23228 * 0 ... UDP UNCONN 0 0 0.0.0.0:631 0.0.0.0:* UDP UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* ... TCP 수신 0 128 [::]:ssh [::]:* TCP 수신 0 5 [::1]:ipp [::]:* TCP 수신 0 100 [::1]:smtp [::]:*
출력에는 상태에 관계없이 모든 소켓이 포함됩니다.
TCP 소켓 나열
일치하는 소켓만 표시되도록 필터를 적용할 수도 있습니다. -t
(TCP) 옵션을 사용하므로 TCP 소켓만 나열됩니다.
ss -a -t
UDP 소켓 나열
-u
(UDP) 옵션은 동일한 유형의 필터링 작업을 수행합니다. 이번에는 UDP 소켓만 볼 것입니다.
ss -a -u
State Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 연결 해제 0 0 0.0.0.0:631 0.0.0.0:* 연결 해제 0 0 0.0.0.0:mdns 0.0.0.0:* 연결 해제 0 0 0.0.0.0:60734 0.0.0.0:* 연결 해제 0 0 127.0.0.53%lo:도메인 0.0.0.0:* ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 연결 해제 0 0 [::]:mdns [::]:* 연결 해제 0 0 [::]:51193 [::]:*
Unix 소켓 나열
Unix 소켓만 보려면 아래와 같이 -x
(Unix) 옵션을 포함할 수 있습니다.
ss -a -x
Netid 상태 Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 * 23183 * 23184 u_str ESTAB 28 0 @/tmp/.X11-unix/X0 52640 * 52639 ... u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306
원시 소켓 나열
원시 소켓에 대한 필터는 -w
(raw) 옵션입니다.
ss -a -w
IP 버전 4 소켓 나열
TCP/IP 버전 4 프로토콜을 사용하는 소켓은 -4
(IPV4) 옵션을 사용하여 나열할 수 있습니다.
ss -a -4
IP 버전 6 소켓 나열
다음과 같이 -6
(IPV6) 옵션을 사용하여 일치하는 IP 버전 6 필터를 켤 수 있습니다.
ss -a -6
상태별 소켓 나열
state
옵션을 사용하여 소켓이 있는 상태로 소켓을 나열할 수 있습니다. 이것은 설정, 수신 또는 닫힌 상태에서 작동합니다. 또한 네트워크 주소를 이름으로, 포트를 프로토콜로 확인하는 확인 옵션( -r
)을 사용할 것입니다.
다음 명령은 설정된 TCP 연결을 찾고 ss
는 이름을 확인하려고 시도합니다.
ss -t -r 상태 설정됨
설정된 상태에 있는 4개의 연결이 나열됩니다. 호스트 이름 ubuntu20-04가 확인되었으며 두 번째 줄의 SSH 연결에 대해 22 대신 "ssh"가 표시됩니다.
이 작업을 반복하여 청취 상태의 소켓을 찾을 수 있습니다.
ss -t -r 상태 청취
Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 0 128 로컬 호스트:5939 0.0.0.0:* 0 4096 로컬 호스트%lo:도메인 0.0.0.0:* 0 128 0.0.0.0:ssh 0.0.0.0:* 0 5 로컬 호스트:ipp 0.0.0.0:* 0 100 로컬 호스트:smtp 0.0.0.0:* 0 128 [::]:ssh [::]:* 0 5 ip6-localhost:ipp [::]:* 0 100 ip6-localhost:smtp [::]:*
프로토콜별 소켓 나열
대상 및 소스 포트를 각각 나타내는 dport
및 sport
옵션과 함께 특정 프로토콜을 사용하여 소켓을 나열할 수 있습니다.
established
연결에서 HTTPS 프로토콜을 사용하여 소켓을 나열하려면 다음을 입력합니다(여는 괄호 뒤와 닫는 괄호 앞의 공백에 주의).
ss -a 상태 설정 '( dport = :https 또는 스포츠 = :https )'
프로토콜 이름이나 일반적으로 해당 프로토콜과 관련된 포트를 사용할 수 있습니다. SSH(Secure Shell)의 기본 포트는 포트 22입니다.
하나의 명령에서 프로토콜 이름을 사용한 다음 포트 번호를 사용하여 반복합니다.
ss -a '( dport = :ssh 또는 스포츠 = :ssh )'
ss -a '( dport = :22 또는 스포츠 = :22 )'
예상대로 동일한 결과를 얻습니다.
특정 IP 주소에 대한 연결 나열
dst
(대상) 옵션을 사용하면 특정 대상 IP 주소에 대한 연결을 나열할 수 있습니다.
다음을 입력합니다.
ss -a dst 192.168.4.25
프로세스 식별
소켓을 사용하는 프로세스를 확인하려면 아래와 같이 프로세스 옵션( -p
)을 사용할 수 있습니다( sudo
를 사용해야 함).
sudo ss -t -p
State Recv-Q Send-Q 로컬 주소:포트 피어 주소:포트 프로세스 ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https 사용자:(("파이어폭스",pid=3378,fd=151)) ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 사용자:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
이것은 TCP 소켓에 설정된 두 연결이 SSH 데몬과 Firefox에서 사용되고 있음을 보여줍니다.
합당한 후계자
ss
명령은 이전에 netstat
에서 제공한 것과 동일한 정보를 제공하지만 더 간단하고 접근하기 쉬운 방식으로 제공됩니다. 더 많은 옵션과 팁은 매뉴얼 페이지에서 확인할 수 있습니다.
리눅스 명령어 | ||
파일 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · 보기 · 문자열 · 유형 · 이름 바꾸기 · zip · 압축 풀기 · 마운트 · 언마운트 · 설치 · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · 패치 · 변환 · rclone · 파쇄 · srm | |
프로세스 | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · 종료 · 재부팅 · 정지 · poweroff · passwd · lscpu · crontab · 날짜 · bg · fg | |
네트워킹 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
관련: 개발자 및 열광자를 위한 최고의 Linux 노트북