매뉴얼 페이지에는 다음과 ss
같이 나와 있습니다.
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
필터에 대한 자세한 내용은 공식 문서(Debian 패키지 iproute-doc)를 확인하세요.
그게 무슨 뜻이야? 아래에서는 아무것도 찾을 수 없습니다 /usr/share/doc/iproute2-doc/
.
$ ls /usr/share/doc/iproute2-doc/ss.html
ls: cannot access '/usr/share/doc/iproute2-doc/ss.html': No such file or directory
$ ls /usr/share/doc/iproute2-doc/
actions changelog.Debian.gz copyright examples README README.decnet README.devel README.distribution.gz README.iproute2+tc README.lnstat
해당 문서를 온라인에서도 볼 수 있나요?
감사해요.
답변1
사용 가능한 문서데비안 9 패키지하지만이후 버전에서는 제거될 예정입니다.구식이기 때문입니다. 이제 맨페이지가 완전히 문서화되었습니다. (단, 필터에 대한 자세한 내용은 할 말이 많지 않습니다.)
답변2
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
Please take a look at the official documentation for details regarding filters.
STATE-FILTER
STATE-FILTER allows to construct arbitrary set of states to match. Its syntax is sequence of keywords state and exclude fol‐
lowed by identifier of state.
Available identifiers are:
All standard TCP states: established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-
ack, listening and closing.
all - for all the states
connected - all the states except for listening and closed
synchronized - all the connected states except for syn-sent
bucket - states, which are maintained as minisockets, i.e. time-wait and syn-recv
big - opposite to bucket
...
ss -o state established '( dport = :ssh or sport = :ssh )'
Display all established ssh connections.
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
List all the tcp sockets in state FIN-WAIT-1 for our apache to network 193.233.7/24 and look at their timers.
그래서
ss [options] [ FILTER ]
까지 확장 가능
ss [options] [ state STATE-FILTER ] [ EXPRESSION ]
옵션은 어디에 있나요
[-hVHnraloempiKsZNb460tudwxS] [-f FAMILY] [-A QUERY] [-D FILE] [-D FILE]
STATE-FILTER는 그 중 하나입니다
established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listening, closing, all, connected, synchronized, bucket, big
우리는 할 수 있다미루다예제에서 볼 수 있듯이 EXPRESSION은 목록입니다.IP 규칙 선택기에스.
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ] [ uidrange NUMBER-NUMBER ] [ ipproto PROTOCOL ] [ sport [ NUMBER | NUMBER-NUMBER ] ] [ dport [ NUMBER | NUMBER-NUMBER ] ] [ tun_id TUN_ID ]
답변3
저도 똑같은 내용이 궁금했는데 소스 링크를 제공하는 다른 답변과 의견이 매우 도움이 되었습니다.
전체 FILTER
구문은 여전히 약간 혼란스럽습니다. 그러나 안전한(루트 필요) 범위 위의 포트를 확인하는 방법과 소스 코드를 보여주는 Linode의 예를 기반으로 열린 포트를 확인하는 "복잡한" 필터를 구성할 수 있었습니다. 특정 범위.
세 가지 예는 모두 기능적으로 동일합니다.
ss -a -t '( dport geq :5900 and dport leq :5999 or sport geq :5900 and sport leq :5999 )'
ss -a -t '( dport >= :5900 and dport <= :5999 or sport >= :5900 and sport <= :5999 )'
ss -a -t '( dport >= :5900 & dport <= :5999 | sport >= :5900 & sport <= :5999 )'
이 경우 Hashicorp의 Vagrant 및 Packer 도구(그리고 Virtualbox/VMware/libvirt와 같이 이들이 상호 작용하는 가상화 도구)가 자동으로 이 범위의 포트를 할당하기 때문에 내가 찾고 있는 포트는 VNC와 관련되어 있습니다. 원시 키 입력을 보내지 않고도 가상 머신 콘솔과 상호 작용할 수 있도록 "헤드리스"합니다.
나를 혼란스럽게 하는 부분은 소스 코드에는 가 있지만 GEQ
실제 LEQ
필터 구문에서는 소문자여야 하거나 기호가 >=
또는 를 의미하는 반면 소스 코드에서는 소문자로 정의되어 있음을 <=
볼 수 있다는 것입니다 .eq
또 다른 은밀하고 혼란스러운 점은 그것이 =
모두 평등에 관한 것이라는 것입니다.eq
==
답변4
이것이 도움이 될 수 있습니다
SS 유틸리티: 빠른 소개
알렉세이 쿠즈네토프,[email protected]
일부 음수, 2001년 9월 20일
ss
소켓을 연구하기 위한 또 다른 유틸리티입니다. 기능적으로는 일부 Perl/awk 스크립트와 결합하는 것보다 낫지 않으며 netstat
확실히 더 빠르지만 더 좋게 만드는 것만으로는 충분하지 않습니다. :-) 그러니 이제 이 글을 읽지 말고 시간을 낭비하지 마세요. 물론, 현재 netstat가 아직 수행할 수 없는 몇 가지 기능을 제안하지만 곧 확실히 수행할 것입니다.
1. 왜?
/proc
아쉽게도 인터페이스가 부족합니다. 소켓 수가 충분히 많으면 netstat
단순히 cat /proc/net/tcp/
고통과 저주를 유발하기도 합니다 . Linux-2.4에서는 상황이 더욱 악화됩니다. 소켓 수가 적더라도 읽기 /proc/net/tcp/
속도가 충분히 느립니다.
이 유틸리티는 확장성이 뛰어난 새로운 접근 방식을 제공합니다. 여기서는 기술적 세부 사항을 설명하지 않고 명령 설명에 중점을 둡니다. 유일한 중요한 점은 모듈을 로드하는 것이 나쁜 생각이 아니며 tcp_diag
디렉토리에서
Modules
찾을 수 있다는 것입니다 iproute2
. 그렇지 않으면 이것이 ss
작동하지만, 뒤로 물러나서 약간 더 빨라지 /proc
는 것처럼 느려질 것입니다 ("일부 그림" 섹션 참조).netstat
2.오래된 소식
가장 단순한 형태에서는 ss
netstat와 동일하지만 약간의 차이가 있습니다.
ss -t -a
모든 TCP 소켓 덤프ss -u -a
모든 UDP 소켓을 덤프합니다.ss -w -a
모든 RAW 소켓을 덤프합니다.ss -x -a
모든 UNIX 소켓 덤프
-o
TCP 타이머 상태를 표시하는 옵션 . -e
일부 확장된 정보를 표시하는 옵션입니다 . 기다려, 기다려 등등. netstat의 소켓 관련 옵션은 모두 지원되는 것 같다. 하지만 AX.25나 다른 이상한 것들은 아닙니다. :-) 누구든지 원한다면 decnet과 ipx를 지원할 수 있습니다. iproute2 libutils에는 이미 이에 대한 몇 가지 기본 지원이 있으며 이러한 새로운 추가 기능을 보게 되어 기쁩니다.
그러나 표준 기능은 약간 다릅니다.
첫째: -a
해당 상태에는 옵션 소켓이 없으며
TIME-WAIT
역시 SYN-RECV
건너뜁니다. 나는 이것이 더 합리적인 기본값이라고 생각합니다.
둘째: UNIX 소켓의 형식이 다릅니다. tcp/udp와 겹칩니다. 표준 커널은 여전히 쓰기/읽기 대기열과 연결된 UNIX 소켓의 피어 주소 보기를 허용하지 않지만 이를 수행하는 패치가 있습니다.
셋째: 기본적으로 모든 유형이 아닌 TCP 소켓만 덤프합니다.
다음: 기본적으로 숫자 호스트 주소(예: )를 확인하지 않습니다 ip
! 옵션을 사용하여 구문 분석을 활성화합니다 -r
. 서비스 이름은 기본적으로 확인되며 일반적으로 로컬 파일에 저장됩니다. 또한 서비스 데이터베이스에 포트에 대한 참조가 없으면 ss
시스템이 쿼리됩니다
rpcbind
. RPC 서비스 접두사 rpc.
서비스 확인은 옵션을 통해 억제될 수 있습니다 -n
.
"긴" 옵션은 허용되지 않습니다(마음에 들지 않습니다. 죄송합니다). 따라서 주소 패밀리는 패밀리 식별자로 제공되며 이 옵션은 -f
iproute2 규칙을 따릅니다. 대부분 이는 옵션 확인자가 주소를 올바르게 확인할 수 있도록 하기 위한 것이지만 부작용으로 실제로는 지정된 시리즈를 지원하는 소켓으로만 덤프를 제한합니다. -A
옵션 뒤에 덤프할 소켓 테이블 목록도 지원됩니다. 논리적으로 소켓 테이블의 ID가 _address_ 시리즈의 ID와 다르며 이는 또 다른 비호환 포인트입니다. 따라서 id는 all
, tcp
, udp
,
raw
, inet
, 중 하나 입니다 unix
. 바라보다? 글쎄요, 약어로만 보면 패킷 소켓을 볼 수 있다고 추측하는 것은 어렵지 않습니다 . 실제로 몇 가지 다른 약어가 있습니다. fe는 데이터그램 UNIX 소켓만 선택합니다.packet
netlink
inet
tcp|udp|raw
packet
unix_dgram
다음: 글쎄요, 아직 모르겠어요. :-)
3. 이제 새로운 기능에 대해 이야기할 시간입니다.
소켓 목록의 내장 필터링입니다.
3.1 주별로 필터링합니다.
ss
state
키워드 및 뒤에 일부 상태 식별자를 사용하여 exclude
소켓 상태를 필터링 할 수 있습니다 .
상태 식별자는 표준 TCP 상태 이름(목록에 없음, 이미 모르면 쓸모가 없음) 또는 약어입니다.
all
- 모든 주에 대해bucket
- TCP 미니소켓의 경우(TIME-WAIT|SYN-RECV
)big
- 미니 소켓을 제외한 모든 것connected
- 닫히지 않고 듣지 않습니다.synchronized
- 연결된 것과 연결되지 않은 것SYN-SENT
Fe는 다음을 제외한 모든 TCP 소켓을 덤프합니다 SYN-RECV
.
ss exclude SYN-RECV
state
또는 지시문이 모두 없으면 exclude
상태 필터는 기본적 으로 Listen, syn-recv, time-wait 및 닫힌 소켓을 제외하고 all
with 옵션 -a
또는 로 설정됩니다.all
3.2 주소 및 포트별로 필터링합니다.
옵션 목록에는 주소/포트 필터가 포함될 수 있습니다. 부울 연산 or
, and
, not
술어 로 구성된 부울 표현식입니다 . 실제로 부울 연산의 모든 이름은 &
, &&
, |
, ||
, 로 사용됩니다.
!
그러나 유닉스 쉘이 이러한 기호에 부여하는 특별한 의미를 잊지 말고 명령줄에서 사용할 때 올바르게 이스케이프하십시오.
술어는 다음 유형 중 하나일 수 있습니다.
- A. 주소/포트 일치. 주소를 마스크와 비교하여 확인하고 포트는 와일드카드이거나 정확한 포트입니다. 다음 중 하나입니다.
dst prefix:port src prefix:port src unix:STRING src link:protocol:ifindex src nl:channel:pid
*
접두사와 포트는 모두 없거나 와일드카드를 나타내는 로 대체될 수 있습니다 . UNIX 소켓은 쉘 와일드카드를 사용하여 소켓 이름을 일치시키기 위해 보다 강력한 체계를 사용합니다. 또는 접두사 unix: 및 link:는 주소 계열이 컨텍스트에서 분명할 경우 생략될 수 있습니다(옵션-x
또는 with-f unix
또는 with 키워드 사용).unix
철
dst 10.0.0.1 dst 10.0.0.1: dst 10.0.0.1/32: dst 10.0.0.1:*
이는 동일하며 소켓이 호스트 10.0.0.1의 모든 포트에 연결되어 있음을 의미합니다.
dst 10.0.0.0/24:22
네트워크 10.0.0.0...255의 포트 22에 있는 소켓에 연결합니다.
포트와 주소는 콜론으로 구분되어 있으므로 IPv6 주소에 문제가 발생할 수 있습니다. 일반적으로 우리는 마지막 콜론을 포트를 나누는 것으로 해석합니다. IPv6 주소 제공을 허용하려면 IPv6 HTTP URL에 사용되는 것과 유사한 트릭을 사용할 수 있습니다.
dst [::1]
소켓이 모든 포트의 ::1에 연결되어 있는지 여부
또 다른 방법은
dst ::1
128/입니다. /는 콜론이 IPv6 주소의 일부임을 이해하는 데 도움이 됩니다.이제 :에 대한
dst 10.0.0.1
또 다른 별칭을 추가 할 수 있습니다dst [10.0.0.1]
. :-)주소는 DNS 이름일 수 있습니다. 이 경우 모든 주소가 발견되며(옵션
-f
이나 특수 주소 접두사 로 제한되지 않는 경우 모든 주소 계열에서inet:
)inet6
결과 표현식은or
모든 주소를 포함합니다. - B. 포트 표현:
dport >= :1024 dport != :22 sport < :32000
등.
모든 관계:
<
,>
,=
,>=
,=
,==
,!=
,eq
,ge
, ... 원하는 변형을 사용하십시오. 단lt
,ne
명령줄에 특수 문자를 입력할 때 특수 문자를 이스케이프하는 것을 잊지 마십시오. :-)포트 번호는 구문적으로 사례 A와 일치합니다. IP 주소를 추가할 수도 있지만 AFe 유형의 해당 조건자와 동일한
==
및 를 제외하고는 비교에 참여하지 않습니다.!=
dst 10.0.0.1:22
동등dport eq 10.0.0.1:22
하고not dst 10.0.0.1:22
동등하다dport neq 10.0.0.1:22
- 다. 키워드
autobound
. 로컬 시스템의 자동으로 바인딩된 소켓과 일치합니다.
4. 예시
FIN-WAIT-1
1. Apache에서 네트워크 193.233.7/24까지 모든 활성 TCP 소켓을 나열하고 해당 타이머를 확인합니다.ss -o state fin-wait-1 \( sport = :http or sport = :https \) \ dst 193.233.7/24
이런, 동등한 논리 연산이 부족하다는 점을 언급하는 것을 잊었습니다
and
.- 2. 좋아요, 이제 나머지를 보세요...
ss -o excl fin-wait-1 ss state fin-wait-1 \( sport neq :http and sport neq :https \) \ or not dst 193.233.7/24
우리가해야 할 일에 유의하십시오.둘SS는 이를 요구했다. 상태 일치는 항상 주소/포트 일치와 연결됩니다. 그 이유는 순전히 기술적입니다. ss는 주소를 확인하기 전에 일치하지 않는 상태를 빠르게 건너뛰고, 시간 대기 및 syn-recv 소켓을 빠르게 건너뛰는 기능이 논리적 일반성보다 더 중요하다고 생각합니다.
- 3. 이제 자동 바인딩된 포트를 사용하는 모든 소켓을 살펴보겠습니다.
ss -a -A all autobound
- 4. 마지막으로 로컬 X 서버에 연결된 모든 로컬 프로세스를 찾습니다.
ss -xp dst "/tmp/.X11-unix/*"
죄송합니다. 현재 커널에서는 작동하지 않으므로 패치가 필요합니다. 하지만 우리는 여전히 서버측을 살펴볼 수 있습니다:
ss -x src "/tmp/.X11-unix/*"
5. 땅으로 돌아가기: 진정한 수동
5.1 명령 매개변수
매개변수의 일반적인 형식 ss
은 다음과 같습니다.
ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]
OPTIONS
OPTIONS
일반적인 UNIX 규칙을 사용하는 단일 문자 옵션 목록입니다.
-h
- 도움말 페이지 표시-?
——물론 똑같습니다-v
,-V
- 버전을 인쇄ss
하고 종료합니다.-s
- 요약 통계를 인쇄합니다. 이 옵션은 다양한 소스에서 다이제스트를 얻는 소켓 목록을 구문 분석하지 않습니다. 이는 소켓 수가 너무 많아서 구문 분석이 어려울 때/proc/net/tcp
유용합니다 .-D FILE
- 아무것도 표시하지 않으며FILE
필터를 적용한 후 TCP 소켓에 대한 원시 정보만 덤프합니다.FILE
사용된 경우-
stdout
.-F FILE
- 읽기 필터에서 계속됩니다FILE
. 의 각 줄은FILE
단일 명령줄 옵션으로 해석됩니다.FILE
사용된 경우-
stdin
.-r
- 숫자 주소/포트 구문 분석을 시도합니다.-n
- 포트를 해결하려고 하지 마세요.-o
- 일부 선택적 정보 표시(fe TCP 타이머)-i
- 일부 TCP 관련 정보 표시(RTO, 혼잡 창, 느린 시작 임계값 등)-e
- 추가 옵션 정보 표시-m
- 소켓에서 사용하는 메모리에 대한 확장 정보를 표시합니다. 활성화된 경우 에만 사용할 수 있습니다tcp_diag
.-p
- 소켓을 소유한 프로세스 목록 표시-f FAMILY
- 주소를 확인하는 데 사용되는 기본 주소 계열입니다. 또한 이 옵션은 지정된 주소 계열을 지원하는 소켓 목록을 제한합니다. 현재 다음 시리즈를 지원합니다 :unix
,inet
,inet6
,link
.netlink
-4
- 별칭-f inet
-6
- 별칭-f inet6
-0
- 별칭-f link
-A LIST-OF-TABLES
- 덤프할 소켓 테이블의 쉼표로 구분된 목록입니다. 다음 식별자가 이해됩니다:all
,inet
,tcp
,udp
,raw
,unix
,packet
,netlink
,unix_dgram
,unix_stream
,packet_raw
,packet_dgram
.-x
- 별칭-A unix
-t
- 별칭-A tcp
-u
- 별칭-A udp
-w
- 별칭-A raw
-a
- 소켓의 모든 상태를 표시합니다. 기본적으로 상태 의 소켓LISTEN
은 건너뜁니다.TIME-WAIT
SYN_RECV
CLOSE
-l
- 상태에 있는 매장만 표시LISTEN
STATE-FILTER
STATE-FILTER
일치하는 모든 상태 세트를 구성할 수 있습니다. 구문은 일련의 키워드 state
와 exclude
상태 식별자로 구성됩니다. 사용 가능한 식별자는 다음과 같습니다.
- 모든 표준 TCP 상태:
established
,syn-sent
, ,syn-recv
,fin-wait-1
,fin-wait-2
,time-wait
,closed
,close-wait
및last-ack
.listen
closing
all
- 모든 주에 대해connected
listen
- 및를 제외한 모든 주closed
synchronized
connected
- 제외한 모든 주syn-sent
bucket
- 미니 소켓으로 유지되는 상태, 즉time-wait
및syn-recv
.big
- 와 반대 인bucket
ADDRESS_FILTER
ADDRESS_FILTER
는 C 스타일 fe 에서 로 축약될 수 있는 and
, or
및 연산을 사용하는 부울 표현식입니다 .not
&
&&
조건자는 로컬 및 원격 소켓 주소를 확인합니다. 술어에는 여러 유형이 있습니다.
dst ADDRESS_PATTERN
- 원격 주소와 포트 일치src ADDRESS_PATTERN
- 로컬 주소와 포트 일치dport RELOP PORT
- 원격 포트를 번호와 비교sport RELOP PORT
- 로컬 포트를 번호와 비교autobound
- 소켓이 임시 포트에 바인딩되어 있는지 확인하세요.
RELOP
<=
>=
등 의 일부입니다 . ==
유닉스 셸에서 더 쉽게 사용할 수 있도록 FORTRAN 문자 le
등과 같은 기호도 허용됩니다.gt
형식과 의미는 ADDRESS_PATTERN
주소 계열에 따라 다릅니다.
inet
-IP 접두사로 구성되며ADDRESS_PATTERN
그 뒤에 선택적 콜론과 포트가 옵니다. 접두사 또는 포트 부분이 누락되거나 대체된 경우*
와일드카드 일치가 표시됩니다 .inet6
- 와 동일하며inet
접두사만 IPv6 주소를 나타냅니다. 콜론과 달리inet
콜론은 모호하므로 주소가ss
뒷받침 되는 URL에서 사용되는 것과 같은 체계를 사용할 수 있습니다.[
]
unix
-ADDRESS_PATTERN
쉘 스타일 와일드카드 문자입니다.packet
- 형식은 다음과 같습니다inet
. 포트 대신 인터페이스 인덱스만 유지되고 주소 대신 링크 레이어 프로토콜 ID만 유지됩니다.netlink
- 형식은 다음과 같습니다inet
. 포트 대신 소켓 pid만 유지되고 주소 대신 netlink 채널이 유지됩니다.
PORT
ADDRESS_PATTERN
와일드카드 주소 부분과 구문이 동일합니다. 물론 UNIX 소켓에서는 정의되지 않습니다.
5.2 환경변수
ss
다양한 환경 변수를 사용하여 정보 소스를 변경할 수 있습니다.
PROC_SLABINFO
씌우다/proc/slabinfo
PROC_NET_TCP
씌우다/proc/net/tcp
PROC_NET_UDP
씌우다/proc/net/udp
- 등.
변수를 사용하면 PROC_ROOT
모든 계층 루트를 변경할 수 있습니다 /proc/
.
변수는 TCPDIAG_FILE
TCP 소켓에 대한 정보의 커널 덤프를 요청하는 대신 파일을 열도록 지정합니다.
/proc/
이 옵션은 일반적으로 .
5.3 출력 형식
6개의 열. 첫 번째는 Netid
불분명할 때 소켓 유형과 전송 프로토콜을 나타냅니다. tcp
, udp
, raw
는 UNIX 데이터그램 소켓, netlink 및 원시 및 데이터그램 패킷 소켓 의 u_str
약어입니다 . 이 열은 선택 사항이며 필터가 고유한 네트워크 ID를 선택하는 경우 숨겨집니다.unix_stream
u_dgr
nl
p_raw
p_dgr
두 번째 열은 입니다 State
. 소켓 상태가 여기에 표시됩니다. 이러한 이름은 UNCONN
TCP에서는 불가능하지만 다른 유형의 연결되지 않은 소켓에서는 일반적이라는 점을 제외하면 표준 TCP 이름입니다 . 마찬가지로 이 열도 숨길 수 있습니다.
그런 다음 두 열( Recv-Q
및 Send-Q
)에는 수신 및 전송 대기 중인 데이터의 양이 표시됩니다.
마지막 두 열에는 소켓의 로컬 주소와 포트, 그리고 해당 피어 주소(소켓이 연결된 경우)가 표시됩니다.
-o
options 또는 가 주어지면 -e
옵션 -p
은 고정된 위치에 표시되지 않고 공백 쌍으로 구분됩니다:
option:value
. 값이 단일 숫자가 아닌 경우 (
... 로 묶이고 )
쉼표로 구분된 값 목록으로 표시됩니다 . 철
timer:(keepalive,111min,0)
TCP 타이머의 일반적인 형식입니다(옵션 -o
).
users:((X,113,3))
일반적인 사용자 목록(옵션 -p
)입니다.
6. 일부 숫자
자, 성능을 측정하는 pidentd
도구를 사용해 보겠습니다 . ibench
이는 초당 30개의 요청입니다. 테스트할 것도 없고 너무 느립니다. 자, Patches 디렉토리에 있는 패치를 사용하여 pidentd를 패치해 보겠습니다. 그 후에는 초당 약 4300개의 요청을 처리했으며 많은 수의 시간 대기 버킷으로 소켓 테이블을 오염시키는 편리한 도구가 되었습니다.
따라서 각 테스트는 30000개의 소켓이 있는 오염된 테이블로 시작한 다음 테이블의 전체 덤프를 wc로 파이프하고 시간 변화를 측정합니다.
결과:
netstat -at
- 15.6초ss -atr
, 하지만 아니요tcp_diag
- 5.4초ss -atr
대tcp_diag
- 0.47초
댓글이 없습니다. 주석이 필요하지만 대부분의 시간이 tcp_diag
커널 내부에서 낭비되고 네트워크가 완전히 차단됩니다. 10초 이상이면 그렇습니다. tcp_diag
동일한 작업이 시스템 시간의 100밀리초 내에 수행됩니다.