netstat 파이프 카운트 호스트

netstat 파이프 카운트 호스트

Unix 파이프 문제: 여러 줄의 입력을 출력 줄로 처리하고 일부 파이프 프로세스를 삽입하는 방법.

echo "111 22222222" | awk '{print $1 " " $2 " " piped_processes_using_2nd_argument}'

일부 컨텍스트: netstat는 $current_ip에 연결된 외부 IP 주소 목록을 가져오기 위해 구문 분석하고 내림차순으로 정렬합니다(예: 실제는 아님).

$ netstat -plant |grep $current_ip | tr -s ' ' |cut -f5 -d' '|cut -f1 -d':' |sort -n |uniq -c |sort -nr
   7 8.8.8.8
   2 4.4.4.4
   1 186.2.168.190
   1 207.192.128.2

지금까지 역방향 DNS는

$ host 4.4.4.4 | tr -s " " | rev  | cut -f1 -d " " |rev
alu7750testscr.xyz1.gblx.mgmt.Level3.net.

여기에서 다음과 같은 것을 얻고 싶습니다(예, 출력에 IP를 유지합니다).

   7 8.8.8.8 google-public-dns-a.google.com.
   2 4.4.4.4 alu7750testscr.xyz1.gblx.mgmt.Level3.net.
   1 186.2.168.190 ddos-guard.net.
   1 207.192.128.2 www.NexQloud.com.

이들을 병합하려면 awk만 생각할 수 있었지만 익숙하지 않기 때문에 결과는 매우 추악합니다.

netstat -plant |grep $current_ip | tr -s ' ' |cut -f5 -d' '|cut -f1 -d':' |sort -n |uniq -c |sort -nr  | awk '{ system("echo " $1 " " $2 " $(host "$2" | tr -s \" \" | rev  | cut -f1 -d \" \" |rev)") }' | sort -nr -k1

나는 시계에서 --interval=1을 호출할 수 있을 만큼 더 우아하고 빠른 것을 원했습니다 :-)

답변1

당신이 | 그것을 좋아합니까 방법?

내가 가져온 최고의 것

current_ip=$(ifconfig eth0 | awk '$1 == "inet" { split($2,A,":") ; print A[2] ; } ')

netstat -plant | grep $current_ip | awk '{split($5,A,":") ; howmany[A[1]]++ ; }
END { for (h in howmany) printf "%d %s \n",howmany[h],h ;} '|
 sort -nr |
while read hm ho
do
  name=$(host $ho|awk '{print $NF}')
  echo $hm $ho $name
done

어디

  • 마지막 문자가 파이프인 경우 새 줄을 이스케이프할 필요가 없습니다.
  • {split($5,A,":") ; howmany[A[1]]++ ; }각 호스트 및 개수를 기억합니다(포트 번호를 제거한 후).
  • END { for (h in howmany) printf "%d %s \n",howmany[h],h ;}netstat의 끝에서 결과를 인쇄합니다.
  • name=$(host $ho|awk '{print $NF}')IP에서 호스트 이름 가져오기
  • use ${name%%.}결말을 없애라.
  • 현재 IP 추가

내 솔루션이 더 나은지 확실하지 않습니다. 파이프가 12개가 아닌 4개뿐입니다.

관련 정보