2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Фильтрация в windows bat
Сообщение24.05.2018, 17:28 


05/09/16
12056
Чтобы не сыпать в одну тему разные вопросы, есть вот такой
Есть вывод команды nslookup в таком вот виде:
Код:
C:\>nslookup -ty=A+AAAA google.com 8.8.8.8
╤хЁтхЁ:  google-public-dns-a.google.com
Address:  8.8.8.8

Не заслуживающий доверия ответ:
╚ь :     google.com
Addresses:  2a00:1450:4010:c08::66
          64.233.165.138
          64.233.165.113
          64.233.165.139
          64.233.165.102
          64.233.165.100
          64.233.165.101


C:\>
Как отфильтровать (то есть вывести только) то что идет после "Adresses:"? Можно с самим "Adresses:"

Сейчас я использую команду nslookup -ty=any google.com 8.8.8.8 который дает вот такой вывод

(Оффтоп)

Код:
C:\>nslookup -ty=any google.com. 8.8.8.8
╤хЁтхЁ:  google-public-dns-a.google.com
Address:  8.8.8.8

Не заслуживающий доверия ответ:
google.com      internet address = 64.233.165.101
google.com      internet address = 64.233.165.113
google.com      internet address = 64.233.165.139
google.com      internet address = 64.233.165.102
google.com      internet address = 64.233.165.138
google.com      internet address = 64.233.165.100
google.com      AAAA IPv6 address = 2a00:1450:4010:c08::66
google.com      MX preference = 10, mail exchanger = aspmx.l.google.com
google.com      text =

        "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com      nameserver = ns4.google.com
google.com      nameserver = ns1.google.com
google.com      text =

        "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com      text =

        "v=spf1 include:_spf.google.com ~all"
google.com      MX preference = 20, mail exchanger = alt1.aspmx.l.google.com
google.com      MX preference = 50, mail exchanger = alt4.aspmx.l.google.com
google.com      ??? unknown type 257 ???
google.com      MX preference = 40, mail exchanger = alt3.aspmx.l.google.com
google.com      MX preference = 30, mail exchanger = alt2.aspmx.l.google.com
google.com      nameserver = ns3.google.com
google.com      nameserver = ns2.google.com
google.com
        primary name server = ns1.google.com
        responsible mail addr = dns-admin.google.com
        serial  = 197873648
        refresh = 900 (15 mins)
        retry   = 900 (15 mins)
        expire  = 1800 (30 mins)
        default TTL = 60 (1 min)

C:\>
и к которому я применяю findstr вот так:
Код:
C:\>nslookup -ty=any google.com. 8.8.8.8 2>nul | findstr /c:
"address"
google.com      internet address = 64.233.165.101
google.com      internet address = 64.233.165.113
google.com      internet address = 64.233.165.138
google.com      internet address = 64.233.165.139
google.com      internet address = 64.233.165.100
google.com      internet address = 64.233.165.102
google.com      AAAA IPv6 address = 2a00:1450:4010:c08::8a

C:\>

Но использование ключа -any в nslookup является негуманным по отношению к DNS серверам. А некоторые могут и неответить.

 Профиль  
                  
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 18:56 
Заслуженный участник


20/08/14
11760
Россия, Москва
Ну если Вас устроят только IPv4 адреса, то подойдёт такая команда:
Код:
nslookup -ty=A+AAAA ya.ru 8.8.8.8 2>nul |findstr /R /C:"^[Adres:]*   * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$" | findstr /v /C:"8.8.8.8"
Разумеется строку 8.8.8.8 лучше использовать из переменной, раз уж всё равно в батнике используете:
Код:
@nslookup -ty=A+AAAA %1 %2 2>nul |findstr /R /C:"^[Adres:]*   * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$" | findstr /v /C:"%2"
В обоих случаях между первой и второй звёздочкой стоит символ табуляции, а не пробел, как между второй и третьей. Без второго параметра (адреса сервера) вызывать не рекомендуется, нельзя отличить адрес сервера от его ответа.

Примеры вызова:
код: [ скачать ] [ спрятать ]
Используется синтаксис Text
Z:\>nslookup -ty=A+AAAA google.com 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]* * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
          173.194.220.102
          173.194.220.113
          173.194.220.139
          173.194.220.101
          173.194.220.138
          173.194.220.100

Z:\>nslookup -ty=A+AAAA ya.ru 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]*      * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
          87.250.250.242

Z:\>nslookup -ty=A+AAAA rbc.ru 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]*     * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
Addresses:  185.72.229.13
          80.68.253.13

Z:\>nslookup -ty=A+AAAA chipdip.ru 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]* * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
Address:  37.230.155.34

Z:\
Обратите внимание на последний вариант, если адрес только один, то слово Addresses сокращается.

 Профиль  
                  
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:01 


05/09/16
12056
Dmitriy40
Ага, идея понятна. Все-таки фильтровать по структуре IP-адреса.
Dmitriy40 в сообщении #1314653 писал(а):
Обратите внимание на последний вариант, если адрес только один, то слово Addresses сокращается.

Да, поэтому вот это, похоже, лишнее:
Код:
^[Adres:]*     * *

фактически достаточно
Код:
findstr /R /C:".*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"  | findstr /v /C:"8.8.8.8"


Dmitriy40 в сообщении #1314653 писал(а):
Разумеется строку 8.8.8.8 лучше использовать из переменной,

На самом деле опрашивается множество конкретных серверов, их адреса hardcoded в батнике, но если бы делался один запрос то конечно.

 Профиль  
                  
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:13 
Заслуженный участник


20/08/14
11760
Россия, Москва
wrest в сообщении #1314679 писал(а):
фактически достаточно
Код:
findstr /R /C:".*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"  | findstr /v /C:"8.8.8.8"
Не уверен, тут ведь ожидается лишь IPv4 адрес в любом месте строки, а что будет если цифры адреса встретятся в имени сервера к примеру или ещё где-нибудь в тексте? Можно налететь на ошибку. Впрочем если с Вашими конкретными серверами всё работает, то да, можно и короче.

 Профиль  
                  
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:20 


05/09/16
12056
Dmitriy40 в сообщении #1314684 писал(а):
Впрочем если с Вашими конкретными серверами всё работает, то да, можно и короче.

У меня в вашем варианте не работает: я не справился со вставлением символа табуляции :)

 Профиль  
                  
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:43 
Заслуженный участник


20/08/14
11760
Россия, Москва
wrest
Запустите блокнот или любой простой редактор, нажмите там клавишу Tab, выделите символ табуляции (клавиатурой: Home, Shift-End), заберите в буфер Ctrl-C и потом вставьте в нужное место строки. :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group