Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/33: Рейтинг темы: голосов - 33, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 7

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

17.04.2019, 22:00. Показов 6911. Ответов 10

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане!

Нужна Ваша помощь. Необходимо найти все доменные имена второго уровня, к которым обращались пользователи за все время ведения лога. Подсчитать количество запросов каждого из доменных имен второго уровня (включая поддомены). Предварительно все доменные имена привести к нижнему регистру. В файл 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 во вложении.
Вложения
Тип файла: txt dns-tunneling.txt (2.9 Кб, 11 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2019, 22:00
Ответы с готовыми решениями:

Вывести на экран все встречающиеся в тексте доменные имена
Дан текст. Вывести на экран все встречающиеся в данном тексте доменные имена (имена в формате www.xxx.xxx.ru , где x-любой символ...

Вывести на экран все встречающиеся в данном файле доменные имена
Дан текст. Вывести на экран все встречающиеся в данном файле доменные имена (в формате www.xxxxxxxxxxx.by где х – любой символ латинского...

Дан текст. Вывести на экран все встречающиеся в данном тексте доменные имена
Дан текст. Вывести на экран все встречающиеся в данном тексте доменные имена (имена в формате www.xxx.xxx.ru , где x-любой символ...

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

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, видимо не все домены отловились...
Вложения
Тип файла: rar results.rar (4.3 Кб, 2 просмотров)
0
 Аватар для bidstrup
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
18.04.2019, 23:56
В газетах пишут, что всё больше 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:
Code
1
2
3
4
5
6
7
8
9
Name                           Value
----                           -----
1yf                            5
sonymobile                     3
whatsapp                       2
weappstore                     2
google                         2
newrelic                       1
facebook                       1
0
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 7
19.04.2019, 00:20  [ТС]
По условиям задания, можно использовать только bash. И сортировка у Вас не совсем корректная: если число запросов к нескольким доменам второго уровня одинаковое, отсортировать их по имени домена в алфавитном порядке. Но, спасибо за ответ!
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.04.2019, 08:45
Лучший ответ Сообщение было отмечено Druchik как решение

Решение

Druchik, давайте четко определим какие признаки у
Цитата Сообщение от Druchik Посмотреть сообщение
доменные имена второго уровня
тогда проще будет работать

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

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, но не вышло.
Вложения
Тип файла: rar dns-tunneling.rar (10.85 Мб, 1 просмотров)
0
 Аватар для bidstrup
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
19.04.2019, 10:46
Цитата Сообщение от 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
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.04.2019, 15:30
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 7
19.04.2019, 16:01  [ТС]
При таком выражении отсекаются и другие адреса:

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

и т.д.

Без ясности с доменными именами, здесь можно гадать сколь угодно долго. Буду ждать обратную связь от преподавателя. Спасибо за ответ.
0
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 7
27.04.2019, 12:44  [ТС]
Удалось решить задачу. Проблема была в одном адресе который начинался с заглавной буквы. А по условиям, все доменные адреса должны быть приведены к нижнему регистру.
Marinero, подредактировал Вашу версию для получения необходимых результатов:

Bash
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
# place your code here
# поместите сюда код
grep -o '\([^.[:blank:]]\+\.\)\{2\}\s' dns-tunneling.log |
tr [:upper:] [:lower:] |
sort |
uniq -c |
sort -k1nr |
awk '{print ($2"\t"$1)}' > results.tsv
exit
или можно использовать мою версию:
Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
 
# place your code here
# поместите сюда код
awk '{s=tolower($15); n=split(s, 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])|"sort -k 2rn"}
}' dns-tunneling.log > results.tsv
Всем спасибо за участие и помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2019, 12:44
Помогаю со студенческими работами здесь

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

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

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

Доменные имена
Здравствуйте! Не могу понять: почему у одних регистраторов доменное имя в зоне RU стоит 600р.(RU-CENTR) а у других 125(ua-hosting).? ...

Меню второго уровня не все отображается
Если навести курсор на меню первого уровня, к примеру &quot;Поверка счетчика&quot;, то меню второго уровня не все отображается...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru