Форум программистов, компьютерный форум, киберфорум
Наши страницы
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Druchik
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 6
1

Найти все доменные имена второго уровня

17.04.2019, 22:00. Просмотров 244. Ответов 9

Здравствуйте, форумчане!

Нужна Ваша помощь. Необходимо найти все доменные имена второго уровня, к которым обращались пользователи за все время ведения лога. Подсчитать количество запросов каждого из доменных имен второго уровня (включая поддомены). Предварительно все доменные имена привести к нижнему регистру. В файл results.tsv вывести таблицу, в которой каждая строка имеет вид: <доменное имя второго уровня><символ табуляции><количество запросов этого доменного имени> Строки в файле отсортировать в порядке убывания числа запросов к доменам второго уровня. Если число запросов к нескольким доменам второго уровня одинаковое, отсортировать их по имени домена в алфавитном порядке.

Набросал небольшой код:

Bash
1
2
3
4
#!/bin/bash
 
awk '{n=split($15, a, "\."); t=a[n-2]"."a[n-1]"."; arr[t]++}
        END{ for(i in arr)print i, arr[i]}' dns-tunneling.log
Требуется помощь с реализацией остальных пунктов задания, в частности какой шаблон подставить, чтобы он выбирал строки, содержащие только доменные имена второго уровня.
Небольшая часть файла dns-tunneling.log во вложении.
0
Вложения
Тип файла: txt dns-tunneling.txt (2.9 Кб, 4 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2019, 22:00
Ответы с готовыми решениями:

Как найти все фаилы, имена которых состоят из нескольких слов?
Помогите написать сценарий. Он должен искать в текущем каталоге все фаилы, имена которых состоят из...

Вывести на экран все встречающиеся в тексте доменные имена
Дан текст. Вывести на экран все встречающиеся в данном тексте доменные имена (имена в формате...

Вывести на экран все встречающиеся в данном файле доменные имена
Дан текст. Вывести на экран все встречающиеся в данном файле доменные имена (в формате...

Дан текст. Вывести на экран все встречающиеся в данном тексте доменные имена
Дан текст. Вывести на экран все встречающиеся в данном тексте доменные имена (имена в формате...

Удалить из 1 файла все строки, где встречаются доменные имена из 2 файла
Есть два файла .txt, в первом (1.txt) лист урл адресов, в втором 2.txt только доменные имена....

9
Druchik
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 6
18.04.2019, 22:10  [ТС] 2
Допилил код, выполняет необходимые действия, правда выглядит не очень:

Bash
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
awk '{tolower($15); n=split($15, a, "."); 
        if(length(a[n-1]) != 0 && length(a[n-2]) != 0)
        {t=a[n-2]"."a[n-1]"."; arr[t]++}}
        END{for(i in arr) 
            {print (i"\t"arr[i])}}' dns-tunneling.log |
sort -k 2rn |
awk '{print ("<"$1">""<""\t"">""<"$2">")}' > results.tsv
exit
Не откажусь от советов бывалых по оптимизации скрипта, т.к. не проходит проверку файл results.tsv, видимо не все домены отловились...
0
Вложения
Тип файла: rar results.rar (4.3 Кб, 0 просмотров)
bidstrup
145 / 55 / 7
Регистрация: 11.03.2018
Сообщений: 280
18.04.2019, 23:56 3
В газетах пишут, что всё больше linux-пользователей смотрят в сторону pwsh ( powershell core ):
Bash
1
2
3
4
5
6
7
#!/usr/bin/env pwsh
 
$o = @{}
 
(sls '((\w+)[.])\w+[.]\s' dns-tunneling.txt).foreach{ $o[ $_.Matches.Groups[2].value ]++ }
 
$o.GetEnumerator() | Sort-Object Value, Name -Descending
output:
Код
Name                           Value
----                           -----
1yf                            5
sonymobile                     3
whatsapp                       2
weappstore                     2
google                         2
newrelic                       1
facebook                       1
0
Druchik
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 6
19.04.2019, 00:20  [ТС] 4
По условиям задания, можно использовать только bash. И сортировка у Вас не совсем корректная: если число запросов к нескольким доменам второго уровня одинаковое, отсортировать их по имени домена в алфавитном порядке. Но, спасибо за ответ!
0
19.04.2019, 00:20
Marinero
Модератор
Эксперт NIX
2212 / 1782 / 606
Регистрация: 02.03.2015
Сообщений: 5,772
19.04.2019, 08:45 5
Druchik, давайте четко определим какие признаки у
Цитата Сообщение от Druchik Посмотреть сообщение
доменные имена второго уровня
тогда проще будет работать

Добавлено через 19 минут
Bash
1
grep -o '\([^.[:blank:]]\+\.\)\{2\}\s' dns-tunneling.txt | sort | uniq -c | sort -k1nr
2
Druchik
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 6
19.04.2019, 09:11  [ТС] 6
Я и сам не уверен. Раньше считал, что все что находится после первой точки, до второй начиная с конца, относится к домену первого уровня, а все что между второй и третьей, к домену второго уровня, да вот теперь начал сомневаться. Истина только у препода, осталось только до него достучаться.
0
Druchik
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 6
19.04.2019, 09:42  [ТС] 7
В файле встречаются строки вида:

109.123.78.xn--72,91-.109.243.184.
109.123.78.72,91.109.243.184.
91.109.244.xn--66,91-.109.244.xn--67,91-.109.243.183.

которые и выбиваются из общего контекста.
Можете прокомментировать регулярное выражение для grep, хотел изобразить что-то подобное для awk, но не вышло.
0
Вложения
Тип файла: rar dns-tunneling.rar (10.85 Мб, 1 просмотров)
bidstrup
145 / 55 / 7
Регистрация: 11.03.2018
Сообщений: 280
19.04.2019, 10:46 8
Цитата Сообщение от Druchik Посмотреть сообщение
По условиям задания, можно использовать только bash.
Молодой человек, я писал про наметившиеся современные тенденции в мире,
на сраные задания в российских учебных учреждениях миру совершенно наплевать;
какой инструмент удобней, таким и надо пользоваться.

вот так тоже будет работать:

Bash
1
2
3
#!/usr/bin/env pwsh
 
grep -o '\([^.[:blank:]]\+\.\)\{2\}\s' dns-tunneling.txt | sort | uniq -c | sort -k1nr
Что касается "если число запросов к нескольким доменам второго уровня одинаковое, отсортировать их по имени домена в алфавитном порядке", то да, было некорректно; придётся извернуться и вводить вычисляемое поле, чтобы удовлетворить данные требования:


PowerShell
1
$o.GetEnumerator() | Sort-Object  @{ E = {$_.Value}; Ascending = 0 }, Name
Добавлено через 17 минут
Цитата Сообщение от Druchik Посмотреть сообщение
В файле встречаются строки вида:
109.123.78.xn--72,91-.109.243.184.
109.123.78.72,91.109.243.184.
91.109.244.xn--66,91-.109.244.xn--67,91-.109.243.183.
которые и выбиваются из общего контекста.
Тогда, действительно, лучше выдёргивать домен, опираясь сначала на номер колонки.
0
Marinero
Модератор
Эксперт NIX
2212 / 1782 / 606
Регистрация: 02.03.2015
Сообщений: 5,772
19.04.2019, 15:30 9
Цитата Сообщение от Druchik Посмотреть сообщение
В файле встречаются строки вида:
109.123.78.xn--72,91-.109.243.184.
Bash
1
grep -o '[[:alnum:]-]\+\.[[:alpha:]]\+\.\s' dns-tunneling.txt | sort | uniq -c | sort -k1nr
1
Druchik
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 6
19.04.2019, 16:01  [ТС] 10
При таком выражении отсекаются и другие адреса:

ems24\032your-freedom.de:internetfree/24.
ems17your-freedom.de:internetfree/17.

и т.д.

Без ясности с доменными именами, здесь можно гадать сколь угодно долго. Буду ждать обратную связь от преподавателя. Спасибо за ответ.
0
19.04.2019, 16:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2019, 16:01

Доменные имена
Здравствуйте! Не могу понять: почему у одних регистраторов доменное имя в зоне RU стоит...

Доменные имена
Здравствуйте о Великие)) Помогите новечку! Нужна таблица доменных имен и адресов определенной...

Доменные имена
Привет всем. Заинтересовал вопрос: Вот есть адрес сайта - www.site.com.kz Не нашел RFC, где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru