현재 특정 포트에 연결된 모든 고유 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 }'

awk에 대한 설명을 원하시면 알려주세요.

답변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를 수행하는 것이 가능하지만 아마도 더 장황해질 것입니다.

관련 정보