현재 컴퓨터의 공통 ss -l
목록에는 다양한 Netid 유형을 포함하는 많은 개방형 소켓이 있으며 그 중 대부분은 localhost에서만 수신됩니다.
원격 컴퓨터가 데이터를 교환할 수 있는 모든 소켓의 목록을 어떻게 얻을 수 있습니까?
여기에는 TCP, UDP, 기타 전송 계층 프로토콜, RAW 소켓 및 내가 인식하지 못하는 기타 프로토콜이 포함됩니다. (
ss
이런 의미에서 완전하다고?)나는 이것이 UNIX 소켓을 제외할 것이라고 믿습니다(그들은 로컬 파일 시스템에만 있습니다. 그렇죠? 아니면 UNIX 소켓은 원격으로 작동될 수 있으므로 포함되어야 합니다).
청취자가 localhost 제한 사항을 무시할 수 있지만 localhost가 표시/매핑되는 방식에 주의 사항이 있는지는 모르겠습니다.
기본 기준은 "리스닝 프로세스가 허용하는 경우 원격으로 모든 소켓을 공격할 수 있습니다"입니다.
ss
( 몇 년 전에 명령이 다음과 같이 표시되었던 것을 기억합니다.많은그 결과는 내가 지금 얻고 있는 것보다 적었습니다. 이로 인해 일부 배포판이 ss
기본적으로 콘텐츠를 숨기도록 구성되어 있는지 궁금합니다 . ss
다른 환경에서 실행된다는 이유만으로 아무 것도 숨기지 않는 한, 가능한 한 이식성이 뛰어난 유틸리티 명령이나 이와 유사한 유틸리티 명령을 찾고 있습니다 . 또한 보안 이론의 관점에서 볼 때 위협 모델의 경우 시스템이 완전히 우리의 통제하에 있고 정상적이고 악의적이지 않은 소프트웨어를 실행하고 있다고 가정할 수 있습니다. )
그렇다면 관련된 소켓만 모두 나열하는 방법은 무엇입니까?
답변1
대부분의 환경에서는 tcp, udp, 원시 소켓 및 패킷 소켓만 찾을 것으로 예상됩니다. 다행히도 ss
이 모든 것이 알려져 있습니다.
ss
필요한 모든 프로토콜을 알고 있다고 가정하면 아마도 다음 명령을 사용할 것입니다. 이는 "unix" 소켓을 제외합니다. 또한 로컬 커널과 통신하는 데만 사용되는 "netlink" 소켓도 제외됩니다.
sudo ss -l -p | grep -vE '^(u_|nl )'
일반적으로 청취 소켓이 많지 않습니다. 따라서 모든 항목을 보고 루프백 IP 주소를 수신하는 모든 항목을 수동으로 무시할 수 있습니다. 또는 ss
모든 필터링이 수행되도록 요구할 수 있습니다.
sudo ss -l -p -A 'all,!unix,!netlink' 'not src 127.0.0.1 not src [::1]'
두 경우 모두 출력에는 "클라이언트" UDP 소켓도 포함될 수 있습니다. 따라서 DNS 클라이언트, HTTP/3 클라이언트도 표시될 수 있습니다.
각 소켓을 연 프로그램에 대한 정보를 볼 필요가 없으면 해당 옵션을 제거 하고 루트 (또는)( ) -p
로 실행할 필요가 없습니다 .ss
netstat
sudo
위 명령은 얼마나 포괄적입니까?
netstat의 대체품으로 홍보되었지만 ss
"udplite" 소켓 표시에 대한 지원은 부족합니다.
또한 대답은 버전에 따라 다릅니다 ss
(그리고 커널에 따라서도 마찬가지인 것 같습니다). 제가 원래 이 답변을 썼을 때, 전에2017년, ss
"sctp"는 지원되지 않습니다. netstat
그때부터 지원하세요2014년 2월). sctp는 구체적으로 예상됨~에전화 회사. 전화 회사 이외의 VOIP는 일반적으로 UDP를 사용합니다.
불행하게도 에서 전체 목록을 찾으면 man netstat
매우 혼란스러워집니다. sctp 및 udplite에 대한 옵션은 tcp, udp 및 raw와 함께 첫 번째 줄에 표시됩니다. 더 자세히 살펴보면 전체 프로토콜 목록이 있습니다.가족: [-4|--inet] [-6|--inet6] [--unix|-x] [--inet|--ip|--tcpip] [--ax25] [--x25] [--rose] [--ash] [--bluetooth] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec]
.
udplite 및 sctp는 지원 되지만 netstat
"dccp"는 지원되지 않습니다. 또한 netstat는 .NET Framework와 같은 패킷 소켓(원시 소켓과 같지만 링크 수준 헤더 포함)을 지원하지 않습니다 ss -l -0
.
ss
Bluetooth 소켓도 지원 되지 않습니다 . Bluetooth 소켓은 전통적인 의미에서 문제가 되지 않습니다. 이는 전체 검토를 수행하는 경우 관련이 있을 수 있습니다. 그러나 Bluetooth 보안은 매우 구체적인 질문이므로 여기서는 답변하지 않겠습니다.
localhost를 생략하시겠습니까 netstat
?
netstat
소켓을 localhost에 바인딩하는 것을 생략하는 특별한 방법은 없습니다. | grep -v
마지막에 사용하시면 됩니다 . -p
netstat /ss 옵션을 사용할 경우 주의하십시오. 프로세스 이름이 일치하면 실수로 일부 프로세스를 제외할 수 있습니다. grep -v localhost:
기본적으로 숫자 주소를 표시하는 것 외에도 패턴에 콜론을 포함시키므로 ss
, 이 경우 | grep -vE (127.0.0.1|\[::1\]):
실수로 제외되는 프로세스를 확인해 볼 수 있습니다 ps ax | grep -E (127.0.0.1|\[::1\]):
.
더 간단한 명령이 있습니까?
불행히도 패킷 소켓의 경우. 그렇지 않으면 간단한 netstat -l
명령을 제안할 수도 있습니다. netstat
요청을 예측하고 출력을 "인터넷 연결", "UNIX 도메인 소켓" 및 "블루투스 연결"로 분리하는 데 도움이 됩니다. 첫 번째 부분만 확인하면 됩니다. 넷링크 소켓 부분이 없습니다.
tcp, udp, raw 및 패킷 소켓에만 관심이 있다고 가정합니다. 처음 세 가지 유형의 소켓에는 netstat -l -46
.
패킷 소켓이 일반적으로 사용됩니다. 따라서 달리기 ss -l -0
(또는 ss -l --packet
) 훈련도 필요합니다.
불행히도 이로 인해 큰 함정이 발생합니다. 문제는 이제 이 두 명령을 결합하려고 한다는 것입니다.
피해야 할 함정ss
ss -l -046
단일 명령으로서의 대답은 매력적으로 보입니다. 그러나 이것은아니요진짜. ss -46
IPv6 소켓만 표시됩니다. ss -64
IPv4 소켓만 표시됩니다.
항상 결과에 대해 온전한 점검을 수행하는 것이 좋습니다. 무엇을 기대해야 하는지 파악하십시오. 각 프로토콜을 확인하여 누락된 것이 있는지 확인하십시오. IPv4 주소가 없거나, IPv6 주소가 없다면 매우 의심스럽습니다. 대부분의 서버에는 두 가지 모두를 수신하는 SSH 서비스가 있을 것으로 예상할 수 있습니다. DHCP가 사용되므로 서버가 아닌 대부분의 경우 패킷이나 원시 소켓도 표시되어야 합니다.
두 가지 다른 명령의 출력을 해석하지 않으려면 netstat
명령을 로 대체하는 것이 대안일 수 있습니다 ss -l -A inet
. 이는 netstat를 실행할 때 정확히 동일한 옵션이 ipv6 소켓을 제외하기 때문에 약간 불행한 일입니다.
따라서 단일 명령의 경우 ss -l -A inet,packet ...
.
ss -l | grep ...
IMO, 첫 번째 부분에서 제안한 방식으로 사용할 수도 있습니다 . 이 명령은 기억하기 쉬우며 선택 옵션에서 모든 혼란스러운 동작을 방지합니다 ss
.
이 출력을 사용하여 무언가를 자동화하는 스크립트를 작성하는 경우 아마도 필터링을 선호해야 할 것입니다.긍정적인대신 소켓 유형 목록입니다. 그렇지 않으면 ss
새 로컬 전용 소켓에 대한 지원이 시작될 때 스크립트가 중단될 수 있습니다.
ss -a -A raw -f link
및 에서 오는 소켓 조합을 표시한다고 언급했습니까 ? 그리고 보여줘ss -a -A raw
ss -a -f link
ss -a -A inet -f inet6
더 적은소켓 비율 ss -a -A inet
? 나는 -f inet6
and 가 -f inet
정확하게 문서화되지 않은 특별한 경우라고 생각합니다 .
( -0
, -4
및 는 , 및 의 별칭 -6
입니다 .)-f link
-f inet
-f inet6
ss -A packet
헤더는 표시 되지만 소켓은 표시되지 않는다고 언급했습니까 ? strace
실제로 아무것도 읽지 않는다는 것을 나타냅니다. 이는 패킷 소켓을 항상 "듣고 있는" 것으로 간주하기 때문인 것 같습니다. ss
이에 대한 경고를 제공하기에는 너무 게으르다. 이는 ss
다음과 같이 처리되는 원시 소켓과 다릅니다.동시에"듣다" 그리고 "듣지 않는다".
( man 7 raw
원래 소켓이아니요특정 프로토콜에 바인딩되어 있지만 특정 IP 프로토콜에는 바인딩되지 않은 경우 전송 전용입니다. 이것이 청취 소켓으로만 간주되는지 확인하지 않았습니다)