Intereting Posts
История Loggin для syslog Можно ли обновить систему FreeBSD до последней версии (базовая система + пакеты), используя только двоичные файлы? Могу ли я заставить SSMTP автоматически устанавливать заголовок «To:»? Цветной текст, созданный с помощью PS1, и цветной вывод из команд путают друг друга Как просматривать и воспроизводить файлы .mov на Ubuntu 16.04 LTS netstat показывает соединение ESTABLISHED без процесса wireshark: Не удалось запустить / usr / sbin / dumpcap в дочернем процессе Могу ли я конвертировать и деконвертировать устройство bache0 на стандартное блочное устройство и читать файловую систему? Как выполнить базовые вычисления в сценарии оболочки? вкладка grep и символ звезды Какие системные вызовы могут создать новый процесс? Как объединить дублируемую историю команды на терминале? Не удалось увидеть eth0 после ifconfig Как затвердеть su с dpkg-statoverride? openBSD w / KDE 3.5 – нет текста в меню или каких-либо gui's

счетчик подсчетов netstat

Проблема с трубкой Unix: как обрабатывать многострочный вход для вывода строки и вставлять некоторые процессы с каналами.

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

Немного контекста: netstat разобрался, чтобы получить список внешних ip-адресов, связанных с $ current_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 🙂

вам нравится | вы ?

лучшее, что я прихожу с

 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]]++ ; } {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}') gethostname из IP
  • use ${name%%.} чтобы избавиться от окончания .
  • Добавить current_ip

не уверен, что мое решение лучше всего, у меня только 4 трубы вместо 12.