현재 특정 포트에 연결된 모든 고유 IP 주소를 나열하는 방법은 무엇입니까?

현재 특정 포트에 연결된 모든 고유 IP 주소를 나열하는 방법은 무엇입니까?

서버의 포트 5222에 연결된 고유 클라이언트 수를 알고 싶다고 가정해 보겠습니다.

이보다 더 좋고, 더 빠르고, 더 강한 방법을 찾을 수 있나요?

netstat -nt | grep ':5222.*ESTABLISHED' | awk '{ print $5 }' \
| grep -Po '[0-9]{1,3}(\.[0-9]{1,3}){3}' | uniq | wc -l

나는 이것이 인터넷 주소에 대한 지나치게 단순한 정규식이라는 것을 알고 있지만 netstat는 아마도 유효한 주소만 출력할 것이기 때문에 올바른 형식의 주소를 확인할 필요가 없는 것 같습니다.

누구든지 올 수 있나요 netstat -nt | awk { awesomeness }?

아마도 하나 netstat -nt | awk { simplicity }| uniq | wc -l?

답변1

Linux를 사용 중이고 ss설치할 수 있는 경우:

ss -o state established '( dport = :5222 )'|awk -F"[\t :]+" 'NR!=1{ ip[$5]+=1 } END{ for (i in ip){n++};print n }'

이상한 설명을 원하시면 알려주세요.

답변2

현재 특정 포트에 연결된 모든 고유 IP 주소를 나열합니다.

netstat -ntu | egrep ':80|:443' | grep -v LISTEN | awk '{print $5}' | cut -d\t -f5 | grep -Po '[0-9]{1,3}(\.[0-9]{1,3}){3}' | sort | uniq -c | sort -rn | grep -v 127.0.0.1

답변3

올바른 필드 구분 기호를 설정한 다음 awk의 내장 정규식 일치 기능을 사용하여 grep을 제거하세요. 이것은 uniq로 출력을 파이프하는 버전입니다. IMO, uniq를 일부 awk 코드로 완전히 대체할 필요는 없습니다. 덜 단순해지고 unix-y가 줄어들기 때문입니다.

netstat -nt  | gawk --re-interval -F':|[ ]+' '$7==5222 && $8=="ESTABLISHED" && $6 ~ /[0-9]{1,3}(\.[0-9]{1,3}){3}/{print $6}' | uniq

그러나 더 이상 복잡해지지 않으며 여전히 한 줄로 괜찮아 보입니다.

netstat -nt  | gawk --re-interval -F':|[ ]+' '$7==5222 && $8=="ESTABLISHED" && $6 ~ /[0-9]{1,3}(\.[0-9]{1,3}){3}/{a[$6]} END{for (i in a) print i}'

답변4

이 시도:

netstat -nt | awk '/:5222.*ESTABLISHED/ { split ($5, a, ":"); print a[1] }' | uniq | wc -l

물론 awk에서 uniq 및 wc를 실행하는 것도 가능하지만 더 장황할 수 있습니다.

관련 정보