netstat에는 44K 이상의 연결이 표시되지만 IP 주소는 표시되지 않습니다. 그게 무엇입니까?

netstat에는 44K 이상의 연결이 표시되지만 IP 주소는 표시되지 않습니다. 그게 무엇입니까?

Linux netstat의 사용 및 출력에 대해 질문이 있습니다. 내 서버가 통신 지연 및 병목 현상에 직면한 딜레마를 해결하려고 노력 중이어서 파고들고 조사하기 시작했습니다. 제가 알아야 할 한 가지는 IP 주소별로 그룹화된 연결의 전체 목록과 해당 연결 수의 개수입니다. 확립되었으므로 먼저 다음을 얻습니다.

[root@ip-localhost ec2-user]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

  ...
  9 77.70.115.30
 14 54.211.25.39
198 172.31.30.15

3951

문제는 IP당 나열된 연결 수를 합산하면 얻은 총계가 3951이 아니고 44K 이상으로 증가하므로 IP 주소가 없는 최종 행 수는 무엇을 의미합니까? 파일 설명자? 내부 커널 연결이 가능합니까? 시스템의 개방형 소켓을 잊으셨나요?

나는 또한 이러한 연관성을 요약했습니다.

[root@ip-localhost ec2-user]# netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
   1 established)
   1 Foreign
   4 FIN_WAIT1
   8 SYN_SENT
  57 LISTEN
  67 SYN_RECV
 180 TIME_WAIT
1040 LAST_ACK  
6323 CLOSE_WAIT  
7209 ESTABLISHED  

````

참고: netstat 출력 끝에 나열된 연결에는 총계가 없기 때문에 전체 출력을 삽입해야 했습니다. 감사해요

답변1

글쎄요, awk를 적용하고 출력을 자르기 전에 먼저 netstat 명령을 이해해야 한다고 생각합니다.

netstat -ntu 

tcp6을 포함하여 모든 udp 및 tcp 연결이 표시됩니다. 따라서 netstat 명령의 출력에 awk & cut을 적용하려고 하면

netstat -ntu | awk '{print $5}' | cut -d: -f1

그런 다음 잘라내기 명령은 ":"을 구분 기호로 선택하고 첫 번째 필드를 표시합니다.

TCP v4 연결은 다음과 같습니다

12.34.56.78:80

netstat 출력에서 ​​tcp v6 연결은 다음과 같습니다.

::1:631

이제 구분 기호 ":"를 사용하여 잘라내기를 적용하면 tcp v4 연결의 출력에는 IP 주소가 표시되지만 tcp v6의 출력은 빈 줄이 됩니다. 그리고 sort|uniq -c를 적용하면 빈 줄이 계산됩니다.

웹 서버에 대한 모든 TCP 연결을 나열하려면 다음을 시도하십시오.

netstat -npa | grep pid_of_your_web_server | grep ESTABLISHED  | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c 

또는 웹 서버와 관련된 모든 TCP 연결

netstat -npa | grep pid_of_your_web_server | grep tcp | grep -v LISTEN | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c

그룹화하지 않고 모든 합계 계산

netstat -npa | grep pid_of_your_web_server | grep tcp | grep -v LISTEN | wc -l

답변2

오래된 주제로 넘어가서 미안하지만 개선하기에는 너무 늦지 않았습니다. 다음과 같이 grep에 리소스를 낭비하는 대신 모든 것에 대해 awk를 사용하는 것은 어떨까요?

netstat -npa | awk -F: '/tcp/&&/LISTEN/ {print $1}' | sort | uniq -c

관련 정보