Bash: Как напечатать дополнительный столбец, соответствующий IP-адресу и имени

Чтобы создать загрузочный USB-накопитель debian с компьютера Linux, вы можете использовать команду dd или команду cp как рекомендуется на официальном сайте.

Использование dd :

dd if=/path/to/ISO of=/dev/sdX bs=4M; sync

Использование cp :

cp /path/to/iso /dev/sdX

Как записать образ CD / DVD / BD на флэш-накопитель USB?

На Linux машине, просто используйте команду cp, чтобы скопировать образ на USB-накопитель:

cp

В качестве альтернативы вы также можете использовать dd:

dd if = of = bs = 4M; синхронизация

1
22.03.2016, 23:09
4 ответа

Попробуйте эту протестированную версию:

netstat -tn 2>/dev/null | awk '/:80 / {print $5}' | sed 's/.*::ffff://' | sed 's/:.*//' | sor t | uniq -c | sort -nr |\
while read index ipaddress ; do \
  printf "%s " "${index}" ;\
  getent hosts "${ipaddress}" ;\
  if [ $? -eq 2 ]; then \
    printf "%s\n" "${ipaddress}" ;\
  fi ;\
done

Он использует стандартный getent для запроса базы данных hosts для получения имя хоста с учетом его IP-адреса.

Тест:

5 81.133.113.200  host81-133-113-200.in-addr.btopenworld.com
4 80.229.142.126  garnerhome.plus.com
2 94.136.36.29    mail.e-trackit.co.uk
2 92.19.231.69    host-92-19-231-69.static.as13285.net
2 85.159.56.230
2 83.70.246.152   83-70-246-152-dynamic.b-ras1.prp.dublin.eircom.net
2 81.131.118.236  host81-131-118-236.range81-131.btcentralplus.com
2 185.106.92.42
1 92.19.232.88    host-92-19-232-88.static.as13285.net
...
2
27.01.2020, 23:16

Я забываю, что Sed можно использовать для добавления строки, а не только для удаления содержимого. Я использовал Sed, чтобы найти строку и добавить после нее строку. Довольно просто, если подумать.

Думаю, я слишком усложнил ситуацию с выводом в столбцах

Простой один лайнер в качестве примера:

  netstat -tn 2>/dev/null | awk '/:80 / {print $5}' | sed 's/.*::ffff://' | sed 's/:.*//' | sed '/8.8.8.8/s/$/ Its Google/' | sort | uniq -c | sort -nr
1
27.01.2020, 23:16

Вы можете обрабатывать вывод построчно и печатать согласно ваши требования. Предполагая, что вы хотите сопоставить адреса с именами хостов из / etc / hosts, вы можете сделать что-то вроде этого:

get_connected_hosts() {
  netstat -tn 2>/dev/null | awk '/:80 / {print $5}' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
}

get_connected_hosts | while read line; do
  set -- $line
  result=$(grep $2 /etc/hosts | head -1 | awk '{ print $2 }')
  # or a reverse DNS lookup, result=$(dig +short -x $2)
  echo "$1 $2 - $result"
done | column -t
1
27.01.2020, 23:16
netstat -tn | awk '/:80 / {print $5}' | sed -e 's/:.*//' | 
    xargs -i sh -c 'echo {} $(getent hosts {})' | 
    awk '$1 == $2 {print $2, $3; next}; {print}' | 
    sort | uniq -c | sort -nr

(все может быть однострочным, я добавил перевод строки, чтобы избежать горизонтальных полос прокрутки и сделать его более читаемым)

Это использует xargs -i (с неявным -L 1 ) для выполнения поиска getent hosts перед запуском sort | uniq -c . Это сложнее, чем должно быть, потому что getent не выводит ничего, если поиск ничего не возвращает, поэтому нам нужно убедиться, что IP-адрес печатается с помощью echo -ing it до getent . Второй awk гарантирует, что в каждой строке печатается только один IP-адрес.

В качестве альтернативы можно использовать nslookup , dig -x или host -i для поиска IP-адреса в имени хоста, но все это потребует еще больше обработки вывода.

sed после awk в первой строке действительно не требуется, мы могли бы сделать то же самое, используя awk gsub ( ) функция для изменения $ 5 перед ее печатью, но я думаю, что такой способ более читабелен и понятен.

1
27.01.2020, 23:16

Теги

Похожие вопросы